Android init

Init

  init是一个进程,确切地说,它是Linux系统中用户空间的第一个进程。由于Android是基于Linux内核的,所以init也是Android系统中用户空间的第一个进程,它的进程号是1。作为天字第一号的进程,init被赋予了很多极其重要的工作职责,本章将关注其中两个比较重要的职责

init进程负责创建系统中的几个关键进程,尤其是下一章要介绍的Zygote,它更是Java世界的开创者。

 init -> zygote -> 应用进程

init.c
main(){
   //解析init.rc配置文件
   parse_config_file("/init.rc");
   
   //初始化和属性相关的资源

   property_init();

   ..........

 }
   
init.rc
  import /init.${ro.zygote}.rc   
  init.zygote64.rc
  
   service zygote /system/bin/app_process64 -Xzygote /system/bin --zygote --start-system-server
    class main
    socket zygote stream 660 root system
    onrestart write /sys/android_power/request_state wake
    onrestart write /sys/power/state on
    onrestart restart media
    onrestart restart netd
Android 系统中,初始化子上下文(init subcontext)在系统初始化进程里发挥着重要作用。 ### init 进程概述 Android init 进程是系统开机启动后执行的用户空间的第一个进程,从 Linux 内核启动,在整个系统生命周期内始终存在。它的主要职责是加载系统的配置,启动系统服务,初始化系统,并管理系统的状态,是其它进程的父进程 [^3]。 ### init subcontext 的作用与使用场景 在 Android 系统启动进程的管理方面,由于系统存在大量 Native 进程,若都通过 exec 在代码中一个个执行进程的启动,会是灾难性的设计。因此 Android 推出了 init.rc 机制,通过读取配置文件的方式启动不同进程。而 init subcontext 会参与到这些配置文件执行相关的操作中。 ### init subcontext 在命令执行中的体现 以 copy 命令为例,在执行该命令时会调用 Command::InvokeFunc。当指定了不为空的 subcontext 且 execute_in_subcontext_ 为 true 时,会直接调用 subcontext->Execute;若 execute_in_subcontext_ 为 false,则会先通过 subcontext->ExpandArgs 对 args 进行膨胀处理(主要是将 ${prop_name} 解析成对应的属性值),然后调用 RunBuiltinFunction。若未指定 subcontext 则直接调用 RunBuiltinFunction [^4]。 ```cpp /// @system/core/init/action.cpp Result<void> Command::InvokeFunc(Subcontext* subcontext) const { if (subcontext) { // 指定了subcontext if (execute_in_subcontext_) { // 如果指定在 subcontext 下执行 return subcontext->Execute(args_); } auto expanded_args = subcontext->ExpandArgs(args_); if (!expanded_args.ok()) { // 膨胀处理失败,则结束处理 return expanded_args.error(); } return RunBuiltinFunction(func_, *expanded_args, subcontext->context()); } return RunBuiltinFunction(func_, args_, kInitContext); } ``` ### 相关的 .rc 文件与 init subcontext Android Init Language 被用于以 .rc 为扩展名的纯文本文件,系统里有大量的 .rc 文件,其中 /system/etc/init/hw/init.rc 为基础 .rc 文件,在系统启动时由 init 执行加载,负责系统的初始化设置。Init 会去加载 /{system,system_ext,vendor,odm,product}/etc/init/ 文件夹下的 rc 文件,在这些文件的执行过程中,init subcontext 可能会参与到配置解析和命令执行等操作中 [^2]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值