Edit online

生成客制化的 Boot ROM 启动程序

4 Dec 2024
Read time: 2 minute(s)

芯片在上电启动时,首先运行芯片内部的 Boot ROM 程序,Boot ROM 程序加载并运行下一级程序。

Boot ROM 加载的程序需要按照一定的格式打包才会被运行。具体的打包格式可参考用户手册的启动章节。制作客制化 BROM 启动程序时,需要做好相关的连接地址、内存空间分配等规划:
注:
关于启动镜像格式,可查看用户相关章节。
  • 配置启动镜像格式中的以下关键字段:

    • Loader binary data: 客制化程序存放的区域。

    • Load address: 启动镜像的加载地址。

    • Entry point: 客制化程序的程序入口地址,对应程序的链接地址。

  • 做好内存空间使用规划:
    • D13x SRAM 的开始地址为 0x30040000

    • SRAM 的最开始 16K Byte,Boot ROM 运行时在使用,因此启动镜像不能被加载到该区间。

    • 启动镜像头信息占用 256 字节,因此 Load addressEntry point之间至少预留 256 字节。

      启动镜像加载的内存地址,应该是 0x30044000 之后:

使用 Luban-Lite 中的 mk_image.exe 或 mk_image.py 工具,可以单独生成启动镜像。相关工具可从 Luban-Lite 的最新 SDK 获取。
  • tools/scripts/mk_image.exe

  • tools/scripts/mk_image.py

以下以 app.bin 应用为例,演示生成、烧录和启动镜像的详细流程。
  1. 参考下面的 image_cfg.json 文件配置,进行打包并生成 app.aic 镜像:

    {
         "pre-process": { // Pre-proccess to generate image components from raw data
            "aicimage": { // Create aic boot image
                 "app.aic": {
                    "loader": {
                        "file": "app.bin",
                        "load address": "0x30044000",
                        "entry point":  "0x30044100", // 256 byte aic header
                    },
                },
            },
        },
    }
    

    此处 image_cfg.json 描述了将 app.bin 打包生成 app.aic ,放到 loader 区域,并且设置了加载地址和入口地址。

  2. 执行下列命令在当前目录生成 app.aic 文件,此文件为芯片 Boot ROM 可加载的镜像文件:
    mk_image.py -p -c <path_to_image_cfg_dir>/image_cfg.json -d <path_to_app_dir>
    
    如果将 mk_image.py image_cfg.json app.bin 都放在一个目录,则命令为:
    mk_image.py -p -c image_cfg.json -d .