【OpenHarmony4.1 之 U-Boot 2024.07源码深度解析】019 - RK3568 Uboot 完整流程梳理
- 一、系统环境初始化: _start 入口地址,初始化CPU 环境
- 二、系统环境初始化: _main 入口,初始化堆栈,初始化gd全局环境变量,初始化 C Runtime 运行环境,开始执行 board_init_f 函数
- 三、board_init_f():Uboot 重定向前的工作,初始化 串口,初始化DRAM,初始化malloc
- 四、Relocate:循环拷贝 uboot 镜像到 gd->relocaddr 地址处
- 五、Relocate 拷贝后,调用 board_init_r() 进行后续的工作
- 六、board_init_r():初始化dm,初始化pci、以太网、mmc,解析环境变量,获得 HLOS 信息
- 七、run_main_loop中根据 bootcmd 环境变量启动 HLOS 系统
系列文章汇总:《【鸿蒙OH-v5.0源码分析之 Uboot+Kernel 部分】000 - 文章链接汇总》
本文链接:《【OpenHarmony4.1 之 U-Boot 2024.07源码深度解析】019 - RK3568 Uboot 完整流程梳理》
在分析完uboot 源码后,给我的感觉是,大而杂
uboot 开发者为了兼容所有的CPU,做了很多相应的兼容,
对于某些CPU 来说,很多函数都是不会跑的,大大的增大了开发者的开发的难度,尤其是对于新来玩家来说,会看得一脸蒙蔽,
感觉Uboot 会很复杂。
但实际,uboot 说白了,它的核心功能就是 引导加载 HLOS 系统启动.
如果按模块区分的话,大致分成如下几个模块:
- 系统环境初始化:初始化CPU、初始化堆栈,创建C语言运行环境
- 初始化 DRAM、串口,将 Uboot 完整镜像拷贝到 DRAM 上,这就是Uboot 上的 relocated 重定位
- 初始化 Flash、MMC、网络 等功能,用于获取 Kernel 镜像
- 对Kernel 镜像进行校验,确认镜像安全,然后加载 Kernel 镜像
有人就奇怪,
标签:初始化,2024.07,Uboot,init,源码,镜像,CPU From: https://blog.csdn.net/Ciellee/article/details/141292271