网站大量收购独家精品文档,联系QQ:2885784924

Androidinit啟动过程分析.doc

  1. 1、本文档共20页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Androidinit啟动过程分析

Android init 启动过程分析 分析android的启动过程,从内核之上,我们首先应该从文件系统的init开始,因为 init 是内核进入文件系统后第一个运行的程序,通常我们可以在linux的命令行中指定内核第一个调用谁,如果没指定那么内核将会到/sbin/, /bin/ 等目录下查找默认的init,如果没有找到那么就报告出错。 下面是曾经用过的几种开发板的命令行参数: S3C2410 启动参数: noinitrd root=/dev/nfs??nfsroot=6:/nfsroot/rootfs?? ip=88:6:6:::eth0:on console=ttySAC0 S3C2440 启动参数: setenv bootargs console=ttySAC0 root=/dev/nfs nfsroot=6:/nfsroot/rootfs ip=75:6:01:::eth0:on mem=64M init=/init? ?? ?? ? marvell 310 启动参数: boot root=/dev/nfs nfsroot=6:/nfsroot/rootfs,rsize=1024,wsize=1024 ip=76:01:01:::eth0:-On? console=ttyS2,115200 mem=64M init=/init init的源代码在文件:./system/core/init/init.c 中,init会一步步完成下面的任务: 1.初始化log系统 2.解析/init.rc和/init.%hardware%.rc文件?? 3. 执行 early-init action in the two files parsed in step 2.?? 4. 设备初始化,例如:在 /dev 下面创建所有设备节点,下载 firmwares.?? 5. 初始化属性服务器,Actually the property system is working as a share memory. Logically it looks like a registry under Windows system.?? 6. 执行 init action in the two files parsed in step 2.?? 7. 开启 属性服务。 8. 执行 early-boot and boot actions in the two files parsed in step 2.?? 9. 执行 Execute property action in the two files parsed in step 2.?? 10. 进入一个无限循环 to wait for device/property set/child process exit events.例如, 如果SD卡被插入,init会收到一个设备插入事件,它会为这个设备创建节点。系统中比较重要的进程都是由init来fork的,所以如果他们他谁崩溃 了,那么init 将会收到一个 SIGCHLD 信号,把这个信号转化为子进程退出事件, 所以在loop中,init 会操作进程退出事件并且执行 *.rc 文件中定义的命令。 例如,在init.rc中,因为有: service zygote /system/bin/app_process -Xzygote /system/bin --zygote --start-system-server ? ? socket zygote stream 666 ? ? onrestart write /sys/android_power/request_state wake ? ? onrestart write /sys/power/state on 所以,如果zygote因为启动某些服务导致异常退出后,init将会重新去启动它。 int main(int argc, char **argv) { ? ? ... ? ? //需要在后面的程序中看打印信息的话,需要屏蔽open_devnull_stdio()函数 ? ? open_devnull_stdio(); ? ? ... ? ? //初始化log系统 ? ? log_init(); ? ? //解析/init.rc和/init.%hardware%.rc文件? ? ? parse_config_file(/init.rc); ? ? ... ? ? snprintf(tmp, sizeof(tmp), /init.%s.rc, hardware); ? ? parse_config_file(tmp); ? ? ... ? ? //执行 early-init action

您可能关注的文档

文档评论(0)

cv7c8hj6b4I + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档