Android设备节点

Android设备节点

ID:40530280

大小:38.60 KB

页数:6页

时间:2019-08-04

Android设备节点_第1页
Android设备节点_第2页
Android设备节点_第3页
Android设备节点_第4页
Android设备节点_第5页
资源描述:

《Android设备节点》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第1章Android设备节点的创建在编写linux设备驱动程序的时候,很多时候都是利用mknod命令来手动创建设备节点的,带上名字和主次设备号就可以在/dev目录下生成设备节点。同样Android沿用了linux内核,很多设备驱动的节点是又是什么时候创建的呢?在kernel自解压模块加载完成之后,会去运行android第一个应用程序init。在init.c的main函数中。System/core/init/init.cintmain(intargc,char**argv){……action_for_each_trigger("boot",action_add_queue_t

2、ail);……}在init进程解析init.rc脚本完成后,在onboot的最后两句是classstartmain和core,其中classStart是命令,在keyword.h中定义了class_start对应的function实际就是do_class_start。System/core/init/builtins.cintdo_class_start(intnargs,char**args){service_for_each_class(args[1],service_start_if_not_disabled);return0;}System/core/init/in

3、it_parser.cvoidservice_for_each_class(constchar*classname,void(*func)(structservice*svc)){……list_for_each(node,&service_list){svc=node_to_item(node,structservice,slist);if(!strcmp(svc->classname,classname)){func(svc);}}在之前解析init.rc脚本的时候,service会被放在service_list的链表里。接下来就是要执行service_for_each_

4、class的func(svc),也就是service_start_if_not_disabled。System/core/init/builtins.cstaticvoidservice_start_if_not_disabled(structservice*svc){if(!(svc->flags&SVC_DISABLED)){service_start(svc,NULL);}}Android的service大都是编译成可执行文件以命令的格式,我们注意到在init.rc中又这么个6service值得关注下。serviceueventd/sbin/ueventdclassc

5、orecriticalAndroid的服务不是选项不是disabled并且带core和main的选项的服务都是需要开机自动加载的服务。而ueventd是由system/core/init/ueventd.c编译而成的。System/core/init/ueventd.cintueventd_main(intargc,char**argv){……ueventd_parse_config_file("/ueventd.rc");……snprintf(tmp,sizeof(tmp),"/ueventd.%s.rc",hardware);ueventd_parse_config_f

6、ile(tmp);……device_init();……while(1){ufd.revents=0;nr=poll(&ufd,1,-1);if(nr<=0)continue;if(ufd.revents==POLLIN)handle_device_fd();}}Ueventd的main函数做的事情比较多,首先是要解析根文件系统下的ueventd.rc以及ueventd.${hardware}.rc。System/core/init/ueventd_parser.cintueventd_parse_config_file(constchar*fn){char*data;dat

7、a=read_file(fn,0);if(!data)return-1;parse_config(fn,data);DUMP();return0;}staticvoidparse_config(constchar*fn,char*s){……state.parse_line=parse_line_device;……6for(;;){……switch(token){caseT_EOF:state.parse_line(&state,0,0);return;caseT_NEWLINE:if(nargs){tate.par

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。