参数配置
一键配置编译
D13x方案中,Luban-Lite 关于 BootLoader 和 RTOS 两部分固件的编译配置:
d13x_demo88-nor-xip_rt-thread_helloworld_defconfig
d13x_demo88-nor-xip_baremetal_bootloader_defconfig
在 Luban-Lite 根目录下执行以下命令即可编译得到 XIP 启动固件
source onestep.sh
lunch d13x_demo88-nor-xip_rt-thread_helloworld_defconfig
mb
1
2
3
2
3
小技巧
mb
该命令是 make BootLoader 和 make RTOS 的缩写, 在 lunch RTOS 的配置 Defconfig 后,会自动编译相关的 BootLoader 。 XIP相关配置介绍
BootLoader 相关
BootLoader 阶段需要使能 XIP 启动指令,并配置 NOR Flash 的 XIP 相关命令。
XIP启动支持列表
NOR Flash 的 XIP 相关命令配置位置: bsp/artinchip/drv_bare/spinor/aic_flash_xip_def.c
Luban-Lite 已支持 XIP 启动的 NOR Flash:
型号 | ID |
---|---|
ZB25VQ128 | 0X5E4018 |
ZB25VQ64 | 0X5E4017 |
W25Q64CV | 0xEF4017 |
GD25Q128E | 0xC84018 |
XT25F64B-S | 0xB4017 |
XT25F128B | 0xB4018 |
FM25Q64 | 0xA14017 |
W25Q128JVSIQ | 0xEF4018 |
GD25Q64ESIGR | 0xC84017 |
ZD25Q64B | 0xBA3217 |
使能XIP引导
使能 XIP 引导命令,在 Luban-Lite 根目录下执行 source onestep.sh
并 lunch 相关 BootLoader 配置文件, 再执行 scons --menuconfig
,进入 Menuconfig 的功能配置,在 SDK 的配置界面中,进行下列的选择:
BootLoader options --->
Commands --->
[ ] NOR Boot
[*] XIP Boot
1
2
3
4
2
3
4
注解
[*]
XIP Boot 与 [ ] NOR Boot
应该只选其一,因为 XIP 启动也是依赖 NOR Flash. RTOS 相关
RTOS 是在 NOR Flash 上运行的代码,其中包括.text
, .data
, .bss
, .rodata
Section 需要在链接脚本中指定配置, 由于 XIP 模式下的 NOR Flash 是只读操作,因此 .data Section 需要在编译制作 os.img 时,需要分段打包, 相关的编译打包脚本也需要做调整, 在 Luban-Lite 中,用户可通过 Menuconfig 来配置相关信息。
配置使能
CONFIG_AIC_QSPI0_DEVICE_SPINOR=n //关闭 QSPI0 的相关设备
CONFIG_AIC_XIP=y //使能 XIP,链接脚本中与编译脚本中需要依赖该宏
CONFIG_AIC_XIP_FW_OFFSET=0x40800 //配置 XIP 固件的入口地址在 XIP 映射地址的偏移(此处仅为示例)
1
2
3
2
3
注解
CONFIG_AIC_XIP_FW_OFFSET=0x40800
入口地址的计算方式:应用分区在 Flash 中的偏移 + 打包信息头的固定大小 0x800image_cfg.json
中的分区表,可以计算出应用分区在 Flash 中的偏移值,此处为 0x40000- 使用 ITB 打包格式打包应用,头信息固定大小为 0x800 (如果在客制化方案中,没有更换了打包格式,或者没有打包,则根据实际情况加上对应的偏移)
相关文件
tools/scripts/aic_build.py
bsp/artinchip/sys/d13x/link_script/gcc_aic.ld.S
注解
- aic_build.py是编译相关,参考
mkimage_xip_postaction
函数,实现.data
Section在编译制作 os.img 时进行分段打包。 - gcc_aic.ld.S对
.text
,.data
,.bss
,.rodata
存放的位置指定。