Android -- Android Init进程的处理流程分析

Android -- Android Init进程的处理流程分析

ID:39464505

大小:299.50 KB

页数:39页

时间:2019-07-03

Android -- Android Init进程的处理流程分析_第1页
Android -- Android Init进程的处理流程分析_第2页
Android -- Android Init进程的处理流程分析_第3页
Android -- Android Init进程的处理流程分析_第4页
Android -- Android Init进程的处理流程分析_第5页
资源描述:

《Android -- Android Init进程的处理流程分析》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、Android--AndroidInit进程的处理流程分析最近在看AndroidInit进程的处理流程,现记录如下。在Android中,Init进程是Linux内核启动后创建的第一个用户进程,地位非常重要。Init进程的可执行文件在/system/core/init/目录下,我们直接看Init进程的main()函数,该函数的代码处理流程较长,我们分两大段来分析。首先看第一大段:[cpp]viewplaincopy在CODE上查看代码片派生到我的代码片intmain(intargc,char**ar

2、gv){//检测启动程序的文件名,如果是ueventd或者watchdogd,则执行相应守护进程的主函数,然后退出if(!strcmp(basename(argv[0]),"ueventd")){returnueventd_main(argc,argv);}if(!strcmp(basename(argv[0]),"watchdogd")){returnwatchdogd_main(argc,argv);}//Cleartheumask.umask(0);//umask设置用户创建文件的默认属性;

3、默认情况下文件的属性是022,这里参数为0,意为该进程创建的文件的属性值将为0777add_environment("PATH",_PATH_DEFPATH);boolis_first_stage=(argc==1)

4、

5、(strcmp(argv[1],"--second-stage")!=0);//Getthebasicfilesystemsetupweneedputtogetherintheinitramdisk//on/andthenwe'llletthercfilefigureoutther

6、est.if(is_first_stage){//创建一些基本的目录,并将一些文件系统mount到对应的目录上.//tmpfs、devpts、proc和sysfs都是文件系统mount("tmpfs","/dev","tmpfs",MS_NOSUID,"mode=0755");mkdir("/dev/pts",0755);mkdir("/dev/socket",0755);mount("devpts","/dev/pts","devpts",0,NULL);mount("proc","/proc"

7、,"proc",0,NULL);mount("sysfs","/sys","sysfs",0,NULL);}//Wemusthavesomeplaceotherthan/tocreatethedevicenodesfor//kmsgandnull,otherwisewewon'tbeabletoremount/read-only//lateron.Nowthattmpfsismountedon/dev,wecanactuallytalk//totheoutsideworld.open_devnul

8、l_stdio();//把标准输入、标准输出、标准错误重定向到空设备文件"/dev/__null__"klog_init();//创建/dev/__kmsg__设备节点,让进程可以使用kernel的log系统来输出logklog_set_level(KLOG_NOTICE_LEVEL);//设置log等级NOTICE("init%sstarted!",is_first_stage?"":"secondstage");if(!is_first_stage){//Indicatethatbooti

9、ngisinprogresstobackgroundfwloaders,etc.//在/dev目录下创建.booting空文件,表示初始化正在进行;is_booting()函数会依靠这个文件判断进程是否正在初始化//进程初始化结束后,.booting文件将会被删除close(open("/dev/.booting",O_WRONLY

10、O_CREAT

11、O_CLOEXEC,0000));property_init();//初始化Android属性系统,Android中的属性系统在各个进程间都可以访问,

12、这里创建了一块共享区域来存储属性值//IfargumentsarepassedbothonthecommandlineandinDT,//propertiessetinDTalwayshavepriorityoverthecommand-lineones.process_kernel_dt();process_kernel_cmdline();//解析/proc/cmdline文件,获得kernel的启动参数,将结果保存到几个属性中//Propogatethekernelvaria

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

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

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