1. U-Boot设备树属性深度解析
在嵌入式系统开发中,U-Boot作为最常用的Bootloader之一,其设备树(Device Tree)中的特殊属性对于系统启动流程控制至关重要。其中u-boot,dm-spl和u-boot,dm-pre-reloc这两个属性直接影响设备在不同启动阶段的初始化行为,理解它们的机制对嵌入式开发者来说是一项基本功。
1.1 启动阶段内存限制的本质
嵌入式系统启动过程中面临的核心矛盾是:功能需求与资源限制的对抗。在启动初期,系统只能依赖芯片内置的SRAM运行,而典型SRAM容量往往只有64KB-256KB。这个阶段如果加载所有设备驱动,会导致:
- 内存溢出:驱动代码体积超过SRAM容量
- 启动延迟:不必要的初始化延长启动时间
- 资源浪费:提前占用硬件资源可能影响关键设备初始化
以Rockchip RK3399为例,其SRAM配置为:
- 192KB通用SRAM
- 其中SPL阶段可用约160KB
- U-Boot proper阶段在DDR初始化前也只能使用这部分SRAM
1.2 属性作用机制对比
| 属性 | 作用阶段 | 内存环境 | 典型设备 | 驱动加载条件 |
|---|---|---|---|---|
u-boot,dm-spl |
SPL阶段 | 仅SRAM | 存储、串口、时钟 | 必须显式声明 |
u-boot,dm-pre-reloc |
pre-relocation阶段 | SRAM | DDR控制器、基础外设 | 声明或CONFIG_NEEDS_MANUAL_RELOC |
| 无特殊属性 | post-relocation阶段 | DDR已初 |
