第三章:U-Boot 的核心功能
U-Boot (Universal Bootloader) 是一个开源的引导加载程序,广泛应用于嵌入式系统中。作为系统启动的第一阶段,U-Boot 承担着初始化硬件、加载操作系统内核等重要职责。本章将深入探讨 U-Boot 的三大核心功能。
U-Boot 启动流程示意图
ROM → U-Boot → 内核 → 根文件系统
U-Boot 的首要任务是初始化目标硬件平台,为后续操作提供稳定的运行环境。
核心任务:
// ARM 处理器初始化示例
void cpu_init(void) {
// 禁用中断
disable_interrupts();
// 设置异常向量表
set_exception_vector();
// 初始化缓存
icache_enable();
dcache_enable();
}
核心任务:
注意: 内存初始化是系统启动的关键步骤,错误的配置可能导致系统无法正常运行或性能下降。
常见外设初始化:
U-Boot 负责从存储设备加载操作系统内核和其他必要组件到内存中。
加载流程:
# 加载内核到内存的命令示例
=> load mmc 0:1 0x82000000 zImage
=> bootz 0x82000000
设备树的作用:
# 加载设备树的命令示例
=> load mmc 0:1 0x83000000 dtb
=> setenv fdt_addr 0x83000000
Ramdisk 的作用:
# 完整启动命令示例
=> load mmc 0:1 0x82000000 zImage
=> load mmc 0:1 0x83000000 dtb
=> load mmc 0:1 0x84000000 initrd
=> bootz 0x82000000 0x84000000 0x83000000
U-Boot 提供了强大的交互式命令行界面,方便开发人员进行调试和配置。
主要功能:
# 常用命令示例
=> help # 查看帮助
=> printenv # 打印环境变量
=> mmc info # 查看MMC信息
=> ping 192.168.1.1 # 网络测试
环境变量的作用:
# 环境变量操作示例
=> setenv bootargs console=ttyS0,115200 root=/dev/mmcblk0p2
=> setenv bootcmd 'load mmc 0:1 0x82000000 zImage; bootz 0x82000000'
=> saveenv # 保存环境变量到持久存储
提示: 环境变量存储在非易失性存储器中(如Flash),修改后需要使用saveenv命令保存才能永久生效。