0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

kernel到android核心启动过程

麦辣鸡腿堡 来源:TrustZone 作者:Hcoco 2023-12-04 16:59 次阅读

总结一个图:kernel 到android核心启动过程

图片kernel镜像执行跳转到start_kernel开始执行,在rest_init会创建两个kernel 进程(线程),其分别是为kernel_init 与kthreadd,创建完后系统通过init_idle_bootup_task蜕化为idle进程(cpu_idle)。

图片调用kernel_thread()创建1号内核线程, 该线程随后转向用户空间, 演变为init进程

调用kernel_thread()创建kthreadd内核线程。

  • init_idle_bootup_task():当前0号进程init_task最终会退化成idle进程,所以这里调用init_idle_bootup_task()函数,让init_task进程隶属到idle调度类中。即选择idle的调度相关函数。
  • 调用cpu_idle(),0号线程进入idle函数的循环,在该循环中会周期性地检查
  • kernel_init 中会执行/init(ramdisk_execute_command的值为"/init")

图片
在这里插入图片描述

/init 启动后执行/system/core/init/main.cpp 中main 方法,这里执行FirstStageMain()

图片

(看看这到了哪里?这到了咱们的的AVB那个地方啊)

FirstStageMain()中通过execv 执行/system/bin/init,参数为selinux_setup。这里init 跟/init 一样,因此再次执行init 镜像。

这里如果是重启到bootloader,会执行InstallRebootSignalHandlers

图片SetupSelinux 中再次执行init,这里会注册信号处理函数

从而参数second_stage,执行SecondStageMain ,在这里解析.rc ,启动ueventd,并等待其启动完成。

图片init 镜像通过execv会执行两次,分别通过FirstStageMain和SecondStageMain执行。

图片图片Zygote是Android系统创建新进程的核心进程

  • 负责启动Dalvik虚拟机,
  • 加载一些必要的系统资源和系统类,
  • 启动system_server进程,
  • 随后进入等待处理app应用请求。

到这里我们就暂时停下,别走远了。

芯片上电到Android

总结一下整个流程

  • 第一步:手机开机后,引导芯片启动,引导芯片开始从固化在ROM里的预设代码执行,加载引导程序到到RAM,bootloader检查RAM,初始化硬件参数等功能;
  • 第二步:硬件等参数初始化完成后,进入到Kernel层,Kernel层主要加载一些硬件设备驱动,初始化进程管理等操作。在Kernel中首先启动swapper进程(pid=0),用于初始化进程管理、内管管理、加载Driver等操作,再启动kthread进程(pid=2),这些linux系统的内核进程,kthread是所有内核进程的鼻祖;
  • 第三步:Kernel层加载完毕后,硬件设备驱动与HAL层进行交互。初始化进程管理等操作会启动INIT进程 ,这些在Native层中;
  • 第四步:init进程(pid=1,init进程是所有进程的鼻祖,第一个启动)启动后,会启动adbd,logd等用户守护进程,并且会启动servicemanager(binder服务管家)等重要服务,同时孵化出zygote进程,这里属于C++ Framework,代码为C++程序;
  • 第五步:zygote进程是由init进程解析init.rc文件后fork生成,它会加载虚拟机,启动System Server(zygote孵化的第一个进程);System Server负责启动和管理整个Java Framework,包含ActivityManager,WindowManager,PackageManager,PowerManager等服务;
  • 第六步:zygote同时会启动相关的APP进程,它启动的第一个APP进程为Launcher,然后启动Email,SMS等进程,所有的APP进程都由zygote fork生成。

那么到这里我们就把整个系统的启动串联起来了从bootrom-bootloader-kernel。

当然真实的系统为了安全,比如说 基于TrustZone框架的启动流程 ,那肯定不止这些步骤,但是大体上也是穿插在这个流程之中的增删改。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Android
    +关注

    关注

    12

    文章

    3853

    浏览量

    125668
  • 内核
    +关注

    关注

    3

    文章

    1309

    浏览量

    39862
  • Linux
    +关注

    关注

    87

    文章

    10994

    浏览量

    206772
  • Kernel
    +关注

    关注

    0

    文章

    48

    浏览量

    11036
收藏 人收藏

    评论

    相关推荐

    STM32H7的启动过程分析

    本章教程主要跟大家讲STM32H7的启动过程,这里的启动过程是指从CPU上电复位执行第1条指令开始(汇编文件)到进入C程序main()函数入口之间的部分。
    的头像 发表于 10-17 14:42 1668次阅读

    详解STM32启动过程

    本章教程主要跟大家讲STM32H7的启动过程,这里的启动过程是指从CPU上电复位执行第1条指令开始(汇编文件)到进入C程序main()函数入口之间的部分。
    发表于 11-14 11:24 1635次阅读

    专家揭秘:STM32启动过程全解

    电子发烧友网核心提示: 本文主要阐述了STM32启动过程全面解析,包括启动过程的介绍、启动代码的陈列以及深入解析。 相对于ARM上一代的主流ARM7/ARM9内核架构,新一代Corte
    发表于 09-10 08:50 5.3w次阅读
    专家揭秘:STM32<b class='flag-5'>启动过程</b>全解

    Linux内核启动过程和Bootloader(总述)

    3.Linux启动过程 在Bootloader将 Linux 内核映像拷贝 RAM 以后,可以通过下例代码启动 Linux 内核: call_linux(0
    发表于 08-18 17:35

    android--系统启动--init进程启动过程如何

    android--系统启动--init进程启动过程
    发表于 05-29 10:35

    STM32H7启动过程详解

    第13章 STM32H7启动过程详解本章教程主要跟大家讲STM32H7的启动过程,这里的启动过程是指从CPU上电复位执行第1条指令开始(汇编文件)进入C程序main()函数入口之间的
    发表于 08-03 06:41

    请问6ul核心启动过程,有需要什么必须的外设吗?

    6ul核心启动过程,有需要什么必须的外设吗
    发表于 01-10 06:39

    系统启动过程

    系统启动过程系统启动过程主要由一下几步组成(以硬盘启动为例):1. 开机2. BIOS 加电自检 ( Power On Self Test -- POST ),内存地址为 0ffff:00003. 将硬盘第一个
    发表于 10-11 12:17 2124次阅读

    IC启动过程及Vcc电压波形的认知

    IC启动过程及Vcc电压波形的认知IC启动过程及Vcc电压波形的认知IC启动过程及Vcc电压波形的认知IC启动过程及Vcc电压波形的认知
    发表于 12-22 14:46 10次下载

    国产300MW机组中压缸启动的特点及启动过程

    机组采用合理启动方式对减小启动过程中的寿命损耗、缩短机组启动时间尤为重要。介绍了国产300 MW机组中压缸启动的特点及启动过程,并提出了中压
    发表于 10-14 10:40 18次下载
    国产300MW机组中压缸<b class='flag-5'>启动</b>的特点及<b class='flag-5'>启动过程</b>

    STM32上电后启动过程

    STM32上电后启动过程
    发表于 11-15 18:21 16次下载
    STM32上电后<b class='flag-5'>启动过程</b>

    stm32启动过程

    一次性搞定stm32启动模式与启动过程一、stm32启动模式二、从flash启动过程2.1 数据在堆栈中存储方式2.2 stm32的正常启动过程
    发表于 12-16 16:57 8次下载
    stm32<b class='flag-5'>启动过程</b>

    linux内核启动过程会执行用户空间的init进程

    linux内核启动过程的后期,在kernel_init()函数代表的init线程中,会尝试执行用户空间的init进程
    的头像 发表于 10-14 09:12 763次阅读

    RL78启动过程详解

    RL78启动过程详解
    的头像 发表于 09-28 16:39 871次阅读
    RL78<b class='flag-5'>启动过程</b>详解

    stm32启动过程详解

    STM32启动过程详解 近年来,STM32微控制器在嵌入式系统中的应用越来越广泛。STM32微控制器具有高性能、低功耗、易扩展和丰富的外设接口等优势。而要让STM32微控制器正常工作,首先要
    的头像 发表于 12-08 15:47 728次阅读