XIP 配置
一键配置编译
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
mb
该命令是 make Bootloader 和 make RTOS 的缩写, 在 lunch RTOS 的配置
Defconfig 后,会自动编译相关的 Bootloader 。
XIP 相关配置介绍
- 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
[*] xip boot
与[ ] nor boot
应该只选其一,因为 XIP 启动也是依赖 NOR Flash.
- XIP 启动支持列表
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=0x40100 //配置 XIP 固件的入口地址在 XIP 映射地址的偏移
-
CONFIG_AIC_XIP_FW_OFFSET=0x40100
,该偏移值根据分区表中的 os.img 固件的偏移+ 启动镜像头部信息大小 计算得到的程序入口地址, -
partition_table.h
可以获取 os.img 固件的偏移 信息 -
AIC 文档中心的 芯片手册 章节下 启动 的 BootROM 下有描述镜像格式,其中 HEAD1+HEAD2 大小是 256 Bytes。
-
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
存放的位置指定。