新唐MCU技术
直播中

李玉兰

8年用户 1562经验值
私信 关注
[问答]

如何利用 DDR 参数文件生成 Linux 映像?

如何利用 DDR 参数文件生成 Linux 映像

回帖(1)

王辉

2025-9-8 17:47:49

要利用 DDR 参数文件生成 Linux 映像,需通过以下步骤将 DDR 配置集成到 U-Boot(或类似 Bootloader)中,最终形成完整的启动映像。此过程主要依赖 U-Boot 构建系统,以下是详细流程:




关键步骤概览




  1. 获取 DDR 参数文件

    厂商(如 Rockchip、NXP)通常提供配置文件(如 lpddr4_timing.c.bin 二进制或 .cfg 文本),或由 DDR 初始化工具生成。




  2. 将参数文件放入 U-Boot 源码  



    • 放置文件到正确路径(例如 U-Boot 的板级目录):  
      board/vendor/board_name/ddr_param.bin   # 二进制格式
      arch/arm/mach-soc/ddr_init.c             # C 源码格式

    • 配置文件须符合芯片要求(如 Rockchip 平台需 dram_init_banksize()dram_init() 函数)。




  3. 修改 U-Boot 的 Makefile/Kconfig  



    • Makefile:在板级目录的 Makefile 中添加编译依赖:
      obj-$(CONFIG_TARGET_BOARD_NAME) += ddr_param.o

    • 链接脚本:确保参数文件被链接进最终映像(部分平台自动完成)。




  4. 配置 U-Boot 编译选项

    在板级头文件(如 include/configs/board_name.h)中启用 DDR 初始化:


    #define CONFIG_SPL_BOARD_INIT    // 启用板级初始化(含 DDR)
    #define CONFIG_CUSTOM_DDR_PARAM  // 启用自定义参数



  5. 编译 U-Boot  


    make _defconfig    # 应用板级配置
    make CROSS_COMPILE=aarch64-linux-gnu-  # 编译生成包含 DDR 参数的映像


    • 输出文件:

      • u-boot-spl.bin:含 DDR 参数的 Bootloader 第一阶段

      • u-boot.itb:完整 U-Boot 映像(用于启动 Linux)





  6. 生成最终 Linux 启动映像

    组合 U-Boot、Linux 内核与设备树:


    cat u-boot-spl.bin u-boot.itb > boot.img  # 简单拼接
    # 或使用厂商工具(如 Rockchip 的 rkdeveloptool)
    tools/mkimage -f fit-image.its linux.img  # 生成 FIT 映像





具体示例(以 Rockchip RK3399 为例)



  1. 参数文件rk3399_ddr_800MHz_v1.24.bin(Rockchip 提供)

  2. 集成到 U-Boot

    • 文件放置:board/rockchip/evb_rk3399/ddr_param.bin

    • 修改 board/rockchip/evb_rk3399/Makefile
      obj-y += ddr_param.o

    • 在初始化代码中加载参数:
      void sdram_init() {
      const struct dram_params *dram = rk3399_get_ddr_param();
      rk3399_ddr_init(dram);  // 调用 DDR 初始化函数
      }


  3. 编译与生成
    make evb_rk3399_defconfig
    make CROSS_COMPILE=aarch64-linux-gnu- -j4
    cp spl/u-boot-spl.bin /output/




不同平台的常见方式
































SoC 厂商 DDR 参数格式 集成方式
Rockchip .bin 二进制文件 通过链接脚本嵌入到 U-Boot SPL
NXP i.MX ddrphy_fw.bin 作为单独固件加载(需 DCD 初始化脚本)
TI K3 .cfg 配置脚本 被 SPL 源码包含(自动生成寄存器配置)
Allwinner dram_para.h 头文件 通过宏定义初始化寄存器



注意事项



  1. 参数文件匹配:确保 DDR 参数与硬件设计(频率、位宽、Rank 数量)严格匹配。

  2. 调试工具:  

    • 使用 J-Link/OpenOCD 调试 DDR 初始化流程。

    • U-Boot 命令 md(内存查看)验证 DDR 读写。


  3. 升级方式

    若需更新参数,重新编译 U-Boot 或通过厂商烧录工具更新 SPI Flash。

  4. 安全启动:在 Secure Boot 中需对包含 DDR 参数的映像签名。


通过以上步骤,DDR 参数将被编译进 Bootloader 映像,在 Linux 启动前初始化内存控制器,确保系统正常运行。

举报

更多回帖

发帖
×
20
完善资料,
赚取积分