(八)简单修改设备树


简单了解启动流程

大致流程:

1. 上电与复位
2. 第一阶段引导加载程序 (BOOT0/SPL)
3. 第二阶段引导加载程序 (U-Boot)
4. Linux 内核启动
5. 用户空间初始化
6. 系统就绪

1. 上电与复位

当电源接通时,CPU 处于复位状态,执行位于 ROM 或者专用启动区域中的初始引导代码。

2. 第一阶段引导加载程序 (BOOT0/SPL)

  • 描述: BOOT0或者SPL通常存储在内部 Flash 或外部 SPI Flash 中的小型引导加载程序。
  • 主要用于
    • 加载第二阶段引导加载程序(U-Boot)到 RAM 并跳转执行
    • 初始化必要的外设(如 UART 用于调试输出)。
    • 配置 SDRAM 控制器并初始化内存。

3. 第二阶段引导加载程序 (U-Boot)

U-Boot

  • 描述:功能更强大的引导加载程序,负责进一步初始化硬件并准备操作系统内核的加载。
  • 主要用于
    • 初始化硬件:配置所有关键硬件组件,如 I2C、SPI、USB、网络接口等。

    • 设置时钟频率:调整 CPU 和其他总线的速度以达到最佳性能。

    • 初始化显示子系统:如果支持图形界面,则初始化显示器和相关驱动。

    • 初始化 DRAM:确保外部内存可以正常工作,并可能进行简单的测试。

    • 加载环境变量:从非易失性存储器中读取 U-Boot 的环境变量,这些变量控制着后续的操作,例如要加载的内核镜像位置。

    • 加载内核和 DTB:从存储介质(如 SD 卡、eMMC、NAND Flash)中读取 Linux 内核和 DTB 文件到内存

    • 传递控制权给内核:将控制权交给 Linux 内核,并提供必要的准备启动参数(如启动地址,)、(如 root= 指定根文件系统的路径)、内核镜像在内存中的地址、Device Tree Blob (DTB) 的地址等

简单来说,U-Boot 负责从 eMMC 等存储介质搬各种东西(如内核、DTB 等)到 DDR(动态随机存取存储器) 中,(也就是从存储内存搬到运行内存中),并且告诉内核这些东西搬过去放到DDR的哪个地址。此外,U-Boot 还承担了初始化关键的硬件和准备启动参数(从哪个地址开始启动内核镜像,从哪地址解析DTB,以及指定的跟文件系统的路径)的重要任务,以确保内核能够在正确环境中启动,交代完这些,就将控制权交给了内核。

一句话概括:就是初始化关键硬件,将eMMC内存里的部分东西搬到DDR里面,并交代搬过去的东西所放的地址,以及后面需要的各种启动参数(),解析DTB地址参数,等各种参数,交代完毕了,再将控制权给内核。


小细节

这里注意,理解内核镜像加载地址、内核启动地址、入口点地址之间的区别:

最好了解一下(有点多且绕):

1. 内核镜像加载地址
  • 定义:这是 U-Boot 将内核镜像从存储介质(如 eMMC、SD 卡等)读取并加载到 DDR 中的地址。
  • 作用:U-Boot
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小爪.exe

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值