Android系统启动流程(一)解析init进程

Android系统启动流程(一)解析init进程

ID:39464577

大小:91.00 KB

页数:12页

时间:2019-07-03

Android系统启动流程(一)解析init进程_第1页
Android系统启动流程(一)解析init进程_第2页
Android系统启动流程(一)解析init进程_第3页
Android系统启动流程(一)解析init进程_第4页
Android系统启动流程(一)解析init进程_第5页
资源描述:

《Android系统启动流程(一)解析init进程》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、Android系统启动流程(一)解析init进程前言作为“Android框架层”这个大系列中的第一个系列,我们首先要了解的是Android系统启动流程,在这个流程中会涉及到很多重要的知识点,这个系列我们就来一一讲解它们,这一篇我们就来学习init进程。1.init简介init进程是Android系统中用户空间的第一个进程,作为第一个进程,它被赋予了很多极其重要的工作职责,比如创建zygote(孵化器)和属性服务等。init进程是由多个源文件共同组成的,这些文件位于源码目录system/core/init。本文将基于Android7.0源码来分析I

2、nit进程。2.引入init进程说到init进程,首先要提到Android系统启动流程的前几步:1.启动电源以及系统启动当电源按下时引导芯片代码开始从预定义的地方(固化在ROM)开始执行。加载引导程序Bootloader到RAM,然后执行。2.引导程序Bootloader引导程序是在Android操作系统开始运行前的一个小程序,它的主要作用是把系统OS拉起来并运行。3.Linux内核启动内核启动时,设置缓存、被保护存储器、计划列表,加载驱动。当内核完成系统设置,它首先在系统文件中寻找”init”文件,然后启动root进程或者系统的第一个进程。4.

3、init进程启动讲到第四步就发现我们这一节要讲的init进程了。关于Android系统启动流程的所有步骤会在本系列的最后一篇做讲解。3.init入口函数init的入口函数为main,代码如下所示。system/core/init/init.cppintmain(intargc,char**argv){if(!strcmp(basename(argv[0]),"ueventd")){returnueventd_main(argc,argv);}if(!strcmp(basename(argv[0]),"watchdogd")){returnwatc

4、hdogd_main(argc,argv);}umask(0);add_environment("PATH",_PATH_DEFPATH);boolis_first_stage=(argc==1)

5、

6、(strcmp(argv[1],"--second-stage")!=0);//创建文件并挂载if(is_first_stage){mount("tmpfs","/dev","tmpfs",MS_NOSUID,"mode=0755");mkdir("/dev/pts",0755);mkdir("/dev/socket",0755);mount("de

7、vpts","/dev/pts","devpts",0,NULL);#defineMAKE_STR(x)__STRING(x)mount("proc","/proc","proc",0,"hidepid=2,gid="MAKE_STR(AID_READPROC));mount("sysfs","/sys","sysfs",0,NULL);}open_devnull_stdio();klog_init();klog_set_level(KLOG_NOTICE_LEVEL);NOTICE("init%sstarted!",is_first_sta

8、ge?"firststage":"secondstage");if(!is_first_stage){//Indicatethatbootingisinprogresstobackgroundfwloaders,etc.close(open("/dev/.booting",O_WRONLY

9、O_CREAT

10、O_CLOEXEC,0000));//初始化属性相关资源property_init();//1process_kernel_dt();process_kernel_cmdline();export_kernel_boot_props();}..

11、.//启动属性服务start_property_service();//2constBuiltinFunctionMapfunction_map;Action::set_function_map(&function_map);Parser&parser=Parser::GetInstance();parser.AddSectionParser("service",std::make_unique());parser.AddSectionParser("on",std::make_unique

12、>());parser.AddSectionParser("import",std::make_unique

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

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

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