尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

Bootloader

Bootloader 目录Bootloader 的三大核心使命底层逻辑“交互式”和“直接加载”是什么嵌入式 Linux 跟 PC 不同PC 有 BIOS/EFI 固件但嵌入式没有 BIOS。芯片内部的固化 ROM只读存储器中只有一段极小的代码几十 KB它的唯一作用就是把外部的 BootloaderUboot加载到内存里运行。然后 Uboot 再去引导内核最终的启动链条是芯片固化ROM一级引导-BootloaderUboot二级引导-Linux Kernel-根文件系统Bootloader 的三大核心使命底层逻辑使命一极早期硬件初始化芯片刚上电时CPU 主频可能只有几十兆赫兹内存DDR RAM还没初始化根本没法运行巨大的 Linux 内核动辄几 MB。Bootloader 最先执行它负责配置 CPU 主频PLL、初始化内存控制器让板子上的 DDR 内存能用。初始化串口UART让你能看到打印信息。初始化存储设备NAND Flash、SD 卡、eMMC为读取内核做准备。关键点它把“毛坯房”变成“精装房”让内核进驻时可以直接使用内存和串口。使命二加载内核镜像Linux 内核原本是一堆压缩文件zImage/Image躺在 Flash 或 SD 卡里相当于“仓库”。CPU 无法直接在 Flash 上运行代码太慢且受限。Bootloader 必须读取存储设备中的内核镜像和设备树DTB文件。将其搬运拷贝到内存DDR的指定物理地址上。如果是压缩格式部分 Bootloader 还会解压它。使命三传递启动参数并跳转内核启动时需要知道一些关键信息比如“根文件系统在哪”是 mmcblk0p2 还是 NFS 网络挂载、“控制台是哪个串口”。Bootloader 会在内存中准备好这些参数ATAGS 或设备树然后跳转到内核所在的地址把 CPU 的 PC 指针指向内核入口。从此之后Bootloader 就“死掉了”系统完全归内核管。“交互式”和“直接加载”是什么这两个确实是 Bootloader特别是 Uboot的两个工作状态但它们不是核心使命而是为了方便开发调试提供的人机交互界面直接加载自动模式 /bootcmd这是“生产上线状态”。上电后Bootloader 倒计时几秒如果没人按键盘它就会自动执行预设的指令比如bootcmd自动完成上面的“使命二”和“使命三”直接启动 Linux。这是产品最终卖给用户时的状态通电即进系统。交互式命令行模式 / CLI这是“研发调试状态”。在倒计时期间按下任意键系统会停在 Shell 命令行类似一个小型操作系统。它的用途极其强大救砖如果把内核烧坏了系统起不来通过交互式命令行可以在线重烧比如用tftp网络下载新的内核到内存然后直接启动不用拆机。修改参数不用重新编译直接改启动参数setenv bootargs比如切换成网络文件系统NFS方便驱动调试。裸机测试直接在内存中跑一段裸机小程序比如go 0x80000000测试硬件好坏。
返回列表