当前位置: 首页 > news >正文

Android系统10 RK3399 init进程启动(四十七) Android init 进程整体代码逻辑简述

配套系列教学视频链接:

安卓系列教程之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.cpp

int 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);
}
http://www.lryc.cn/news/23752.html

相关文章:

  • CSDN 编程竞赛三十二期题解
  • Kubernetes 中的 Pod Hook
  • Linux操作系统安装MySQL(rpm安装)
  • MySQL高级第二讲
  • 凸优化专题1
  • 【蓝桥杯每日一题】递推算法
  • Unity性能优化: 性能优化之内存篇
  • 华为OD机试题,用 Java 解【内存资源分配】问题
  • 微服务之Nacos注册与配置
  • Android 动画详解
  • Linux -- 程序 进程 线程 概念引入
  • Android ART dex2oat
  • 「RISC-V Arch」RISC-V 规范结构
  • 【C】线程控制
  • Maven工程打jar包的N种方式
  • 一文了解GPU并行计算CUDA
  • 全网资料最全Java数据结构与算法(1)
  • 【项目实战】SpringMVC拦截器HandlerInterceptor入门介绍
  • 阿里淘宝新势力造型合伙人P8、年薪百万的欧阳娜娜也躲不过的魔鬼面试,看的我心服口服
  • 深度学习笔记:不同的反向传播迭代方法
  • ElasticSearch 学习笔记总结(三)
  • 深入理解border以及应用
  • 如何复现论文?什么是论文复现?
  • 22.2.28打卡 Codeforces Round #851 (Div. 2) A~C
  • Learining C++ No.12【vector】
  • 【数电基础】——逻辑代数运算
  • 【Redis】什么是缓存与数据库双写不一致?怎么解决?
  • 互联网衰退期,测试工程师35岁之路怎么走...
  • 动态规划(以背包问题为例)
  • Java异常