一、先看概念
bootROM:一种固化在芯片内部的只读存储器(ROM),用于启动和初始化系统。BootROM 中通常包含了一些预先编写好的代码,用于完成系统启动前的基本初始化和配置,例如初始化时钟、GPIO控制器、中断控制器、存储设备(SD卡、NAND Flash、SPicy Flash)等硬件资源,检测启动设备,从启动设备中加载引导程序等。
bootRAM:是一种位于芯片内部的随机存储器(SRAM),通常用于存储启动时需要运行的代码和数据。与 bootROM 不同的是,bootRAM 中的内容可以被修改和更新。
二、芯片上电后的启动流程
芯片上电后,首先会进入 bootROM 阶段。bootROM 是芯片内置的固件,负责初始化各种硬件设备,例如时钟、存储设备、串口、存储设备等,并从存储设备(如 SD 卡、NAND Flash、SPI Flash 等)中加载 U-Boot 引导程序(bootloader)到DDR中。
这段 bootloader 程序先初始化 DDR 等外设(因为bootROM 的初始化操作只是为了能够让 U-Boot 能够被正确加载并执行,并不能完全代替 U-Boot 对硬件资源的初始化和配置),然后将 Linux 内核从flash(或者 NAND,NOR FLASH,SD,MMC 等)拷贝到 DDR 中,最后启动 Linux 内核。
三、可能产生的疑问解答
既然 bootROM 都初始化好了 DDR,为什么直接把Linux kernel加载到DDR中运行呢?这样不就可以直接省略uboot了嘛?
不知道你是否会有这种疑问。
其实,直接使用bootROM将kerne加载到DDR中运行是可以的。但是:
内存配置简单粗暴。bootROM只会根据硬件默认配置来设置DDR参数,无法进行详细的内存配置,无法使用更复杂的内存模式,可能导致内存带宽或容量无法充分利用。
设备树简单。bootROM只会使用一个简单的内置设备树,无法根据实际的硬件情况提供详细的设备树,导致内核无法正确探测和初始化所有外设。
启动参数固定。bootROM无法传递启动参数给内核,内核启动后只能使用默认参数运行,无法根据不同需求设置不同的启动参数。文章来源:https://www.toymoban.com/news/detail-422407.html
升级困难。如果只使用bootROM启动,每次内核升级都需要烧写到bootROM中,无法像uboot那样通过sdcard等方式方便地升级内核。文章来源地址https://www.toymoban.com/news/detail-422407.html
到了这里,关于为什么需要uboot?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!