生成客制化的 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 address 和 Entry 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 应用为例,演示生成、烧录和启动镜像的详细流程。
-
参考下面的 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 区域,并且设置了加载地址和入口地址。
-
执行下列命令在当前目录生成 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 .