您现在的位置: 爱51代码网 >> 范文 >> 文章正文
Android init进程启动过程分析

Android init进程启动过程分析
本文分析Android中init进程的执行过程,只是分析init进程启动的流水,具体细节在今后的各个专题中再分别详细分析。本文虽是后面各个专题的基础,读者初看可能理解不深,可以在阅读后面各个专题的时候,结合本文的整体流程会有更清晰的理解。

 

Init进程从 /system/core/init/init.c里的main()函数开始毕业论文 

 

1.      mkdir && mount

 

2.      import_kernel_cmdline

    从内核中通过/proc/cmdline导入下列命令行参数,这些参数会分别被设置到各个属性值中:


[plain] view plaincopyprint?
01.androidboot.console      // 设置console 
02.androidboot.mode         // 设置属性ro.factorytest 
03.androidboot.serialno     // 设置属性ro.serialno 
04.androidboot.baseband     // 设置属性ro.baseband 
05.androidboot.carrier      // 设置属性ro.carrier 
06.androidboot.bootloader   // 设置属性ro.bootloader 
07.androidboot.hardware     // 设置属性ro.hardware 
08.androidboot.bsp          // 根据这个设置与否,选择不同的init.rc版本 
      androidboot.console      // 设置console
      androidboot.mode         // 设置属性ro.factorytest
      androidboot.serialno     // 设置属性ro.serialno
      androidboot.baseband     // 设置属性ro.baseband
      androidboot.carrier      // 设置属性ro.carrier
      androidboot.bootloader   // 设置属性ro.bootloader
      androidboot.hardware     // 设置属性ro.hardware
      androidboot.bsp          // 根据这个设置与否,选择不同的init.rc版本注意:以上说的设置属性还未真正设置,property机制还未工作。
 

3.      init_parse_config_file()

    解析init.rc或者init_bsp.rc(看步骤2导入的参数“androidboot.bsp”是否设置)

    Init.rc的解析,参见《Android中init.rc文件的解析》

 

4.      get_hardware_name()

    从/proc/cpuinfo中获取“Hardware”字段信息写入<hw>;“Reversion” 字段信息写入<reversion>

 

5.      init_parse_config_file()

    解析init.<hw>.rc或者init_bsp.<hw>.rc(看步骤2导入的参数“androidboot.bsp”是否设置)

    Init.rc的解析,参见《Android中init.rc文件的解析》

 

6.      action_for_each_trigger("early-init",action_add_queue_tail);

    对init???.rc中解析出的early-initsection里action,执行action_add_queue_tail操作,也就是把act->qlist加入到action_queue的列尾

注:此时并未真正执行,只是挂在队列尾。

 

7.      把一些初始化操作加入到action_queue列表中


[cpp] view plaincopyprint?
01.queue_builtin_action(wait_for_coldboot_done_action,"wait_for_coldboot_done"); 
02.queue_builtin_action(property_init_action,"property_init"); 
03.queue_builtin_action(keychord_init_action,"keychord_init"); 
04.queue_builtin_action(console_init_action,"console_init"); 
05.queue_builtin_action(set_init_properties_action,"set_init_properties"); 
    queue_builtin_action(wait_for_coldboot_done_action,"wait_for_coldboot_done");
    queue_builtin_action(property_init_action,"property_init");
    queue_builtin_action(keychord_init_action,"keychord_init");
    queue_builtin_action(console_init_action,"console_init");
    queue_builtin_action(set_init_properties_action,"set_init_properties");queue_builtin_action(int (*func)(int nargs,char **args), char *name)是以name形成action,挂在action_list上;以func和name组成command,挂在action的commands上。然后加入到action_queue的队尾。
 

8.      对其他section内的action,加入到action_queue列表中

    另外一些初始操作也加入到action_queue列表中


[cpp] view plaincopyprint?
01.    /* execute all the boot actions to getus started */ 
02.action_for_each_trigger("init",action_add_queue_tail); 
03.action_for_each_trigger("early-fs", action_add_queue_tail); 
04.action_for_each_trigger("fs",action_add_queue_tail); 
05.action_for_each_trigger("post-fs",action_add_queue_tail); 
06. 
07.queue_builtin_action(property_service_init_action,"property_service_init"); 
08.queue_builtin_action(signal_init_action,"signal_init"); 
09.queue_builtin_action(check_startup_action,"check_startup"); 
10. 
11./* execute all the boot actions to get usstarted */ 
12.action_for_each_trigger("early-boot", action_add_queue_tail); 
13.action_for_each_trigger("boot",action_add_queue_tail); 
14. 
15.    /* run all property triggers based oncurrent state of the properties */ 
16.queue_builtin_action(queue_property_triggers_action,"queue_propety_triggers"); 
        /* execute all the boot actions to getus started */
    action_for_each_trigger("init",action_add_queue_tail);
    action_for_each_trigger("early-fs", action_add_queue_tail);
    action_for_each_trigger("fs",action_add_queue_tail);
    action_for_each_trigger("post-fs",action_add_queue_tail);

[1] [2] 下一页

  • 上一篇文章:

  • 下一篇文章: 没有了
  • 最新文章 热点文章 相关文章
    mysql主从同步延迟方案解决的学习
    青岛科学六年级下册教材分析
    生日旅行总结
    中小板生日快乐随感
    送生日快乐桑葚乳酪小蛋糕
    写给女儿的生日快乐
    总分公司财务核算
    恢复使用繁体字可行性研究报告
    青少年吸烟心理探析
    保险受益人制度相关问题的探讨
    mysql主从同步延迟方案解决的学习
    生日旅行总结
    中小板生日快乐随感
    送生日快乐桑葚乳酪小蛋糕
    写给女儿的生日快乐
    总分公司财务核算
    恢复使用繁体字可行性研究报告
    保险受益人制度相关问题的探讨
    初中生地理读图能力培养的研究
    搞笑生日祝福
    应用内购买 In-App Purchase
    Android之Activity的taskAff
    Redis系列-key相关主要操作函
    Redis存储篇sorted set主要操
    把oracle rac 转化为单机数据
    sqlplus spool 到动态日志文
    ios开发之UIButton 点击两张
    android蓝牙串口连接代码
    Preview of Qt 5 for Androi
    VS2010 cocos2d-x 工程配置 
     



    设为首页 | 加入收藏 | 网站地图 | 友情链接 |