2.5. 编译

Baremetal SDK 采用 scons 命令编译

2.5.1. 编译选项介绍

常用选项

说明

–list-def

列举所有板卡配置

–apply-def=APPLY_DEFCONFIG

应用某个板卡配置

–save-def

保存当前板卡默认配置

–info

显示当前工程信息

–distclean

清除工具链和输出目录

–target=TARGET

生成目标工程,例如: eclipse/eclipse_sdk

–genconfig

通过 rtconfig.h 生成 .config

–useconfig=USECONFIG

通过配置文件生成 rtconfig.h

–verbose

编译过程中打印详细信息

–menuconfig

进入 menuconfig 菜单,对 SDK 进行配置

2.5.2. 编译操作

  • 查看 SDK 支持板卡

解压 SDK 之后,输入 scons --list-def 查看当前版本支持的板卡配置, 效果如下:

> scons --list-def
scons: Reading SConscript files ...
Built-in configs:
0. d13x_demo88-nor-xip_baremetal_bootloader_defconfig - Build for d13x_demo88-nor-xip_baremetal_bootloader
1. d13x_demo88-nor_baremetal_bootloader_defconfig     - Build for d13x_demo88-nor_baremetal_bootloader
2. d13x_demo88-nor_baremetal_helloworld_defconfig     - Build for d13x_demo88-nor_baremetal_helloworld
3. d13x_per1-nand_baremetal_bootloader_defconfig      - Build for d13x_per1-nand_baremetal_bootloader
4. d13x_per1-nand_baremetal_helloworld_defconfig      - Build for d13x_per1-nand_baremetal_helloworld
5. d13x_per1-nor_baremetal_bootloader_defconfig       - Build for d13x_per1-nor_baremetal_bootloader
6. d13x_per1-nor_baremetal_helloworld_defconfig       - Build for d13x_per1-nor_baremetal_helloworld
7. d21x_demo100-nand_baremetal_bootloader_defconfig   - Build for d21x_demo100-nand_baremetal_bootloader
8. d21x_demo100-nand_baremetal_helloworld_defconfig   - Build for d21x_demo100-nand_baremetal_helloworld
9. d21x_demo100-nor_baremetal_bootloader_defconfig    - Build for d21x_demo100-nor_baremetal_bootloader
10. d21x_demo128-nand_baremetal_bootloader_defconfig   - Build for d21x_demo128-nand_baremetal_bootloader
11. d21x_demo88-mmc_baremetal_bootloader_defconfig     - Build for d21x_demo88-mmc_baremetal_bootloader
12. d21x_demo88-nand_baremetal_bootloader_defconfig    - Build for d21x_demo88-nand_baremetal_bootloader
13. d21x_demo88-nand_baremetal_helloworld_defconfig    - Build for d21x_demo88-nand_baremetal_helloworld
14. d21x_demo88-nor_baremetal_bootloader_defconfig     - Build for d21x_demo88-nor_baremetal_bootloader
15. d21x_per2-nand_baremetal_bootloader_defconfig      - Build for d21x_per2-nand_baremetal_bootloader
16. d21x_per2-nand_baremetal_helloworld_defconfig      - Build for d21x_per2-nand_baremetal_helloworld
17. d21x_per2-nor_baremetal_bootloader_defconfig       - Build for d21x_per2-nor_baremetal_bootloader
  • 选择板卡配置

> scons --apply-def=8
scons: Reading SConscript files ...
Load config from target\configs\d21x_demo100-nand_baremetal_helloworld_defconfig

> scons --apply-def=d21x_demo100-nand_baremetal_helloworld_defconfig
scons: Reading SConscript files ...
Load config from target\configs\d21x_demo100-nand_baremetal_helloworld_defconfig
  • 配置参数

执行 scons --menuconfig,进入配置界面,可根据实际需求进行配置修改

  • 编译

执行 scons ,编译成功后生成镜像文件,打印信息如下:

Creating Baremetal_D21x_V1.0.0/output/d21x_demo100-nand_rt-thread_helloworld/images/usbupg-ddr-init.aic ...
Creating Baremetal_D21x_V1.0.0/output/d21x_demo100-nand_rt-thread_helloworld/images/bootloader.aic ...
Creating Baremetal_D21x_V1.0.0/output/d21x_demo100-nand_rt-thread_helloworld/images/os.aic ...
Image header is generated.
Meta data for image components:
        Meta for image.updater.ddr         offset 0x1400     size 0x5910 (22800)
        Meta for image.updater.bootloader  offset 0x7400     size 0x1c710 (116496)
        Meta for image.info                offset 0x0        size 0x800 (2048)
        Meta for image.target.bootloader   offset 0x23c00    size 0x1c710 (116496)
        Meta for image.target.os           offset 0x40400    size 0x1f2610 (2041360)
        Meta for image.target.rootfs       offset 0x232c00   size 0x1ce0000 (30277632)
Packing file data:
        usbupg-ddr-init.aic
        bootloader.aic
        bootloader.aic
        os.aic
        page_2k_block_128k_oob_64_rootfs.uffs
Image file is generated: Baremetal_D21x_V1.0.0/output/d21x_demo100-nand_rt-thread_helloworld/images/d21x_demo100_nand_page_2k_block_128k_v1.0.0.img

Baremetal is built successfully

scons: done building targets.

2.5.3. 生成目录

output 目录是编译后生成在 SDK 根目录下的文件,包含各个配置编译生成的目录, 例如上文编译后生成的 d21x_demo100-nand_baremetal_helloworld 目录,其内部结构如下:

Baremetal/output$ tree -L 2
.
├── d21x_demo100-nand_baremetal_helloworld
│   ├── application
│   ├── bsp
│   ├── images
│   ├── kernel
│   ├── libs
│   ├── packages
│   └── target
  • application:存放编译过程中, $SDK/application 源码目录生成的 *.o 文件;

  • bsp: 存放编译过程中, $SDK/bsp 源码目录生成的 *.o 文件,包括驱动模块、外设驱动等;

  • images: 编译生成的镜像文件、函数符号表等文件;

  • kernel: 存放 Baremetal 操作系统内核模块编译生成的 *.o 文件;

  • libs: $SDK/application 目录里或用户自定义生成的库文件存放于此目录;

  • packages: 编译后 $SDK/packages 目录后,生成的 *.o 文件;主要包括 artinchipthird-party 两部分;

  • target: 针对选择的板卡,生成的 board.opinmux.osys_clk.o