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

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

3天内不再提示

Android系统启动流程

麦辣鸡腿堡 来源:嵌入式Linux系统开发 作者:Jasonangel 2023-10-07 14:58 次阅读

Andorid 系统是在嵌入式行业中广泛应用的系统,手机、平板、机器人、汽车中控系统都有使用安卓系统的,在应用方面的优势是安卓系统自带 UI,使用Linux 需要自己用 QT 开发界面,并且界面没那么好看。

Linux 之上有一个 HAL 层,这一层出现的原因:Linux 是开源的,基于它的修改也必须开源,所以 Andorid 在这里加了一个 HAL层,这样硬件厂商可以不公布自己的代码。

Native 层由 C++ 语言实现,Framework 层和 app 层由 java 语言实现,也就是说,你想搞懂 Android系统需要精通三种语言:C、C++、java。

上一篇文章分析了Linux 系统的启动流程,Android 系统的启动流程和 Linux 相似,只是 init 进程起来后,做了不一样的事情。

Android 系统启动流程如下:

图片

1)Boot ROM 是固化在硬件中的一段代码,它一般是固定的,它的作用是检测基本的硬件是否存在,比如检测 EMMC 是否存在,存在的话,把bootloader 从EMMC 拷贝到 SRAM ,启动系统,后面交给 bootloader 。

2)Andorid 系统的启动引导程序 bootloader 不是 uboot,是 LK(little kernel),专门用来启动安卓系统。

3)bootloader 初始化完成后跳转到 Linux 内核的 start_kernel 函数,此函数最后产生了 kernel_init 和kthreadd,kernel_init 后面会从内核空间跳转到用户空间,变成用户空间的 init 进程,PID=1,而
kthreadd(PID=2)是内核进程,专门用来监听创建内核进程的请求,它维护了一个链表,如果有创建内核进程的需求,就会在链表上创建。

当然你可以看到图中还有一个swapper(PID=0)进程,它是系统中唯一一个不使用 fork 创建的进程,kernel_init 和kthreadd 就是由它创建的,swapper 也叫 idle 进程,空闲进程,它运行的时候就是系统处于空闲状态的时候。

4)当 kernel_init 转变为用户空间的 init 进程以后,会在 Andorid系统中创建一个最重要的进程:Zygote,此进程会创建安卓所需要的所有进程。

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

    关注

    4982

    文章

    18281

    浏览量

    288438
  • Android
    +关注

    关注

    12

    文章

    3851

    浏览量

    125639
  • Linux
    +关注

    关注

    87

    文章

    10990

    浏览量

    206734
  • 系统
    +关注

    关注

    1

    文章

    981

    浏览量

    21036
收藏 人收藏

    评论

    相关推荐

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

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

    IAR系统启动流程及修改方法

    默认情况下,直接进入调试状态后程序将停在main函数的开头位置,但其实在进入main函数之前,IAR已经进行了一个系统初始化的过程,本文将介绍在IAR环境中,系统启动流程中将执行哪些步骤,主要包含
    发表于 08-06 13:57

    请问怎样去设计嵌入式系统启动程序?

    如何去编写嵌入式系统启动程序?设计嵌入式系统启动程序的步骤流程有哪些?设计嵌入式系统启动程序有哪些技术难点?
    发表于 04-25 09:18

    关于Android系统启动的理解

    虽然第2章Android系统启动看得比较晕,但还是想把一些总结性的内容做个笔记,加深自己对Android系统启动的理解。1. init进程启动
    发表于 07-28 07:05

    Android系统启动流程总结

    Android系统是如何启动的?Android系统启动过程是怎样的?
    发表于 10-22 07:14

    详细分析嵌入式Linux系统启动流程

    在嵌入式Linux专题(一)中已经对嵌入式Linux系统的架构及启动流程有了初步的介绍,本文将详细分析嵌入式Linux系统启动流程
    发表于 11-05 09:25

    Linux文件系统启动流程

    与 Linux 命令的结合使用Linux 文件系统启动流程sysvinit服务的管理与裁剪systemd服务的管理与裁剪了解 qt4、qt5 的移植了解 yocto构建文件系统常规 Linux 应用
    发表于 12-17 06:00

    为什么RK3288系统启动时会卡在Android字样呢

    为什么RK3288系统启动时会卡在Android字样呢?有何解决办法?
    发表于 03-10 08:08

    系统启动过程

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

    Android系统启动所必须加载的文件bootimage免费下载

    本文档的主要内容详细介绍的是Android系统启动所必须加载的文件bootimage免费下载。
    发表于 03-21 08:00 1次下载

    UM2012_osxMotionXX系统启动

    UM2012_osxMotionXX系统启动
    发表于 11-22 19:24 0次下载
    UM2012_osxMotionXX<b class='flag-5'>系统启动</b>

    一张图了解嵌入式系统启动流程

    如下图所示是嵌入式系统启动流程图,图中红色的数字圆点表示启动的先后顺序。主要分为4个阶段,分别是第一阶段 bootloader,第二阶段uboot,第三阶段内核启动,第四阶段app
    发表于 03-07 09:44 553次阅读

    linux双系统启动项设置

    在使用双系统的时候,我们需要设置启动项来选择要启动的操作系统。在Linux系统中,设置双系统启动
    的头像 发表于 11-28 15:05 506次阅读

    Rockchip 系统启动流程

    Rockchip 系统启动流程,包括 Boot ROM、Mask ROM、U-Boot、Linux 内核等。 Boot ROM 阶段: 在 Rockchip 系统启动的第一阶段,处
    的头像 发表于 01-04 15:54 397次阅读

    Rockchip 3588 系统启动流程

    Rockchip 3588是一款高性能、低功耗的ARM处理器,广泛应用于智能电视、智能音箱和车载娱乐系统等领域。在本文中,我们将深入探讨Rockchip 3588的系统启动流程系统启动
    的头像 发表于 01-07 16:08 544次阅读