FirstStageMain

因为启动时并没有带任何参数,所在最先执行的是FirstStageMain,FirstStageMain函数实现在:system/core/init/first_stage_init.cpp。

int FirstStageMain(int argc, char** argv) {

   if (!DoFirstStageMount(!created_devices)) {
       LOG(FATAL) << "Failed to mount required partitions early ...";
   }

   const char* path = "/system/bin/init";
   const char* args[] = {path, "selinux_setup", nullptr};
   auto fd = open("/dev/kmsg", O_WRONLY | O_CLOEXEC);
   dup2(fd, STDOUT_FILENO);
   dup2(fd, STDERR_FILENO);
   close(fd);
   execv(path, const_cast(args));

   // execv() only returns if an error happened, in which case we
   // panic and never fall through this conditional.
   PLOG(FATAL) << "execv(\"" << path << "\") failed";

}

这个函数的主要功能是创建目录、挂载分区等,然后再次运行init, 并带了selinux_setup参数,进入到SetupSelinux函数。



本站内容来源于作者发布和网络转载,如有版权相关问题请及时与我们取得联系,我们将立即删除。

 关于作者
 热门教程
系统启动流程
1、BootRom 启动电源以及系统启动。 当电源按下时,引导芯片代码从预定义的地方(固化在ROM中)开始执行。加载引
2023-09-10
剑道仙尊
54
Android源码开始
Framework源码下载: https://android.googlesource.com/platform/fr
2023-09-10
剑道仙尊
55
Launcher的Activity.onCreate
进入 ActivityThread.main,最终完成 Launcher.onCreate 操作 Zygote for
2022-09-11
剑道仙尊
41
Launcher启动流程
Launcher介绍 系统启动的最后一步是启动一个应用程序来显示系统中已经安装的应用程序,这个应用程序就叫做 Laun
2022-09-11
剑道仙尊
43
创建Launcher进程
Zygote进程接收请求并创建 Launcher进程 想要启动一个应用程序,首先要保证这个应用程序所需要的应用程序进程
2022-09-11
剑道仙尊
45
Launcher的配置
Launcher 的配置 在 SystemServer.startOtherServices 方法中调用Activit
2022-09-11
剑道仙尊
45
PackageManagerService
PackageManagerService( PMS ) 1、PMS会把每个apk进行扫描,然后分别把每个apk里的信
2022-09-11
剑道仙尊
42
WindowManagerService
待更新。。。
2022-09-11
剑道仙尊
27
ActivityManagerService
ActivityManagerService(AMS)主要负责系统中四大组件的启动、切换、调度以及应用程序的管理和调度
2022-09-11
剑道仙尊
51
systemserver进程
system server进程是由zygote进程fork出来的,在上面的ZygoteInit.main方法中调用fo
2022-09-10
剑道仙尊
33