android init 过程,android init进程解析init.rc过程

开发板:samsung-exynos4412,android4.0.4

调试android设备驱动时经常需要修改init.rc和init.hardware.rc文件,init.rc经常修改,然而里面定义的trigger事件执行,谁先谁后一直没有特别在意,跟踪代码之后做个小结

文件路径:/system/core/init/*.*,里面有个readme.txt文件详细说明了Android init language的成员结构和使用方法。

提一句:Android init language不支持linux命令modprobe,只支持insmod

大致内容:

1. Init支持四种类型状态字:Actions,Commands,Services和Options。基本形式如下:

on

service []*

2. 所有Commands和Options专属于最近出现的Actions和Service

3. Actions和Services名字必须唯一,当重复时以先出现有效

具体有哪些Actions请参考readme文档!

该文档最后还有段注释:默认情况下init进程调用的service会把stdout和stderr重定向到/dev/null

可以通过logwrapper参数将log通过logcat输出,例如:

service akmd /system/bin/logwrapper /sbin/akmd

然后我们再看init.c文件,看看他解析rc文件的过程:

1. 首先为系统创建了/dev /proc /sys等根目录文件节点

2. 然后解析init.rc文件,将其中Actions和Services保存在一个单项循环链表中

3. import /proc/cmdline(这个文件没具体看什么时候生成的)到kernel_nv中,uboot启动方式charger还是power button就在import_kernel_nv函数中判断处理

4. 继续解析init.hardware.rc文件,将其中Actions和Services添加到单项循环链表队尾

5. 触发"early_init"事件

6. 等待/dev/.coldboot_done设备节点生成

7. load debault property : /default.prop

8. 其他初始化如keychord :/dev/keychord; console:/dev/tty0;import_kernel_nv的处理

9. 触发"init"事件

10. 触发"early-fs"事件

11. 触发"fs"事件

12. 触发"post-fs"事件

13. 触发"post-fs-data"事件

14. load /system/build.prop /system/default.prop /data/local/prop文件

15. 触发"early-boot"事件

16 触发"boot"事件

readme.txt中说on boot是init starts之后第一个触发的事件(init.conf加载之后),我理解是文件系统初始化之后的第一个事件。

有一个问题:Services何时启动,它和Actions有何顺序关系!

注意到rc文件中每一个service声明的时候紧跟着一行写得是:class xxxx 例如:

service buletoothd /system/bin/bluetoothd -d -n

class main

..............

这个class可选值有:main,core,late_start,charger,这些参数被传递给command class_start

而command class_start在on boot触发时执行,代码在/root/init.rc中

on boot

class_start core

class_start main

根据前面的Actions触发顺序我们得知,Service是在最后才启动的,晚于on fs和on boot!

虽然class_start main位于init.rc中on boot之后,但是init.hardware.rc中on boot后面的command仍然在service start之前被执行

至于readme里面还有个on device-add-这个触发条件比较特殊,我理解是on boot之后添加的devices才能被检测到

实际测试在on boot里面insmod一个模块,在里面注册一个devices设备检测不到,这个以后再分析原因了!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值