anriod系统init过程分析详解

anriod系统init过程分析详解

ID:27575649

大小:276.30 KB

页数:39页

时间:2018-12-03

anriod系统init过程分析详解_第1页
anriod系统init过程分析详解_第2页
anriod系统init过程分析详解_第3页
anriod系统init过程分析详解_第4页
anriod系统init过程分析详解_第5页
资源描述:

《anriod系统init过程分析详解》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、Anriod系统init过程分析详解本文使用的软件版本Android:4.2.2Linux内核:3.1.10本文及后续几篇文章将对Android的初始化(init)过程进行详细地、剥丝抽茧式地分析,并且在其中穿插了大量的知识,希望对读者了解Android的启动过程又所帮助。本章主要介绍了与硬件相关初始化文件名的确定以及属性服务的原理和实现。Android本质上就是一个基于Linux内核的操作系统。与UbuntuLinux、FedoraLinux类似。只是Android在应用层专门为移动设备添加了一些特有的支持。既然Android是Linux内核的系统,那么基本

2、的启动过程也应符合Linux的规则。如果研宄过其他Linux系统应该了解,一个完整的Linux系统首先会将一个Linux内核装载到内存,也就是编译Linux内核源代码生成的bzlmage文件,对于为Android优化的Linux内核源代码会生成zlmage文件。该文件就是Linux内核的二进制版本。由于zlmage在内核空间运行,而我们平常使用的软件都是在应用空间运行(关于内核空间和应用空间的详细描述,可以参考《Android深度探索(卷1):HAL与驱动开发》一书的内容,在后续的各卷中将会对Android的整体体系进行全方位的剖析)。内核空间和应用空间是不能

3、直接通过内存地址级别访问的,所以就需要建立某种通讯机制。目前Linux有很多通讯机制可以在用户空间和内核空间之间交互,例如设备驱动文件(位于/dev目录中)、内存文件(/proc、/sys目录等)。了解Linux的同学都应该知道Linux的重要特征之一就是一切都是以文件的形式存在的,例如,一个设备通常与一个或多个设备文件对应。这些与内核空间交互的文件都在用户空间,所以在Linux内核装载完,需要首先建立这些文件所在的目录。而完成这些工作的程序就是本文要介绍的initoInit是一个命令行程序。其主要工作之一就是建立这些与内核空间交互的文件所在的目录。当Linu

4、x内核加载完后,要做的第一件事就是调用init程序,也就是说,init是用户空间执行的第一个程序在分析init的核心代码之前,还需要初步了解init除了建立一些目录外,还做了如下的工作1.初始化属性2.处理配置文件的命令(主要是initre文件),包括处理各种Action。3.性能分析(使用bootchart工具)。4.无限循环执行command(启动其他的进程)。不过代码还是非常复杂的尽管init完成的工作不算很多,Init程序并不是由一个源代码文件组成的,而是由一组源代码文件的目标文件链接而成的这些文件位于如下的目录>/system/core/ini

5、t<Android源代码本目录其中init.c是init的主文件,现在打开该文件,看看其中的内容。由于init是命令行程序,所以分析init.c首先应从main函数开始,现在好到main函数,代码如下:intmain(intarge,char**argv)intfd_count=0;structpollfdufds[4];char*tmpdev;char*debuggable;chartmp[32];intproperty_set_fd_init=0intsignal_fd_init=0;intkeychord_fd_init=0;boolis_char

6、ger=false;if(!strcmp(basename(argv[O]),’ueventd"))returnueventd_main(argc,argv);(!strcmp(basename(argv[O]),"watchdogd"))returnwatchdogd_main(argc,argv)if/*cleartheumask*/umask(O);II下面的代码开始建立各种用户空间的目录,如/dev、/proc、/sys等mkdir("/dev",0755);mkdir(7proc",0755);mkdir("/sys",0755);mount("tm

7、pfs","/dev","tmpfs",MS—NOSUID,"mode=0755");mkdir("/dev/pts",0755);mkdir(*7clev/socket",0755);mountf’devpts","/dev/pts","devpts",0,NULL)mountf’proc","/proc","proc",0,NULL);/*mountf’sysfs","/sys","sysfs",0,NULL)/dev/.booting文件是否可读写和建7close(open("/dev/.booting",O_WRONLY

8、O_CREAT0000));o

9、pen_devnull_stdio()

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

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

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