****************************************************************************

Android 4.4 init进程分析文章链接

  Android 4.4 Init进程分析一 :Android init进程概述

  Android 4.4 Init进程分析二 :Android初始化语言

  Android 4.4 Init进程分析三:init.rc脚本文件的解析

  Android 4.4 Init进程分析四 :init.rc脚本文件的执行

  Android 4.4 Init进程分析五 :进程的终止与再启动

  Android 4.4 Init进程分析六 :属性服务

***************************************************************************

 

1 前言

上一篇文章中,我们简单分析了 init 进程是如何去解析init.rc文件的,最终解析得到两个链表:

  1. 动作列表:action_list
  2. 服务列表:service_list

那么得到这两个列表后,init进程又是怎么去执行这些动作及服务的呢?这篇文章中我们继续分析。

2 action动作的执行

在init进程的main函数中,调用init_parse_config_file("/init.rc")函数后得到action_list,接下来就是分析这些action怎样执行。

2.1 init进程main()函数的后续处理

我们先看看main()函数的代码片段:

http://androidxref.com/4.4_r1/xref/system/core/init/init.c#1038

 1 int main(int argc, char **argv)
 2 {
 3     ...
 4     INFO("reading config file\n");
 5     init_parse_config_file("/init.rc"); //解析init.rc文件,得到action_list and serice_list
 6 
 7     action_for_each_trigger("early-init", action_add_queue_tail); // 把和trigger name相匹配的action放入action_queue
 8 
 9     queue_builtin_action(wait_for_coldboot_done_action, "wait_for_coldboot_done"); // 内建action处理
10     queue_builtin_action(mix_hwrng_into_linux_rng_action, "mix_hwrng_into_linux_rng"); // 内建action处理
11     queue_builtin_action(keychord_init_action, "keychord_init"); // 内建action处理
12     queue_builtin_action(console_init_action, "console_init"); // 内建action处理
13 
14     /* execute all the boot actions to get us started */
15     action_for_each_trigger("init", action_add_queue_tail);
16 
17     /* skip mounting filesystems in charger mode */
18     if (!is_charger) {
19         action_for_each_trigger("early-fs", action_add_queue_tail);
20         action_for_each_trigger("fs", action_add_queue_tail);
21         action_for_each_trigger("post-fs", action_add_queue_tail);
22         action_for_each_trigger("post-fs-data", action_add_queue_tail);
23     }
24 
25     /* Repeat mix_hwrng_into_linux_rng in case /dev/hw_random or /dev/random
26      * wasn't ready immediately after wait_for_coldboot_done
27      */
28     queue_builtin_action(mix_hwrng_into_linux_rng_action, "mix_hwrng_into_linux_rng"); // 内建action处理
29 
30     queue_builtin_action(property_service_init_action, "property_service_init"); // 内建action处理
31     queue_builtin_action(signal_init_action, "signal_init"); // 内建action处理
32     queue_builtin_action(check_startup_action, "check_startup"); // 内建action处理
33 
34     if (is_charger) {
35         action_for_each_trigger("charger", action_add_queue_tail);
36     } else {
37         action_for_each_trigger("early-boot", action_add_queue_tail);
38         action_for_each_trigger("boot", action_add_queue_tail);
39     }
40 
41         /* run all property triggers based on current state of the properties */
42     queue_builtin_action(queue_property_triggers_action, "queue_property_triggers"); // 内建action处理
43 
44 
45 #if BOOTCHART
46     queue_builtin_action(bootchart_init_action, "bootchart_init"); // 内建action处理
47 #endif
48 
49     ...
50 }
View Code

相关文章:

  • 2021-08-26
  • 2021-07-04
  • 2022-02-08
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-02-28
猜你喜欢
  • 2021-07-20
  • 2022-01-09
  • 2022-12-23
  • 2021-07-28
  • 2021-10-01
  • 2022-02-28
  • 2022-12-23
相关资源
相似解决方案