android源码分析之Runtime的初始化

android源码分析之Runtime的初始化

ID:39464543

大小:538.00 KB

页数:13页

时间:2019-07-03

android源码分析之Runtime的初始化_第1页
android源码分析之Runtime的初始化_第2页
android源码分析之Runtime的初始化_第3页
android源码分析之Runtime的初始化_第4页
android源码分析之Runtime的初始化_第5页
资源描述:

《android源码分析之Runtime的初始化》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、android源码分析之Runtime的初始化Android运行时作为android架构的一部分,起着非常重要的作用,它和核心库(CoreLibraries)组成了Android运行时库层。本文将依据android源码对AndroidRuntime(android运行时)的建立过程进行分析。1、Android架构中的AndroidRuntimeandroid采用的是层次化系统架构,它的架构图如下:由架构图可知,AndroidRuntime处于Linux内核层以及应用框架层中间,而Java的运行环境依赖于Java虚拟机,所以AndroidRuntime对于andr

2、oid系统非常重要。Init进程是Linux环境下非常重要的一个进程,而Zygote进程是Java环境下的第一个进程,所有其他的Java环境下的进程都是由Zygote进程来进行fork的,而init进程在启动Zygote进程之后,初始化Zygote进程之前,会先进行AndroidRuntime的启动和环境建立,下文将对此过程进行详细分析。2、init进程分析init进程作为linux启动过程中的一个重要的进程,它主要负责文件系统的挂载,属性的初始化,各种配置的加载启动以及Action触发,Service的启动,而Zygote作为Java环境下的服务进程,也在In

3、it.rc中进行了配置,而init进程是由main函数进行触发的,其main函数如下://Init.cppintmain(intargc,char**argv){...//清除umask默认属性umask();add_environment("PATH",_PATH_DEFPATH);//判断是不是初始化的第一阶段boolis_first_stage=(arg==1)

4、

5、(strcmp(argv[1],"--second-stage")!=0);if(is_first_stage){//进行系统文件系统等的挂载mount("tmpfs","/dev","tmpf

6、s",MS_NOSUID,"mode=0755");mkdir("/dev/pts",0755);mkdir("/dev/socket",0755);mount("devpts","/dev/pts","devpts",0,NULL);mount("proc","/proc","proc",0,NULL);mount("sysfs","/sys","sysfs",0,NULL);}open_devull_stdio();//klog初始化klog_init();klog_set_level(KLOG_NOTICE_LEVEL);if(!is_first_stag

7、e){//关闭/dev/.booting文件的相关权限close("/dev/.booting",O_WRONLY

8、O_WCREAT

9、O_CLOEXEC,000);//初始化部分属性property_init();//先初始化DT,因为DT的属性集的优先级高于comandlineprocess_kernel_dt();//处理内核命令行process_kernel_cmdline;//导出内核变量export_kernel_boot_props();}...//初始化信号量signal_handler_init();property_load_boot_defa

10、ults();//开启属性服务start_property_service();//解析/init.rc文件init_parse_config_file(/init.rc);...}此处的代码与android4.4等,在代码上有略微的差别,但是基本的操作还是一样的,首先进行一些属性的初始化,内核命令行等以及信号量的初始化,最后再启动属性服务以及对init.rc文件进行解析,所以,接下来分析Init.rc文件://Init.rcimport/init.environ.rcimport/init.usb.rcimport/init.${ro.hardware}.rc

11、import/init.${ro.zygote}.rcimport/init.trace.rc...由代码可知,与android4.4等有明显的差别,此处采用导入.rc文件的方式来初始化相应模块,此处分析zygote模块,对于android6.0来说,它提供了多个zygote相关的.rc文件,有Init.zygote32.rc、Init.zygote32_64.rc、Init.zygote64.rc、Init.zygote64_32.rc等,本文分析Init.zygote32.rc,其他流程是一样的,但是在源码中,只发现了Init.zygote32.rc的相关实

12、现。看Init.zygo

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

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

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