合肥建设银行网站首页,简单网站建设运营,pageadmin做网站要钱吗,公司网站建设代码都写完了配套系列教学视频链接#xff1a;安卓系列教程之ROM系统开发-百问100ask说明系统#xff1a;Android10.0设备#xff1a; FireFly RK3399 #xff08;ROC-RK3399-PC-PLUS#xff09;前言本文简单描述一下android init祖先进程启动的基本执行流程#xff0c;让大家有一个整… 配套系列教学视频链接 安卓系列教程之ROM系统开发-百问100ask说明系统Android10.0设备 FireFly RK3399 ROC-RK3399-PC-PLUS前言本文简单描述一下android init祖先进程启动的基本执行流程让大家有一个整体认识由浅入深 后面再展开详细说明。整体逻辑主要分成三个部分1 第一阶段 执行在 ramdisk 中 主要创建必须的文件夹 挂载虚拟文件系统 挂载 system,vendor 分区。2 selinux 初始化 第一阶段的 selinux 初始化 完成策略二进制文件的加载 并设置默认 selinux 模式。3 第二阶段 重点完成属性初始化 启动 rc 脚本的解析和执行 建立 epoll 机制监控各种事项。、代码如下 system/core/init/main.cppint main(int argc, char** argv) {
#if __has_feature(address_sanitizer)__asan_set_error_report_callback(AsanReportCallback);
#endif//init和ueventd共享同一套代码 该进程负责和内核进行通信 监控所有设备的增加和删除修改//并创建设备设置对应的设备权限if (!strcmp(basename(argv[0]), ueventd)) {return ueventd_main(argc, argv);}if (argc 1) {// /system/bin/init subcontexif (!strcmp(argv[1], subcontext)) {android::base::InitLogging(argv, android::base::KernelLogger);const BuiltinFunctionMap function_map;//读取所有安全上下文文件内容 并用一个句柄来表示。// 当需要设置文件的安全上下文时 内核就可以通过这个句柄来配置context//并进入一个死循环-接受socket的命令并做响应return SubcontextMain(argc, argv, function_map);}///system/bin/init selinux_setup 第一阶段完成之后就直接跳到该阶段if (!strcmp(argv[1], selinux_setup)) {return SetupSelinux(argv);}/////system/bin/init second_stage selinux_setup结束之后就进入第二阶段if (!strcmp(argv[1], second_stage)) {return SecondStageMain(argc, argv);}}// 第一阶段代码return FirstStageMain(argc, argv);
}