Alex Blog

H15 SBC DDR 配置与启动机制解析

之前我在一个 H15 的 SBC 开发板上遇到一块 8GB DDR,在 SCU-BL 阶段出现了如下报错:

最后的解决办法如下:

屏蔽掉 u-boot 代码中 arch/arm/dts/hailo15-sbc.dts 中的设置: ddr_config { dram_auto_detect_en = <1>; }; 同时在同一个文件中,引入对应正确的 8GB DDR 配置: hailo15_ddr_MT53E2G32D4DE-046_regconfig_8GB.dtsi 这样就可以正常运行并使用 8GB DDR。

H15 启动机制研究

经过这件事情,我研究了 H15 的启动机制。H15 的启动流程大致如下:

阶段 运行处理器 核心任务
BootROM SCU (M4) 从 Flash 加载 SCU-BL。
SCU-BL SCU (M4) 读取配置,选择并加载 SCU-FW,管理启动重试。
SCU-FW SCU (M4) DDR 训练与初始化;管理电源/复位;加载 SPL 并唤醒 AP。
U-Boot SPL AP (A53) 从存储介质加载完整的主引导镜像束 (u-boot-tfa.itb)。
TF-A AP (A53) 安全环境初始化,跳转至 EL1 环境。
主 U-Boot AP (A53) 运行引导脚本,加载并启动 Linux 内核包 (fitImage)。
Linux 内核 AP (A53) 驱动硬件,挂载文件系统,启动用户空间应用。

获取未加密的 Device Tree 文件

在 SCU-BL 阶段,H15 会读取我们烧写到 Flash 中的 Device Tree:u-boot.dtb.signed。该文件是加密的,如果想获取对应的未加密 Device Tree 文件,可以按照如下方法操作:

进入 Yocto 编译目录:
build/tmp/work/hailo15_sbc-poky-linux/u-boot/1_2022.01-r0/u-boot-2022.01

你可以看到以下文件:
u-boot.dtb, u-boot-dtb.bin, u-boot-dtb.img, u-boot.dtb.signed

其中 u-boot.dtb 是原始 Device Tree Blob。 运行命令: file u-boot.dtb 输出会显示 "Device Tree Blob",其中 Blob 表示原始数据。

获取纯净的 Device Tree 文件示例:

hexdump -C u-boot.dtb | head
# 查看 offset 起始位置,H15 的起始位置为 0x00, 如果不为0x00可以用如下命令进行截取并利用dtc反解析
dd if=u-boot.dtb of=extracted.dtb bs=1 skip=123456
dtc -I dtb -O dts extracted.dtb > extracted.dts

这样就可以获得可读的 dts 文件,从中可以查看非常详细的 DDR 配置。

同理,也可以在 build/tmp/work/hailo15_sbc-poky-linux/linux-yocto-hailo/5.15.32-r0/deploy-linux-yocto-hailo 获取到 Kernel 对应的 Device Tree。

总结

简单来说,现代 Camera SoC 的 BSP(Board Support Package)定制中,DTS 的修改和管理确实是核心工作之一。能够获得最终版本的可读 DTS 文件,可以极大地方便确认 BSP 定制是否正常。

 


已发布

分类

来自

标签:

评论

《“H15 SBC DDR 配置与启动机制解析”》 有 1 条评论

  1. alex 的头像

    如果新增了DDR的话,还需要在文件 arch/arm/dts/hailo15_ddr_patch_include.dtsi 中增加_patch.dtsi 文件名
    请务必请检查最终编译出来的dts文件是否包含修改的部分。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注