uboot, dm-spl
时间: 2025-01-21 16:00:29 浏览: 58
### U-Boot 中 DM-SPL 的实现原理
在 U-Boot 中,`dm-spl` 配置用于指定设备模型 (Device Model, DM) 在 Secondary Program Loader (SPL) 和 U-Boot pre-relocation 阶段的应用[^1]。此配置项确保了 SPL 能够访问并初始化必要的硬件资源,在早期启动过程中提供支持。
#### 设备树节点定义
为了使能 `dm-spl` 功能,需要在设备树源文件 (.dts) 中适当位置添加如下属性:
```dts
chosen {
bootargs = "console=ttyS0,115200";
u-boot,dm-spl;
};
```
上述代码片段展示了如何通过设置 `u-boot,dm-spl` 属性来启用该功能。这使得平台能够在 SPL 阶段利用完整的设备管理框架进行驱动加载和资源配置。
#### 实现机制解析
当设置了 `u-boot,dm-spl` 之后,U-Boot 将会在 SPL 初始化期间调用特定函数以构建初始环境,并完成对关键外设的支持。具体来说:
- **初始化阶段**:读取存储介质中的镜像数据至内存;
- **设备枚举**:依据设备树描述自动探测连接在外围总线上的组件;
- **驱动绑定**:为已识别的硬件分配相应的驱动程序实例;
这些操作共同构成了一个稳健可靠的低级运行时环境,从而保障后续更高层次软件模块可以顺利接管控制权。
#### 关键代码示例
以下是部分涉及 `dm-spl` 处理逻辑的关键 C 语言代码摘录:
```c
// 文件路径: drivers/core/init.c
int dm_init(void)
{
#ifdef CONFIG_SPL_BUILD
/* 如果是在编译 SPL,则仅处理标记有 'spl' 或者 'tpl' 的节点 */
if (!IS_ENABLED(CONFIG_DM_TPL))
return dm_scan_fdt_spl(gd->fdt_blob);
#endif
}
```
这段代码表明,在 SPL 构建环境下 (`CONFIG_SPL_BUILD`) 并且未开启 TPL 支持的情况下,会专门扫描带有 `spl` 或 `tpl` 标记的 FDT (Flattened Device Tree) 节点来进行有限度的初始化工作。
阅读全文
相关推荐











