sdk-hwV1.3/lichee/xr806/appos/project/image_cfg/readme.md

269 lines
14 KiB
Markdown
Raw Normal View History

2024-05-07 10:09:20 +00:00
# XRADIO MKimage & CFG File User Guide
> MKimage打包工具是XRadio芯片将编译生成的各个bin文件打包成一个image的工具在各个系统平台均有对应版本的工具。
> MKimage的使用需要搭配一个对应的CFG文件该文件使用Json语法标记了需要生成的image以及各个bin文件的信息。
> 本工程中提供以下常用工程配置和系统初始化流程的演示:
---
## CFG文件
> CFG文件包含整个image的组织结构配置文件使用Json标记语言对bin文件的头部信息进行配置。
### 文件字段
> 如下是一个完整的cfg文件示例。
```
{
"magic" :"AWIH",
"version" :"0.5",
"extern":{"chk_ota_area":"false","add_ota_area":"false","verify":"CRC32"},
"image" :{"max_size": "1020K", "bin_num":6},
"OTA" :{"addr": "1024K", "size": "32K"},
"count" :6,
"section" :[
{"id": "0xa5ff5a00", "bin": "boot_40M.bin", "cert": "null", "flash_offs": "0K", "max_len": "32K", "sram_offs": "0x00268000", "ep": "0x00268101", "attr": "0x1"},
{"id": "0xa5fe5a01", "bin": "app.bin", "cert": "null", "flash_offs": "32K", "max_len": "48K", "sram_offs": "0x00201000", "ep": "0x00201101", "attr": "0x1","priv":[{"0":"0x1402000"}, {"2":"0x1430000"}]},
{"id": "0xa5fd5a02", "bin": "app_xip.bin", "cert": "null", "flash_offs": "80K", "max_len": "800K", "sram_offs": "0xffffffff", "ep": "0xffffffff", "attr": "0x2"},
{"id": "0xa5fa5a05", "bin": "wlan_bl.bin", "cert": "null", "flash_offs": "970K", "max_len": "10K", "sram_offs": "0xffffffff", "ep": "0xffffffff", "attr": "0x1"},
{"id": "0xa5f95a06", "bin": "wlan_fw.bin", "cert": "null", "flash_offs": "980K", "max_len": "36K", "sram_offs": "0xffffffff", "ep": "0xffffffff", "attr": "0x1"},
{"id": "0xa5f85a07", "bin": "sys_sdd_40M.bin", "cert": "null", "flash_offs": "1016K", "max_len": "4K", "sram_offs": "0xffffffff", "ep": "0xffffffff", "attr": "0x1"},
{}
],
"raw_bin" :[
{"bin" :"boot.bin", "flash_offs": "901K"},
{"bin" :"sys_sdd.bin", "flash_offs": "1500K"},
{}
]
}
```
各字段含义如下,**加粗字段**为必选字段:
  **magic** - 固件魔数,表头标识,固定为 AWIH
  **version** - 版本号
  extern - 额外参数,非必选项,具体参数如下
   chk_ota_area : 默认为true设置为false时检查bin文件重叠时不会与OTA区域对比适用于将某些bin放在flash最后的情况
   add_ota_area : 默认为false设置为true时打包时候会添加OTA区域适用于客户使用flash烧写器直接烧写生成的image的情况
   verify : 在image的最后添加校验数据none/CRC32/MD5/SHA1/SHA256)在OTA升级时会校验默认为none
  **image** - image的大小参数
   **max_size** : image的最大值image1和image2区域的最大值
   xz_max_size : ota压缩模式下compressed image的最大值非ota压缩模式下禁止使用该字段。
   bin_num : 实际进行打包的bin文件个数不能大于count值
  **OTA** - ota参数存储地址和大小需要4K对齐
   **addr** : OTA区域的起始地址必须以4K对齐
   **size** : OTA区域的长度必须以4K对齐
  count - 打包文件列表中文件的数目,可以忽略不写
  **section** - 文件列表
  **id** - bin文件的id
   boot_id : 0xa5ff5a00
   app_id : 0xa5fe5a01
   app_xip_id : 0xa5fd5a02
   wlan_bl_id : 0xa5fa5a05
   wlan_fw_id : 0xa5f95a06
   sys_sdd_id : 0xa5f85a07
   app_psram_id : 0xa5f65a09
  **bin** - bin文件名字
  **cert** - 该段bin文件对应的证书文件null表示没有添加证书
  flash_offs - 该段bin文件存放在 FLASH 中的位置偏移若不填写则软件自动放在上一个文件结束的位置以1024 byte对齐
  max_len - 该段bin文件可存放的最大空间长度若不填写则软件按照文件大小自动计算以1024 byte对齐
  **sram_offs** - 该段固件加载到SRAM中的地址偏移0xFFFFFFFF为无效值使用时忽略
  **ep** - 该段固件的ENTRY POINT0xFFFFFFFF为无效值使用时忽略
  **attr** - 表示该段固件属性
   [1:0]文件类型00-普通文件01-可执行文件10-XIP文件11-保留
   [3:2]加密类型00-不加密X1-带证书1X-flash加密
   [4]是否压缩bin文件0-不是1-是
   [5]是否安全文件0-不是1-是
   [31:6]:保留
  priv - private数据用户可以填入每个bin的自定义数据但某些已被系统使用的字段会被覆盖
   boot.bin priv[0]: [7:0]-OTA flash num
   boot.bin priv[0]: [31:8]-OTA size
   boot.bin priv[1]: [31:0]-OTA address
   boot.bin priv[2]: [15:0]-image max size
   boot.bin priv[2]: [31:16]-image xz max size
   每个bin priv[5]: [31:0]-next safety bin address
  raw_bin - 裸bin文件打包时候需要增加 -r 参数才会将其打包
   bin - bin文件名字
   flash_offs - 该段固件存放在 FLASH 中的位置偏移
### Flash_offs配置
> flash offset的配置要求如下
> 1. boot.bin固定需要设置为0地址app.bin地址需要4K对齐默认设置为32k的偏移地址
> 2. 其他的bin文件的地址并没有强制性的要求只要没有互相重叠并且不覆盖到sysinfo和OTA区域都是可以正常运行的
### Bin文件重叠的解决
> 如果bin文件出现了互相重叠的情况MKimage工具会进行自动计算然后生成一个“image_auto_cal.cfg”文件
> 用户可以直接使用该cfg文件重新进行打包也可手动修改默认的image.cfg文件
> **注意:**如果全部的bin文件在经过自动计算后其大小依然超过sysinfo的默认位置(OTA ADDRESS - 4K)则不会生成“image_auto_cal.cfg”文件此时用户需要自己手动进行cfg文件的修改
```
cfg string:
{
"magic" : "AWIH",
"version" : "0.4",
"OTA" : {"addr": "1024K", "size": "4K"},
"image" : {"max_size": "1020K"},
"count" : 6,
"section" :
[
{"id": "0xa5ff5a00", "bin": "boot_40M.bin", "cert": "null", "flash_offs": "0K", "sram_offs": "0x00268000", "ep": "0x00268101", "attr": "0x1"},
{"id": "0xa5fe5a01", "bin": "app.bin", "cert": "null", "flash_offs": "32K", "sram_offs": "0x00201000", "ep": "0x00201101", "attr": "0x1"},
{"id": "0xa5fd5a02", "bin": "app_xip.bin", "cert": "null", "flash_offs": "50K", "sram_offs": "0xffffffff", "ep": "0xffffffff", "attr": "0x2"},
{"id": "0xa5fa5a05", "bin": "wlan_bl.bin", "cert": "null", "flash_offs": "980K", "sram_offs": "0xffffffff", "ep": "0xffffffff", "attr": "0x1"},
{"id": "0xa5f95a06", "bin": "wlan_fw.bin", "cert": "null", "flash_offs": "985K", "sram_offs": "0xffffffff", "ep": "0xffffffff", "attr": "0x1"},
{"id": "0xa5f85a07", "bin": "sys_sdd_40M.bin", "cert": "null", "flash_offs": "1017K", "sram_offs": "0xffffffff", "ep": "0xffffffff", "attr": "0x1"},
{}
]
}
err: bin 1 and bin 2 were overlaped!
Overlapped size: 2248 Byte(3kB)
bin 1 name:app.bin begin: 0x00008000 end: 0x0000D0C8
bin 2 name:app_xip.bin begin: 0x0000C800
We've rearranged bin files and generated new cfg file 'image_auto_cal.cfg', the new one is recommended.
Generate image file failed
make: *** [image] 错误 255
```
> 上图显示app.bin和app_xip.bin重叠了app.bin超出了3K的数据覆盖了app_xip.bin前面3K数据
> 说明给app.bin的空间太小了此时可以调整app_xip.bin的flash_offs由原来的50K调整为80K即可剩下的27K做为预留空间。
---
## 工具使用
### 参数说明
> MKimage使用命令行方式运行除了windows平台下的EXE可以双击运行此时使用的参数都是默认值
> 工具支持的参数说明如下,**加粗**的为常用参数:
| 参数 | 说明 |
| -------------------------- | ----------------------------------------------------------- |
| **-c <cfg file path>** | cfg文件的路径默认为“image.cfg” |
| -C <image oper> | image操作模式默认为0<br>0-仅打包<br>1-仅合并不含OTA区域包含第二个文件的boot.bin<br>2-打包并合并固件不含OTA区域包含第二个文件的boot.bin<br>3-仅合并生成裸数据固件包含OTA区域不含第二个文件的boot.bin<br>4-打包并生成裸数据固件包含OTA区域不含第二个文件的boot.bin |
| -e <flash crypto> | Flash加密使用默认不使用 |
| -f <Combine File 1st> | 生成合并固件所需的第一个文件路径,默认与打包输出的文件路径相同(即-o参数的值|
| -F <Combine File 2nd> | 生成合并固件所需的第二个文件路径,无默认值 |
| -I <Combine File path> | 生成合并固件的路径,无默认值 |
| **-o <Output image path>** | 打包生成的文件路径默认为“xr_system.img” |
| **-O** | 使能OTA功能默认不使能 |
| -p | 使能OTA功能并且将OTA区域写入生成文件默认不使能 |
| -r | 打包时一并打入raw bin字段的文件默认不打入 |
| -h | 帮助信息 |
| -v | 版本查看 |
---
## 使用示例
### 打包生成使能OTA功能的固件
> 使用命令:
```
mkimage.exe -O
```
> 打印输出:
```
E:\project\IOT\tools\xr-mkimage\Release>mkimage.exe -O
cfg string:
{
"magic" : "AWIH",
"version" : "0.4",
"OTA" : {"addr": "1024K", "size": "4K"},
"image" : {"max_size": "1020K"},
"count" : 6,
"section" :
[
{"id": "0xa5ff5a00", "bin": "boot_40M.bin", "cert": "null", "flash_offs": "0K", "sram_offs": "0x00268000", "ep": "0x00268101", "attr": "0x1"},
{"id": "0xa5fe5a01", "bin": "app.bin", "cert": "null", "flash_offs": "32K", "sram_offs": "0x00201000", "ep": "0x00201101", "attr": "0x1","priv":[{"0":"0x1402000"}, {"2":"0x1430000"}]},
{"id": "0xa5fd5a02", "bin": "app_xip.bin", "cert": "null", "flash_offs": "80K", "sram_offs": "0xffffffff", "ep": "0xffffffff", "attr": "0x2"},
{"id": "0xa5fa5a05", "bin": "wlan_bl.bin", "cert": "null", "flash_offs": "980K", "sram_offs": "0xffffffff", "ep": "0xffffffff", "attr": "0x1"},
{"id": "0xa5f95a06", "bin": "wlan_fw.bin", "cert": "null", "flash_offs": "990K", "sram_offs": "0xffffffff", "ep": "0xffffffff", "attr": "0x1"},
{"id": "0xa5f85a07", "bin": "sys_sdd_40M.bin", "cert": "null", "flash_offs": "1016K", "sram_offs": "0xffffffff", "ep": "0xffffffff", "attr": "0x1"},
{}
]
}
generate image: xr_system.img
```
### 打包并生成合并固件
> 使用命令:
```
mkimage.exe -O -C 2 -F xr872_40m_etf-v1.0.0-rel-20200302.img -I xr_system.cimg
```
> 打印输出:
```
E:\project\IOT\tools\xr-mkimage\Release>mkimage.exe -O -C 2 -F xr872_40m_etf-v1.0.0-rel-20200302.img -I xr_system.cimg
cfg string:
{
"magic" : "AWIH",
"version" : "0.4",
"OTA" : {"addr": "1024K", "size": "4K"},
"image" : {"max_size": "1020K"},
"count" : 6,
"section" :
[
{"id": "0xa5ff5a00", "bin": "boot_40M.bin", "cert": "null", "flash_offs": "0K", "sram_offs": "0x00268000", "ep": "0x00268101", "attr": "0x1"},
{"id": "0xa5fe5a01", "bin": "app.bin", "cert": "null", "flash_offs": "32K", "sram_offs": "0x00201000", "ep": "0x00201101", "attr": "0x1","priv":[{"0":"0x1402000"}, {"2":"0x1430000"}]},
{"id": "0xa5fd5a02", "bin": "app_xip.bin", "cert": "null", "flash_offs": "80K", "sram_offs": "0xffffffff", "ep": "0xffffffff", "attr": "0x2"},
{"id": "0xa5fa5a05", "bin": "wlan_bl.bin", "cert": "null", "flash_offs": "980K", "sram_offs": "0xffffffff", "ep": "0xffffffff", "attr": "0x1"},
{"id": "0xa5f95a06", "bin": "wlan_fw.bin", "cert": "null", "flash_offs": "990K", "sram_offs": "0xffffffff", "ep": "0xffffffff", "attr": "0x1"},
{"id": "0xa5f85a07", "bin": "sys_sdd_40M.bin", "cert": "null", "flash_offs": "1016K", "sram_offs": "0xffffffff", "ep": "0xffffffff", "attr": "0x1"},
{}
]
}
generate image: xr_system.img
generate combine image: xr_system.cimg
```
### 打包并生成裸数据固件
> 使用命令:
```
mkimage.exe -O -C 4 -F xr872_40m_etf-v1.0.0-rel-20200302.img -I xr_system_raw.bin
```
> 打印输出:
```
E:\project\IOT\tools\xr-mkimage\Release>mkimage.exe -O -C 4 -F xr872_40m_etf-v1.0.0-rel-20200302.img -I xr_system_raw.bin
cfg string:
{
"magic" : "AWIH",
"version" : "0.4",
"OTA" : {"addr": "1024K", "size": "4K"},
"image" : {"max_size": "1020K"},
"count" : 6,
"section" :
[
{"id": "0xa5ff5a00", "bin": "boot_40M.bin", "cert": "null", "flash_offs": "0K", "sram_offs": "0x00268000", "ep": "0x00268101", "attr": "0x1"},
{"id": "0xa5fe5a01", "bin": "app.bin", "cert": "null", "flash_offs": "32K", "sram_offs": "0x00201000", "ep": "0x00201101", "attr": "0x1","priv":[{"0":"0x1402000"}, {"2":"0x1430000"}]},
{"id": "0xa5fd5a02", "bin": "app_xip.bin", "cert": "null", "flash_offs": "80K", "sram_offs": "0xffffffff", "ep": "0xffffffff", "attr": "0x2"},
{"id": "0xa5fa5a05", "bin": "wlan_bl.bin", "cert": "null", "flash_offs": "980K", "sram_offs": "0xffffffff", "ep": "0xffffffff", "attr": "0x1"},
{"id": "0xa5f95a06", "bin": "wlan_fw.bin", "cert": "null", "flash_offs": "990K", "sram_offs": "0xffffffff", "ep": "0xffffffff", "attr": "0x1"},
{"id": "0xa5f85a07", "bin": "sys_sdd_40M.bin", "cert": "null", "flash_offs": "1016K", "sram_offs": "0xffffffff", "ep": "0xffffffff", "attr": "0x1"},
{}
]
}
generate image: xr_system.img
generate raw image: xr_system_raw.bin
```
## 参考文档
> 《XRADIO_MKimage_Tool_User_Guide-CN》