ShiMetaPi-Pico-G1快速入门:02 镜像编译

📅 2026/8/4 7:38:52
ShiMetaPi-Pico-G1快速入门:02 镜像编译
本章节详细介绍如何配置SDK、编译Boot、内核以及根文件系统镜像。SDK支持一键整体编译也支持单独模块的独立编译以适应不同的开发调试需求。说明本SDK提供make工具和run.sh脚本两种编译方式1. 使用 run.sh 脚本编译SDK 根目录下提供了run.sh一键编译脚本封装了常用的编译、清理和信息查询操作使用更加简便。该脚本无需手动执行source build/env.sh内部已自动加载编译环境。1.1 基本用法./run.sh 命令 [-j[N]]其中-j[N]为可选的并行编译参数省略N时自动使用全部 CPU 核心。1.2 配置与信息命令lunch — 交互式选择开发板配置通过交互式菜单选择开发板型号和内核版本自动生成cfg.mk配置文件./run.sh lunch执行后会出现如下交互菜单选择开发板型号列出configs/目录下所有可用的板级配置选择内核版本如linux-5.10、linux-4.9以及对应的 quickstart 版本提示lunch命令相当于替代了手动执行make menuconfig的芯片选型步骤适合首次编译或切换目标平台时使用。check — 检查编译环境检查编译所需的工具链、命令等是否已正确安装包括 bash、make、gcc、交叉编译工具链和 fakeroot 等./run.sh checkinfo — 查看当前编译信息显示当前cfg.mk中的配置信息包括芯片型号、芯片架构、内核版本、Bootloader、工具链和 Flash 支持等./run.sh infoenv — 查看环境配置显示当前工具链路径等环境信息./run.sh envlist — 列出可用的开发板配置列出所有可用的板级配置和内核版本并标识当前正在使用的配置./run.sh list1.3 编译命令命令说明./run.sh uboot编译 U-Boot 引导程序./run.sh kernel编译 Linux 内核./run.sh rootfs构建根文件系统./run.sh driver编译内核驱动GMP./run.sh sysdrv编译 uboot kernel rootfs./run.sh osal编译 OSAL 适配层./run.sh media编译媒体库./run.sh sample编译 MPP 示例应用./run.sh mcu编译 MCU 固件./run.sh all编译全部组件说明./run.sh all会先清理全部编译产物再重新编译等同于make clean make build。如需增量编译请使用sysdrv或单独编译目标模块。1.4 清理命令命令说明./run.sh clean uboot清理 U-Boot./run.sh clean kernel清理内核./run.sh clean rootfs清理 rootfs./run.sh clean driver清理驱动./run.sh clean sysdrv清理 uboot/kernel/rootfs./run.sh clean media清理媒体库./run.sh clean sample清理 MPP 示例应用./run.sh clean osal清理 OSAL 适配层./run.sh clean mcu清理 MCU 固件./run.sh clean all清理全部组件说明./run.sh target clean与./run.sh clean target两种写法等效均支持。1.5 并行编译所有编译和清理命令均支持-j参数进行并行编译以加快构建速度# 使用全部 CPU 核心并行编译 ./run.sh kernel -j # 使用 4 个线程并行编译 ./run.sh kernel -j4 # 全量编译并使用全部核心 ./run.sh all -j1.6 使用示例以下是一次完整的首次编译流程示例# 1. 首次使用选择开发板配置 ./run.sh lunch # 2. 检查编译环境是否就绪 ./run.sh check # 3. 确认当前配置 ./run.sh info # 4. 全量编译使用全部核心 ./run.sh all -j日常开发中的增量编译示例# 仅修改了内核代码重新编译内核 ./run.sh kernel -j # 修改了 uboot 和内核编译系统驱动 ./run.sh sysdrv -j # 编译mpp应用示例 ./run.sh sample -j # 清理内核编译结果后重新编译 ./run.sh clean kernel ./run.sh kernel -j2. 使用make工具编译2.1 编译步骤步骤1配置环境变量。进入SDK根目录执行以下命令加载编译环境source build/env.sh步骤2选择芯片型号ShiMetaPi-Pico-G1提供GK7206V12A和GK7206V11A两种芯片型号选择具体配置步骤如下tip此配置项在重新选择之前一直生效无需每次编译时都进行配置芯片类型选择make menuconfigBase--Chip Type--xm7206v12a--保存退出说明如需选择GK7206V11A请选择xm7206v11aDDR型号选择Board--Boot Regfile Config--XM7206V12A_EVB_6L_DDR3_2133M_256M_1x16bit--保存退出说明GK7206V11A 输入XM7206V11A_EVB_6L_DDR3_2133M_128M_1x16bitGK7206V12A 输入XM7206V12A_EVB_6L_DDR3_2133M_256M_1x16bit步骤3编写配置可选。如果需要修改SDK的默认编译配置可通过menuconfig进行配置具体参考3. menuconfig配置make menuconfig步骤4编译配置保存后可在SDK根目录下使用编译或打包指令进行编译或打包操作生成所有需要的镜像包括uboot、kernel、rootfs以下以整体编译为例make build -j编译完成后系统会根据目标启动介质NAND / eMMC / SPI自动生成对应的镜像并统一输出到out/board_name/image目录下供烧录工具直接使用。说明-j参数后可跟数字以启动多线程并行编译如make build -j16可根据编译服务器的CPU核心数和内存大小进行调整以加快编译速度。2.2 其他常见编译指令2.2.1 完整编译整个SDK会依次编译uboot、kernel、rootfs、sample、打包镜像make build2.2.2 清理整个 SDK 编译产物会删除out/、临时文件、object 文件、镜像文件、相当于恢复到“未编译”状态make clean2.2.3 仅编译U-Boot若只修改了source/uboot,可只编译U-Boot,U-Boot 是板子上电后的第一阶段 bootloadermake uboot2.2.4 清除U-Boot编译结果make uboot_clean2.2.5 仅编译内核若只修改了内核相关如source/kernel,可只编译内核make linux2.2.6 清除内核编译结果make linux_clean2.2.7 仅编译sample示例代码make sample2.2.8 清除sample编译结果make sample_clean3. menuconfig 配置3.1 功能说明menuconfig是一种基于 Kconfig 配置体系的图形化终端配置工具将 SDK 中分散的配置项集中到一个统一界面中管理通过文本菜单界面的方式将大量编译选项、芯片型号、工具链、内核版本、Flash 类型、文件系统类型等配置项组织成分级菜单供开发者交互式选择。在 GK7206 SDK 中menuconfig 主要用于生成和维护 SDK 的全局配置文件cfg.mk。开发者通过执行配置命令进入菜单界面选择目标芯片、工具链、内核版本、Bootloader 配置、 Flash 类型等选项保存后生成或更新cfg.mkSDK 顶层 Makefile 和 build/base.mk 会包含 cfg.mk并根据其中的 CONFIG_ 配置项决定后续构建行为。配置选项包含以下4种状态符号含义[ ]或不编译[*]编译进内核M编译为模块.ko*编译进内核强制Tip: 在该界面下输入/可以进入搜索界面3.2 配置选项3.2.1 顶层菜单结构xmedia SDK Configuration ├── Base ├── Board ├── Bootloader System └── Linux SystemBaseBase 菜单用于配置 SDK 的基础平台信息包括芯片型号、芯片架构、交叉编译工具链、日志模式以及 QuickStart 快速启动开关。Base ├── Chip Type │ ├── xm7206v11a │ │ └── 选择目标芯片为 xm7206v11a。 │ │ │ ├── xm7206v10 │ │ └── 选择目标芯片为 xm7206v10。 │ │ │ ├── xm7206v10b │ │ └── 选择目标芯片为 xm7206v10b。 │ │ │ ├── xm7206v12a │ │ └── 选择目标芯片为 xm7206v12a。 │ │ │ ├── xm7206v11 │ │ └── 选择目标芯片为 xm7206v11。 │ │ │ └── xm7206v11at │ └── 选择目标芯片为 xm7206v11at。 │ ├── Toolchains Config │ ├── kernel toolchains │ │ ├── arm-gcc12.2.0-linux │ │ │ └── 选择 ARM glibc 工具链用于内核编译。 │ │ │ │ │ ├── aarch64-gcc12.2.0-linux │ │ │ └── 选择 AArch64 64 位工具链用于内核编译。 │ │ │ │ │ └── arm-gcc12.2.0-linux-uclibceabi │ │ └── 选择 ARM uClibc 工具链用于内核编译。 │ │ │ └── usr 32bit toolchains │ ├── arm-gcc12.2.0-linux │ │ └── 选择 ARM glibc 工具链用于用户态 32 位程序编译。 │ │ │ └── arm-gcc12.2.0-linux-uclibceabi │ └── 选择 ARM uClibc 工具链用于用户态 32 位程序编译。 │ ├── SDK Log Mode │ ├── log │ │ └── 启用 SDK 日志模式。 │ │ 编译时会增加 CONFIG_LOG_TRACE_SUPPORT1 等日志相关宏。 │ │ │ └── nolog │ └── 关闭 SDK 日志模式。 │ 适合发布版本或不需要调试日志的场景。 │ └── Support QuickStart └── 是否启用 QuickStart 快速启动模式。 启用后会影响 bootstrap、qs_mcu、initrd、分区表和 bootargs 等启动链路配置。3.2.2 BoardBoard 菜单用于配置板级相关参数。Board ├── Flash Config │ ├── Nand Flash support:是否启用 NAND Flash 总体支持。开启后才会显示 NAND Flash 设备类型选择。 │ │ │ │ │ └─── Nand Flash device support │ │ ├──Nand Flash Support │ │ │ └── 启用传统并行 NAND Flash 支持。 │ │ │ 该选项会影响 NAND 分区表、NAND rootfs 镜像和 NAND 启动参数。 │ │ │ │ │ └── Spi-Nand Flash Support │ │ └── 启用 SPI-NAND Flash 支持。 │ │ 该选项会影响 SPI-NAND 分区表、rootfs 镜像和启动参数。 │ │ │ ├── SPI Flash Support │ │ └── 是否启用 SPI NOR Flash 支持。 │ │ │ 默认开启。 │ │ │ 开启后可生成 SPI Flash 对应的镜像、分区和启动参数。 │ │ │ │ │ Block Size │ │ └── SPI Flash 块大小配置。 │ │ 仅在 SPI Flash Support 开启时有效。 │ │ 默认值为 64k。 │ │ │ └── eMMC Flash Support │ └── 是否启用 eMMC Flash 支持。 │ 开启后可选择生成 ext4 rootfs 等适用于 eMMC 的镜像。 │ └── Boot Regfile Config └── Boot Reg File └── 配置 Boot 阶段使用的寄存器初始化文件名。 通常用于 DDR、Pinmux 或芯片启动阶段寄存器初始化。3.2.3 Bootloader SystemBootloader System 用于配置系统启动加载程序相关参数主要是 U-Boot 版本、U-Boot 默认配置、环境变量存储区域和 DDR Training 支持等。Bootloader System ├── Boot Type │ └── uboot │ └── 选择启动加载程序类型为 U-Boot。 │ 当前工程中只提供 uboot 这一种 Boot Type。 │ ├── U-boot Version │ └── u-boot-2020.01 │ └── 选择 U-Boot 版本为 u-boot-2020.01。 │ 当前工程中只提供该版本。 │ ├── Boot Defconfig │ └── 配置 U-Boot 默认 defconfig 文件名。 │ 例如 xxxxx_defconfig。 │ 对应文件位于 U-Boot 源码目录下。 │ ├── Environment Variables Partition Start Address │ └── 配置 U-Boot 环境变量分区的起始地址。 │ 默认值为 0x80000。 │ 该地址应与 NAND、SPI-NAND 或 SPI-NOR 的块大小对齐。 │ ├── Environment Variables Image Size │ └── 配置 U-Boot 环境变量镜像大小。 │ 默认值为 0x40000。 │ ├── DDR Training Command Support │ └── 是否在 Bootloader 中启用 DDR Training 命令支持。 │ 默认开启。 │ 用于测试 DDR 窗口或调试 DDR 稳定性。 │ └── APP Support └── 是否启用 Bootloader 阶段的 APP 支持。 默认开启。 该选项通常用于支持启动阶段额外的应用或功能模块。3.2.4 Linux SystemLinux System 是 Linux 系统级配置入口下面分为三个子菜单Linux System ├── Kernel ├── Filesystem └── ToolsLinux System - KernelKernel 菜单用于配置 Linux 内核版本、SMP、多媒体驱动编译方式以及 InitRamdisk 相关配置。Linux System └── Kernel ├── Kernel Version │ ├── linux-5.10.y │ │ └── 选择 Linux Kernel 版本为 5.10.y。 │ │ 当前默认值。 │ │ │ └── linux-4.9.y │ └── 选择 Linux Kernel 版本为 4.9.y。 │ │ ├── Kernel SMP Support │ └── 是否启用 Linux Kernel SMP 多核支持。 │ 默认开启。 │ 开启后使用多核内核构建路径关闭后使用单核内核构建路径。 │ ├── Kernel Defconfig │ └── 配置 Linux Kernel 默认 defconfig 文件名。 │ 例如 xxxxx_defconfig。 │ 对应配置文件一般位于内核源码目录 │ arch/arm/configs/ │ ├── Build GMP in Kernel │ └── 是否将 GMP 相关驱动以内建方式编译进内核。 │ 选中时通常编译为 built-in │ 未选中时通常以 kernel module 方式生成。 │ └── InitRamdisk Config └── Toybox Config File For InitRamdisk └── 配置 InitRamdisk 使用的 Toybox 配置文件名。 默认值为 toybox-0.8.8。 对应配置文件通常位于 toybox 源码配置目录。Linux System - FilesystemFilesystem 菜单用于配置根文件系统、BusyBox、C 运行库、strip 行为以及 rootfs 镜像格式。Linux System └── Filesystem ├── Busybox Config File For Root │ └── 配置 RootFS 中 BusyBox 使用的配置文件名。 │ 默认值为 busybox-1_26_2。 │ 对应配置文件通常位于 BusyBox 源码配置目录。 │ ├── C Runtime Libarary Support │ └── 是否在 RootFS 中支持 C 运行库。 │ 默认开启。 │ 如果用户程序依赖 libstdc 等 C 运行库需要开启该项。 │ ├── Enable Strip │ └── 是否对根文件系统中的可执行文件和库进行 strip。 │ 默认开启。 │ 开启后会减小 rootfs 体积但会去除调试符号 │ 如果需要使用 gdb 调试建议关闭。 │ ├── Create Yaffs Rootfs Image │ └── 是否生成 YAFFS 格式 rootfs 镜像。 │ 仅在启用 Nand Flash Support 或 Spi-Nand Flash Support 时有效。 │ ├── Create Jffs2 Rootfs Image │ └── 是否生成 JFFS2 格式 rootfs 镜像。 │ 仅在启用 SPI Flash Support 时有效。 │ ├── Create Squashfs Rootfs Image │ └── 是否生成 SquashFS 格式 rootfs 镜像。 │ SquashFS 是只读压缩文件系统适合对体积敏感的固件场景。 │ ├── Create ext4 Rootfs Image │ └── 是否生成 ext4 格式 rootfs 镜像。 │ 仅在启用 eMMC Flash Support 时有效。 │ ├── eMMC Rootfs Size │ └── 配置 eMMC rootfs 镜像大小。 │ 仅在 Create ext4 Rootfs Image 开启时有效。 │ 默认单位为 MB默认值为 32。 │ ├── Create Ubi Rootfs Image │ └── 是否生成 UBI 格式 rootfs 镜像。 │ 仅在启用 Nand Flash Support 或 Spi-Nand Flash Support 时有效。 │ └── UBI Rootfs Size └── 配置 UBI rootfs 分区大小。 仅在 Create Ubi Rootfs Image 开启时有效。 默认值为 64M。Linux System - ToolsTools 菜单用于配置是否在 rootfs 或 SDK 构建中加入常用系统工具、调试工具和文件系统工具。Linux System └── Tools ├── Udev Support │ └── 是否启用 udev 支持。 │ udev 用于 Linux 用户态设备节点管理。 │ ├── Fat32 fsck Support │ └── 是否加入 FAT32 文件系统检查工具。 │ 用于检测或修复 FAT/FAT32 文件系统。 │ ├── Ext3/Ext4 format Support │ └── 是否加入 ext3/ext4 文件系统格式化工具。 │ 适用于 eMMC、SD 卡等块设备文件系统格式化场景。 │ ├── GDB Support │ └── 是否加入 GDB 调试支持。 │ 注意该选项需要用户自行准备 GDB 源码包 │ 如果源码包不存在开启该项可能导致编译失败。 │ ├── Ubi/Jffs2 format Support │ └── 是否加入 UBI/JFFS2 相关格式化和管理工具。 │ 常用于 NAND 或 SPI-NAND Flash 场景。 │ ├── Read/Write Registers Support │ └── 是否加入寄存器读写工具。 │ 用于底层调试、硬件寄存器查看和修改。 │ ├── Mii ethphy Support │ └── 是否加入 MII/以太网 PHY 调试工具。 │ 用于查看或配置以太网 PHY 寄存器。 │ └── CAN Tools Support └── 是否加入 CAN 总线相关工具。 用于 CAN 接口调试、收发测试等场景。