Android init进程解析

作者: NoOneDev | 来源:发表于2016-12-20 20:09 被阅读127次

    作为天字第一号进程,如果想学习深入解析Android源码觉得还是有必要了解一下init的,虽然我看的懵懵懂懂。

    天字一号就是PID=1的进程,可以通过PS命令查看。
    工作:

    • 创建文件,并挂载设备,Linux系统初始化类似
    • 解析init.rc配置文件
    • 通过读取/proc/cpuinfo/得到机器Hardware名,然后解析init.Hardware.rc文件
    • 执行动作,按时间分为四种:early-init,init,early-boot,boot;事件顺序由配置文件决定
    • 创建利用Uevent与Linux内核交互的socket
    • 初始化属性相关资源
    解析配置文件

    调用parse_config()方法解析
    查找配置文件的section,然后针对不同的section使用不同的解析函数来解析。

    section定义在keywords.h中,当symbol为on或service的时候表示section
    zygote 也是一个service section

    解析service
    parse_service() //该函数只是搭建了一个service的架子
    parse_line_service() //填充内容
    
    zygote解析
    init控制Service

    ** 启动zygote 服务**
    init.rc中有这样一句话

    #class_start 是一个COMMAND,对应的函数为do_class_start
    class_start default
    

    当init执行到

    //将boot section 节的command加入到执行队列
    action_for_each_trigger("boot",action_add_queue_tail);
    //执行队列里的命令,class是一个COMMAND,多以它对应的是do_class_start会被执行
    

    重启zygote

    drain_action_queue(); //poll函数返回后,会进入下一轮的循环
    restart_processes(); //这里会重启flag标志为SVC_RESTARTING的service.
    
    属性服务

    相当于windows下的注册表,系统重启或应用程序重启,可以根据注册表中属性,进行相应的初始化组工作。
    查看属性

    $ adb shell
    $ getprop

    property_init(); //属性初始化
    property_set_fd = start_property_service(); //属性设置
    

    当然init还有很多功能,比如说

    • 设置开机界面
    • 初始化/dev/keychord设备
      等等

    参考书籍:
    《深入解析Android 卷I》

    相关文章

      网友评论

        本文标题:Android init进程解析

        本文链接:https://www.haomeiwen.com/subject/sgyxvttx.html