Edit online

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.

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 存放的位置指定。