U-Boot 系统基础入门

第三章:U-Boot 的核心功能

U-Boot 的核心功能概述

U-Boot (Universal Bootloader) 是一个开源的引导加载程序,广泛应用于嵌入式系统中。作为系统启动的第一阶段,U-Boot 承担着初始化硬件、加载操作系统内核等重要职责。本章将深入探讨 U-Boot 的三大核心功能。

U-Boot 启动流程示意图

ROM → U-Boot → 内核 → 根文件系统

1. 硬件初始化

U-Boot 的首要任务是初始化目标硬件平台,为后续操作提供稳定的运行环境。

1.1 CPU 初始化

核心任务:

  • 设置处理器模式和状态
  • 初始化缓存和MMU
  • 配置时钟和电源管理
  • 设置异常向量表
                

// ARM 处理器初始化示例

void cpu_init(void) {

// 禁用中断

disable_interrupts();

// 设置异常向量表

set_exception_vector();

// 初始化缓存

icache_enable();

dcache_enable();

}

1.2 内存初始化

核心任务:

  • 检测和配置RAM控制器
  • 设置内存时序参数
  • 初始化DDR内存
  • 建立内存映射

注意: 内存初始化是系统启动的关键步骤,错误的配置可能导致系统无法正常运行或性能下降。

1.3 外设初始化

常见外设初始化:

  • 串口(UART) - 用于调试输出
  • 存储设备(NAND/NOR Flash, eMMC, SD卡)
  • 网络接口(以太网, WiFi)
  • GPIO和中断控制器
  • 定时器和看门狗

2. 镜像加载

U-Boot 负责从存储设备加载操作系统内核和其他必要组件到内存中。

2.1 内核(Kernel)加载

加载流程:

  1. 从存储设备(Flash, SD卡等)读取内核镜像
  2. 验证镜像完整性(可选)
  3. 将镜像解压或拷贝到内存指定位置
  4. 准备启动参数
                

# 加载内核到内存的命令示例

=> load mmc 0:1 0x82000000 zImage

=> bootz 0x82000000

2.2 设备树(DTB)加载

设备树的作用:

  • 描述硬件平台配置
  • 提供设备驱动绑定信息
  • 实现硬件抽象,提高内核可移植性
                

# 加载设备树的命令示例

=> load mmc 0:1 0x83000000 dtb

=> setenv fdt_addr 0x83000000

2.3 Ramdisk 加载

Ramdisk 的作用:

  • 提供临时根文件系统
  • 包含必要的工具和驱动
  • 用于系统初始化或恢复
                

# 完整启动命令示例

=> load mmc 0:1 0x82000000 zImage

=> load mmc 0:1 0x83000000 dtb

=> load mmc 0:1 0x84000000 initrd

=> bootz 0x82000000 0x84000000 0x83000000

3. 交互式命令行与环境变量

U-Boot 提供了强大的交互式命令行界面,方便开发人员进行调试和配置。

3.1 交互式命令行

主要功能:

  • 硬件测试和诊断
  • 存储设备操作
  • 网络功能
  • 镜像加载和启动
  • 环境变量管理
                

# 常用命令示例

=> help # 查看帮助

=> printenv # 打印环境变量

=> mmc info # 查看MMC信息

=> ping 192.168.1.1 # 网络测试

3.2 环境变量

环境变量的作用:

  • 存储启动参数和配置
  • 控制U-Boot行为
  • 定义自动启动脚本
  • 保存用户自定义设置
                

# 环境变量操作示例

=> setenv bootargs console=ttyS0,115200 root=/dev/mmcblk0p2

=> setenv bootcmd 'load mmc 0:1 0x82000000 zImage; bootz 0x82000000'

=> saveenv # 保存环境变量到持久存储

提示: 环境变量存储在非易失性存储器中(如Flash),修改后需要使用saveenv命令保存才能永久生效。