IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Bootrom -> bootloader -> kernel -> init >android -> 正文阅读

[移动开发]Bootrom -> bootloader -> kernel -> init >android

Bootrom -> bootloader -> kernel -> init -> Android
PBL ->xbl/abl ->kernel_init
PBL(Primary Boot Loader)→ XBL(eXtensible Boot Loader/Secondary bootloader) → ABL(Application bootloader)→ Kernel→ Android

PBL -> UEFI -> kernel


Android系统是基于Linux kernel内核的。(交叉编译?
当用户长按电源键后,会引导芯片加载BootLoader到内存中,并开始拉起Linux kernel内核。待Linux kernel启动完成后便会启动第一个用户空间的进程——init进程。启动init进程时,会进入system/core/init/main.cpp文件执行main方法。
Android启动流程跟 Linux启动类似,大致分为如下五个阶段。

  • 1.开机上电,加载固化的ROM。
  • 2.加载BootLoader,拉起Android OS。
  • 3.加载Uboot,初始外设,引导Kernel启动等。
  • 4.启动Kernel,加载驱动,硬件。
  • 5.启动Android,挂载分区,加载驱动、服务,init进程等。

1. Bootrom

Bootrom(或Boot ROM)是嵌入处理器芯片(SOC)内的一小块掩模ROM或写保护闪存。它包含处理器在上电或复位时执行的第一个代码。根据某些带式引脚或内部保险丝的配置,它可以决定从哪里加载要执行的代码的下一部分以及如何或是否验证其正确性或有效性。有时它可能包含其他功能,可能在引导期间或之后由用户代码使用。

Bootrom 也即是PBL阶段。PBL 启动时,CPU只开启了第一个核心 CPU Core 0,运行固件在ROM中,这部分是高通写死在芯片中的固件,外部开发人员是无法修改这部份的。(网上没怎么找到这部分相关资料)

2. bootloader

经常用的fastboot刷机就是在进入了bootloader后执行的,fastboot可以理解为一个微程序,
adb reboot bootloader
bootloader属于xbl/abl阶段,高通的UEFI分成XBL和ABL,XBL是平台相关的(主要是一些驱动程序,提供通用接口);ABL是平台不相关的通用程序(通常是fastboot和bootloader),ABL调用XBL实现的通用接口,这里的bootloader可以是linuxloader,LK(lightkernel)(这个LK一般是MTK的),uboot等;XBL由高通实现,一般不开源,ABL一般是用户关心的,是主要改动部分。

我们所说的各种分区,也是在bootloader启动后才开始加载各个分区。

  • XBL代码在vendor/qcom/non-hlos-xxxx
    BOOT.MXF.x.x
    xbl应该是属于BP的一部分,xbl的编译依赖BP的编译,也就是下载fusion工具编译,

执行non-hlos-xxxx目录下的$(your_product)_build_boot.sh
脚本与文件夹名对应,boot对应BOOT.MXF.xxx
xbl是boot.sh,其它还有adsp、cdsp、aop、modem等sh脚本。
(高通的自家还有SBL,但是一般不会操作这部分,也不开源

分区表是nonhlos.sh

  • ABL代码在edk2中(根目录下bootable/bootloader/edk2
    XBL core (UEFI or LK,ABL)
    XBL core,就是之前的bootloader,主要功能就是初始化display驱动,提供fastboot功能,引导进入HLOS kernel操作系统。
    在ABL中,同样也只有CPU Core0在工作,其他的CPU核以是在进入HLOS Kernel后才开始初始化启用的。

ABL 的编译非常简单, 依次执行命令:
source build/envsetup.sh
lunch device
make aboot

刷写
fastboot flash abl abl.elf

不同的厂商对 UEFI 有不同的实现,比较常用的开源实现是 EDK2 https://github.com/tianocore/edk2 ;EDK2 是一个遵循 UEFI 标准和 PI 标准的跨平台固件开发环境,EDK2 支持多种操作系统,也支持跨平台编译。
确切来讲,高通所使用的 edk2 即为 uefi在ABL 部分的代码。

3. Kernel

  • 一般刷机橙屏了crash了,就代表kernel坏了,这代表我们已经进入启动kernel阶段了,可以使用fastboot或者edl刷机;
  • 如果是fastboot进不去,说明bootloader没有启动,xbl/abl有问题,只能使用edl线刷机。
  • edl线如果也解决不了,只能换机器了。

总结:
pbl -> xbl/abl -> kernel_init -> first_stage -> zygote
Bootrom -> bootloader -> kernel -> init -> android

参考:https://blog.csdn.net/Ternence_zq/article/details/120062676

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-12-25 11:21:31  更:2022-12-25 11:22:57 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/20 0:34:44-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码