Edit online

固件编译

18 Dec 2024
Read time: 2 minute(s)

本节介绍了编译固件的常规流程。在开始编译固件之前,确保编译环境已经搭建完成。关于操作系统和依赖的详细安装说明,可查看UbuntuVMWare 安装

项目配置与编译

选择以下任意一种编译和配置命令方式,对项目进行配置和编译:
  • 常规 make 命令,例如:
    make list
    make d211_demo128_nand_defconfig
    make
  • OneStep 快捷命令,例如:
    source tools/onestep.sh                --> 一步直达命令
    lunch d211_demo128_nand_defconfig      --> 选择 d211_demo128_nand_defconfig
    m                                      --> 编译打包

生成固件

对于不同的存储介质,生成的固件名称和路径会有所不同:
  • EMMC 采用 squashfs 文件系统。如果开发板使用的存储介质为 eMMC (eNand),以 demo 工程为例,则编译后的固件名称为 d211_demo_v1.0.0.img

    系统输出示例如下:
    Image file is generated: /xxx/d211/luban/output/d211_demo/images/d211_demo_v1.0.0.img
  • SPI NAND 采用 UBIFS 文件系统。 如果开发板使用的存储介质为 SPINAND,以 demo128_nand 工程为例,则编译后会生成固件的名称 d211_demo128_nand_page_2k_block_128k_v1.0.0

    如果 SPI NAND 的 page 尺寸为 4K 大小,可在 target/d211/xxx/image_cfg.json 文件中配置 page 尺寸,编译后的文件为 d211_xxx_page_4k_block_256k_v1.0.0.img
    "info": { // Header information about image
        "platform": "d211",
        "product": "demo128_nand",
        "version": "1.0.0",
        "media": {
            "type": "spi-nand",
            "device_id": 0,
            "array_organization": [
                { "page": "2k", "block": "128k", "oob": "64" },
                // { "page": "4k", "block": "256k", "oob": "128" },
            ],
        }
    },
  • SPI NOR 采用 squashfs 文件系统。如果开发板使用的存储介质为 SPI NOR,以 demo88_nor 工程为例,则编译后会生成固件的名称为 d211_demo88_nor_v1.0.0.img

    系统输出示例如下:
    Image file is generated: /xxx/d211/develop/output/d211_demo88_nor/images/d211_demo88_nor_v1.0.0.img
    SPINOR 的分区信息在 target/d211/per2_spinor/image_cfg.json 中:
    "spi-nor": { // Media type
        "size": "16m", // Size of NOR
        "partitions": {
            "spl":    { "size": "256k" },
            "uboot":  { "size": "640k" },
            "userid": { "size": "64k" },
            "env":    { "size": "64k" },
            "env_r":  { "size": "64k" },
            "falcon": { "size": "64k" },
            "logo":   { "size": "512k" },
            "kernel": { "size": "5m" },
            "rootfs": { "size": "9m" },
            // "user":   { "size": "-" },
        }
    }