rc文件语法以及init进程解析init.rc过程分析

rc文件语法以及init进程解析init.rc过程分析


rc文件语法参考:https://blog.youkuaiyun.com/stoic163/article/details/88821832

​init进程在第二阶段解析init.rc执行具体代码路径:/system/core/init/init.cpp 代码如下:

	/**
	*05 解析init.rc等文件,建立rc文件的action 、service,启动其他进程
	*/
    ActionManager& am = ActionManager::GetInstance();
    ServiceList& sm = ServiceList::GetInstance();

    LoadBootScripts(am, sm);

    // Turning this on and letting the INFO logging be discarded adds 0.2s to
    // Nexus 9 boot time, so it's disabled by default.
    if (false) DumpState();

    // Make the GSI status available before scripts start running.
    // 当GSI脚本running时,确保GSI状态可用
    auto is_running = android::gsi::IsGsiRunning() ? "1" : "0";
    SetProperty(gsi::kGsiBootedProp, is_running);
    auto is_installed = android::gsi::IsGsiInstalled() ? "1" : "0";
    SetProperty(gsi::kGsiInstalledProp, is_installed);

    am.QueueBuiltinAction(SetupCgroupsAction, "SetupCgroups");
    am.QueueBuiltinAction(SetKptrRestrictAction, "SetKptrRestrict");
    am.QueueBuiltinAction(TestPerfEventSelinuxAction, "TestPerfEventSelinux");
	// 执行rc文件中触发器为 on early-init 的语句
    am.QueueEventTrigger("early-init");

    // Queue an action that waits for coldboot done so we know ueventd has set up all of /dev...
    // 等冷插拔设备初始化完成
	am.QueueBuiltinAction(wait_for_coldboot_done_action, "wait_for_coldboot_done");
    // ... so that we can start queuing up actions that require stuff from /dev.
    // 开始查询来自 /dev的 action
    am.QueueBuiltinAction(SetMmapRndBitsAction, "SetMmapRndBits");
	
    // 设备组合键的初始化操作
    Keychords keychords;
    am.QueueBuiltinAction(
            [&epoll, &keychords](const BuiltinArguments& args) -> Result<void> {
   
                for (const auto& svc : ServiceList::GetInstance()) {
   
                    keychords.Register(svc->keycodes());
                }
                keychords.Start(&epoll, HandleKeychord);
                return {
   };
            },
            "KeychordInit");

    // Trigger all the boot actions to get us started.
    //执行rc文件中触发器为 on init 的语句
    am.QueueEventTrigger("init");

    // Don't
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值