分区修改规范
一.物理地址与逻辑地址的关系介绍
为确保存储在flash中数据的准确性,每32个字节会增加2个字节crc校验位(crc检验由硬件自动完成),从而构成的物理地址(flash视角)会比逻辑地址(cpu视角)多2个字节,对比关系见下图1:(左侧为cpu视角,右侧为flash视角,红色字体为crc校验)
二.分区修改的组成
修改分区涉及到四个部分:
重要
app的分区表制作
打包脚本的配置文件
链接脚本(ld)的制作
bootloader的分区表制作
三.分区修改作用域
重要
制作新的项目工程时,需要重做分区
修改分区表时,需要重做分区
修改链接脚本(ld)时,需要重做分区
四.案例
案例1:以bk7256为例,当用户在SDK基础上加入代码后,出现以下编译错误时见图2,该如何操作?
有两个解决方案:
重要
首先可以手动将middleware/soc/bk7256/bk7256_bsp.ld的对应的size范围增大(ld中最后几行)。
方案一:如果超出的code size很小,可关闭一些不需要的功能,即在middleware/soc/bk7256/bk7256.defconfig关闭相应的宏配置,减小code size;如果超出的code size很大,则只能实行方案二。
方案二:如果超出的code size很大,则需要重新修改分区表,
备注
建议优先选择方案一,方案二涉及修改的点比较多。
分区表制作步骤如下:
1.app分区表制作:
flash物理总长度为4M,需在middleware/boards/bk7256/vnd_flash/vnd_flash.c设定各个分区的partition_start_addr(物理地址)和partition_length(物理长度)见图3黄色区域;
2.打包脚本配置:
将middleware/boards/bk7256/configuration.json中的start_addr和size根据图3分区表中各分区大小修改即可,(其中start_addr = partition_start_addr, size = partition_length)见图4黄色区域;
3.链接脚本配置:(bk7256是双核,需配置bk7256_bsp.sag和bk7256_cp1_bsp.sag)
bk7256_bsp.sag配置如下:
middleware/soc/bk7256/bk7256_bsp.sag的LMA和length根据图3分区表中Application的partition_start_addr和partition_length计算得出,见图5黄色区域;
备注
- 计算规则:
bk7256_bsp.sag中CPU0_LOAD1的LMA(cpu视角0x10000)= Application的partition_start_addr *32/34;
bk7256_bsp.sag中CPU0_LOAD1的length(cpu视角0x8800) = 0x8800;
bk7256_bsp.sag中CPU0_LOAD2的LMA(cpu视角0x18800)= CPU0_LOAD1的LMA + 0x8800;
bk7256_bsp.sag中CPU0_LOAD2的length(cpu视角0x1A7800) = Application的partition_length*32/34 - 0x8800;
bk7256_cp1_bsp.sag配置如下:
middleware/soc/bk7256_cp1/bk7256_cp1_bsp.sag的LMA和length由图3分区表中Application1的partition_start_addr和partition_length计算得出,见图6黄色区域;
备注
- 计算规则:
bk7256_cp1_bsp.sag中CPU1的LMA(cpu视角0x1C0000)= Application1的partition_start_addr *32/34;
bk7256_cp1_bsp.sag中CPU1的length(cpu视角0x70000) = Application1的partition_length*32/34;
4.使用文档《RISC_V》中关于Andes sag转ld文件方法将bk7256_bsp.sag和bk7256_cp1_bsp.sag转化为对应的ld文件;
备注
该步骤4仅限新建工程;已有工程不需要该步骤,建议直接修改对应ld文件
5.需将middleware/soc/bk7256/bk7256.defconfig中CPU1核的偏移量重置一下 CONFIG_SLAVE_CORE_OFFSET=1835008 (十进制格式) (CONFIG_SLAVE_CORE_OFFSET 1835008 == 0x1C0000 in bk7256_cp1_bsp.sag LMA)
备注
当图3分区表(partition)中ota区域的起始地址没有变化,则步骤6不需要执行。
6.使用tools/env_tools/rt_partition_tool/rt_partition_tool.exe 工具修改插入新的bootloader的分区表见图7,简要步骤如下:
打开rt_partition_tool.exe工具
加载middleware/boards/bk7256/bootloader.bin(若bootloader中没有分区表则会提示添加会导入分区表)
编辑/导入分区表
保存分区表到bootloader.bin
导出分区表到json文件以作备用
步骤四中的bootloader.bin,然后替换middleware/boards/bk7256/bootloader.bin。
7.详细步骤可自行参考文档tools/env_tools/rt_partition_tool/rt_partition_tool.pdf
案例2:以projects/customization/bk7256_configa为例,当用户在SDK基础上加入代码后,出现以下编译错误时见图2,该如何操作?
有两个解决方案:
重要
首先可以手动将projects/customization/bk7256_configa/bk7256_bsp.ld的对应的size范围增大(ld中最后几行)。
方案一:如果超出的code size很小,可关闭一些不需要的功能,即在projects/customization/bk7256_configa/config/bk7256.defconfig关闭相应的宏配置,减小code size;如果超出的code size很大,则只能实行方案二。
方案二:如果超出的code size很大,则需要重新修改分区表,
备注
建议优先选择方案一,方案二涉及修改的点比较多。
分区表制作步骤如下:
1.app分区表制作:
flash物理总长度为4M,需在projects/customization/bk7256_configa/main/vnd_flash.c设定各个分区的partition_start_addr(物理地址)和partition_length(物理长度)见图8黄色区域;
2.打包脚本配置:
将projects/customization/bk7256_configa/configuration.json中的start_addr和size按照图8分区表中各分区大小修改即可,(其中start_addr = partition_start_addr, size = partition_length)见图9黄色区域;
3.链接脚本配置:(bk7256是双核,需配置bk7256_bsp.sag和bk7256_cp1_bsp.sag)
bk7256_bsp.sag配置如下:
projects/customization/bk7256_configa/bk7256_bsp.sag的LMA和length根据图8分区表中Application的partition_start_addr和partition_length计算得出,见图10黄色区域;
备注
- 计算规则:
bk7256_bsp.sag中CPU0_LOAD1的LMA(cpu视角0x10000)= Application的partition_start_addr *32/34;
bk7256_bsp.sag中CPU0_LOAD1的length(cpu视角0x8800) = 0x8800;
bk7256_bsp.sag中CPU0_LOAD2的LMA(cpu视角0x18800)= CPU0_LOAD1的LMA + 0x8800;
bk7256_bsp.sag中CPU0_LOAD2的length(cpu视角0x197800) = Application的partition_length*32/34 - 0x8800;
bk7256_cp1_bsp.sag配置如下:
projects/customization/bk7256_configa/bk7256_cp1_bsp.sag的LMA和length根据图8分区表中Application1的partition_start_addr和partition_length计算得出,见图11黄色区域;
备注
- 计算规则:
bk7256_cp1_bsp.sag中CPU1的LMA(cpu视角0x1B0000)= Application1的partition_start_addr *32/34;
bk7256_cp1_bsp.sag中CPU1的length(cpu视角0x20000) = Application1的partition_length*32/34;
4.使用文档《RISC_V》中关于Andes sag转ld文件方法将bk7256_bsp.sag和bk7256_cp1_bsp.sag转化为对应的ld文件;
备注
该步骤4仅限新建工程;已有工程不需要该步骤,建议直接修改对应ld文件
5.需将projects/customization/bk7256_configa/properties_libs/bk7256.defconfig中CPU1核的偏移量重置一下 CONFIG_SLAVE_CORE_OFFSET=1769472 (十进制格式) (CONFIG_SLAVE_CORE_OFFSET 1769472 == 0x1B0000 in bk7256_cp1_bsp.sag LMA)
6.使用tools/env_tools/rt_partition_tool/rt_partition_tool.exe 工具修改插入新的bootloader的分区表见图12,简要步骤如下:
打开rt_partition_tool.exe工具
加载projects/customization/bk7256_configa/bootloader.bin(若bootloader中没有分区表则会提示添加会导入分区表)
编辑/导入分区表
保存分区表到bootloader.bin
导出分区表到json文件以作备用
步骤四中的bootloader.bin,然后替换projects/customization/bk7256_configa/bootloader.bin。
7.详细步骤可自行参考文档tools/env_tools/rt_partition_tool/rt_partition_tool.pdf
五、分区功能介绍
各分区功能介绍如表格所示
partition name |
start address |
length |
functional description |
---|---|---|---|
bootloader |
0x00000000 |
0x11000 |
Store bootloader |
app |
0x11000 |
0x1CB000 |
Store application image |
app1 |
0x1DC000 |
0x77000 |
Store application1 image |
ota |
0x253000 |
0x187000 |
store updating image |
user_data |
0x3DA000 |
0x24000 |
Store customer data |
RF_Firmware |
0x3FE000 |
0x1000 |
Store calibration parameter |
NEI_info |
0x3FF000 |
0x1000 |
Store wifi mac address and fast connection parameter |