K230 SDK 编译配置解析

2026-03-19

K230 SDK 编译配置解析

本文基于 make CONF=k230_canmv_dongshanpi_defconfig 命令,深入解析 K230 SDK 的配置系统、DTS 设备树、大小核架构和镜像构建流程。

1. 概述

K230 SDK 是面向 Canaan K230 开发板的软件开发包,基于 Linux + RT-Smart 双核异构系统

官方资源

  • GitHub: https://github.com/kendryte/k230_sdk
  • 文档: https://github.com/kendryte/k230_docs

2. SDK 目录结构

k230_sdk/
├── configs/                 # 配置文件目录
│   ├── k230_canmv_dongshanpi_defconfig
│   ├── k230_evb_defconfig
│   └── ...
├── board/                   # 板级相关配置
│   ├── common/             # 通用板级配置
│   │   ├── gen_image_cfg/  # 镜像分区配置
│   │   ├── gen_image_script/  # 镜像生成脚本
│   │   └── env/            # 环境变量
│   ├── k230_evb_xxx/       # EVB 板级配置
│   └── k230_canmv_xxx/     # CanMV 板级配置
├── src/
│   ├── big/                # 大核代码
│   │   ├── rt-smart/       # RT-Smart 操作系统
│   │   ├── mpp/            # 多媒体处理组件
│   │   └── kmodel/         # AI 模型
│   ├── little/              # 小核代码
│   │   ├── linux/          # Linux 内核
│   │   ├── uboot/          # U-Boot 引导程序
│   │   └── buildroot-ext/  # Buildroot 根文件系统
│   └── common/              # 公共代码
│       ├── cdk/             # CDK 开发套件
│       └── opensbi/         # OpenSBI 固件
├── tools/                   # 工具
│   ├── kconfig/             # Kconfig 配置工具
│   └── gen_image_cfg/       # 镜像配置
├── Makefile                 # 主构建文件
├── repo.mak                 # 仓库版本定义
├── parse.mak                # 解析配置文件
└── Kconfig*                 # 配置系统定义

3. defconfig 配置文件解析

3.1 板级配置

k230_canmv_dongshanpi_defconfig 定义:

# 板级选择
CONFIG_BOARD_K230_CANMV_DONGSHANPI=y
CONFIG_BOARD_NAME="k230_evb"

# 引导配置
CONFIG_UBOOT_DEFCONFIG="k230_canmv_dongshanpi"
CONFIG_LINUX_DEFCONFIG="k230_canmv_dongshanpi"
CONFIG_LINUX_DTB="k230_canmv_dongshanpi"

# RT-Smart 控制台 UART
CONFIG_RTT_CONSOLE_ID=3

支持的板级配置

配置项 说明
CONFIG_BOARD_K230_EVB K230 EVB 开发板
CONFIG_BOARD_K230_CANMV CanMV-K230 开发板
CONFIG_BOARD_K230_CANMV_DONGSHANPI 东山 PI CanMV-K230
CONFIG_BOARD_K230D K230D 版本
CONFIG_BOARD_K230_FPGA FPGA 版本

3.2 工具链配置

# RT-Smart 工具链 (小核控制, 800MHz)
CONFIG_TOOLCHAIN_PREFIX_RTT="riscv64-unknown-linux-musl-"
CONFIG_TOOLCHAIN_PATH_RTT="/opt/toolchain/riscv64-linux-musleabi_for_x86_64-pc-linux-gnu/bin"

# Linux 工具链 (大核计算, 1.6GHz)
CONFIG_TOOLCHAIN_PREFIX_LINUX="riscv64-unknown-linux-gnu-"
CONFIG_TOOLCHAIN_PATH_LINUX="/opt/toolchain/Xuantie-900-gcc-linux-5.10.4-glibc-x86_64-V2.6.0/bin"

工具链版本 (定义在 repo.mak):

组件 版本 Commit
RT-Smart b71e7ba
Linux 67b5789 (v5.10.4)
U-Boot 1f0308a
OpenSBI 1f89326
MPP c48e112
CDK c106662
Buildroot-Ext 3b7945c

3.3 内存布局配置

# 总内存: 1GB (0x40000000)
CONFIG_MEM_TOTAL_SIZE=0x40000000

# IPC 通信区
CONFIG_MEM_IPCM_BASE=0x00100000
CONFIG_MEM_IPCM_SIZE=0x00100000

# RT-Smart 大核内存 (126MB)
CONFIG_MEM_RTT_SYS_BASE=0x00200000
CONFIG_MEM_RTT_SYS_SIZE=0x07E00000

# Linux 小核内存 (128MB)
CONFIG_MEM_LINUX_SYS_BASE=0x08000000
CONFIG_MEM_LINUX_SYS_SIZE=0x08000000

# 多媒体内存区域 (MMZ) (252MB)
CONFIG_MEM_MMZ_BASE=0x10000000
CONFIG_MEM_MMZ_SIZE=0x0FC00000

内存布局图

0x00000000 ┌─────────────────────────┐
            │       保留区           │
0x00100000 ├─────────────────────────┤
            │    IPC (1MB)          │
0x00200000 ├─────────────────────────┤
            │  RT-Smart (126MB)     │
0x08000000 ├─────────────────────────┤
            │   Linux (128MB)       │
0x10000000 ├─────────────────────────┤
            │   MMZ (252MB)         │
            │  (多媒体/AI 加速)      │
0x40000000 └─────────────────────────┘
            总计: 1GB

3.4 存储配置

# SPI NOR/NAND (未启用)
# CONFIG_SPI_NOR is not set
# CONFIG_SPI_NAND is not set

# SD/eMMC 存储
CONFIG_SDCAED=y

3.5 双核配置

# 同时支持 RT-Smart 和 Linux
CONFIG_SUPPORT_RTSMART=y
CONFIG_SUPPORT_LINUX=y

# Linux 运行在 Core 0
CONFIG_LINUX_RUN_CORE_ID=0

# 编译版本
CONFIG_BUILD_RELEASE_VER=y

4. Linux 内核

内核版本:Linux 5.10.4 (Kleptomaniac Octopus)

# src/little/linux/Makefile
VERSION = 5
PATCHLEVEL = 10
SUBLEVEL = 4
EXTRAVERSION =
NAME = Kleptomaniac Octopus

Linux 内核源码结构

src/little/linux/
├── arch/riscv/            # RISC-V 架构
│   └── boot/dts/
│       └── kendryte/      # K230 设备树
│           ├── k230.dtsi           # 核心 DTSI
│           ├── k230_canmv.dts      # CanMV 板级
│           ├── k230_canmv_dongshanpi.dts  # 东山PI
│           └── ...
├── drivers/               # 驱动
│   ├── media/             # ISP、视频驱动
│   ├── gpu/               # 2.5D GPU 驱动
│   └── ...
└── ...

5. Device Tree (DTS)

5.1 DTS 文件结构

k230_canmv_dongshanpi.dts  (板级 DTS)
    │
    ├── k230.dtsi          (SOC 核心 DTS)
    ├── clock_provider.dtsi (时钟树)
    ├── clock_consumer.dtsi
    ├── gpio_provider.dtsi  (GPIO)
    ├── gpio_consumer.dtsi
    ├── reset_provider.dtsi (复位)
    ├── reset_consumer.dtsi
    ├── power_provider.dtsi (电源)
    └── power_consumer.dtsi

5.2 K230 核心 DTS

k230.dtsi 定义了 SOC 级别的硬件:

/ {
    model = "kendryte,k230";
    compatible = "kendryte,k230";

    cpus {
        cpu@0 {
            compatible = "riscv";
            riscv,isa = "rv64imafdcvxthead";  // C906: RV64GCV
            mmu-type = "riscv,sv39";
        };
    };

    soc {
        // UART (5个)
        uart0: serial@91400000 { ... };  // Console
        uart1: serial@91401000 { ... };
        uart2: serial@91402000 { ... };
        uart3: serial@91403000 { ... };  // RT-Smart Console
        uart4: serial@91404000 { ... };

        // SD/eMMC
        mmc_sd0: sdhci0@91580000 { ... };  // eMMC/SD0
        mmc_sd1: sdhci1@91581000 { ... };  // SD Card

        // SPI
        spi0: spi@91584000 { ... };
        spi1: spi@91582000 { ... };

        // I2C, GPIO, etc.
    };
};

5.3 板级 DTS

k230_canmv_dongshanpi.dts

#include "k230.dtsi"

/ {
    aliases {
        serial0 = &uart0;  // Linux console
    };

    chosen {
        stdout-path = "serial0:115200";
    };
};

&ddr {
    reg = <0x0 0x8200000 0x0 0x7dff000>;  // Linux memory
};

&mmc_sd0 {
    status = "okay";
    io_fixed_1v8;
};

&uart0 {
    status = "okay";  // Enable UART0 for Linux
};

6. 大小核架构

6.1 Little Core (Linux)

定位:系统控制、应用程序、文件系统

配置

CONFIG_LINUX_RUN_CORE_ID=0              # 运行在 Core 0
CONFIG_MEM_LINUX_SYS_SIZE=0x08000000     # 128MB 内存

源码路径src/little/linux/

编译产物

output/k230_canmv_dongshanpi_defconfig/images/little-core/
├── linux_system.bin      # Linux 内核 + DTB
├── rootfs.ext4           # 根文件系统
└── uboot/                # U-Boot
    ├── fn_u-boot-spl.bin
    └── fn_ug_u-boot.bin

6.2 Big Core (RT-Smart)

定位:AI 推理、多媒体处理、实时计算

配置

CONFIG_MEM_RTT_SYS_SIZE=0x07E00000      # 126MB 内存
CONFIG_RTT_CONSOLE_ID=3                 # UART3 控制台

源码路径src/big/rt-smart/

编译产物

output/k230_canmv_dongshanpi_defconfig/images/big-core/
├── rtt_system.bin        # RT-Smart 系统
├── fastboot_app.elf      # 启动应用
└── ai_mode.bin           # AI 模式

大小核分工

特性 Little Core (Linux) Big Core (RT-Smart)
CPU C906 @ 800MHz C908 @ 1.6GHz
内存 128MB 126MB
用途 控制、文件系统、网络 AI、媒体、实时
工具链 riscv64-unknown-linux-gnu riscv64-unknown-linux-musl

7. 镜像构建流程

7.1 镜像分区结构

genimage-sdcard.cfg 定义分区:

SD Card / eMMC Image Layout:
┌──────────────────────────────────────────────────────────┐
│ Offset   │ Size    │ Partition      │ Description        │
├──────────┼─────────┼────────────────┼────────────────────│
│ 1MB      │ 512KB   │ uboot_spl_1   │ SPL 1st copy       │
│ 1.5MB    │ 512KB   │ uboot_spl_2   │ SPL 2nd copy       │
│ 2MB      │ 1.5MB   │ uboot         │ U-Boot             │
│ 3.5MB    │ 128KB   │ uboot_env     │ U-Boot 环境变量     │
│ 10MB     │ 20MB    │ rtt           │ RT-Smart 系统       │
│ 30MB     │ 50MB    │ linux         │ Linux 内核+DTB      │
│ 80MB     │ -       │ rootfs        │ 根文件系统 (ext4)   │
│ 128MB    │ 32MB    │ fat32appfs    │ App 分区 (vfat)    │
└──────────┴─────────┴────────────────┴────────────────────┘

镜像构建脚本流程 (gen_image.sh):

1. copy_file_to_images    # 复制文件到输出目录
2. gen_version             # 生成版本信息
3. add_dev_firmware        # 添加设备固件
4. gen_linux_bin           # 生成 Linux 镜像
5. gen_final_ext2          # 生成根文件系统
6. gen_rtt_bin             # 生成 RT-Smart 镜像
7. gen_uboot_bin           # 生成 U-Boot
8. gen_env_bin             # 生成环境变量
9. copy_app                # 复制应用程序
10. gen_image              # 使用 genimage 工具生成最终镜像

7.2 编译命令

完整编译

# 1. 准备源码和工具链
make prepare_sourcecode

# 2. 编译指定配置
make CONF=k230_canmv_dongshanpi_defconfig

# 3. 清理
make clean

编译输出

output/k230_canmv_dongshanpi_defconfig/images/
├── big-core/              # RT-Smart 大核产物
│   ├── rtt_system.bin
│   └── fastboot_app.elf
├── little-core/           # Linux 小核产物
│   ├── linux_system.bin
│   ├── rootfs.ext4
│   └── uboot/
├── sysimage-sdcard.img    # 可烧录镜像 (非安全)
└── sysimage-sdcard.img.gz # 压缩版本

8. 总结

项目 配置
开发板 CanMV-K230 东山 PI
Linux 内核 5.10.4 (Little Core)
RT-Smart 最新版本 (Big Core)
DTS k230_canmv_dongshanpi.dts
Little Core C906 @ 800MHz, 128MB
Big Core C908 @ 1.6GHz, 126MB
存储 SD/eMMC
镜像格式 GPT 分区表

关键源码路径

组件 路径
Linux 内核 src/little/linux/
RT-Smart src/big/rt-smart/
U-Boot src/little/uboot/
设备树 src/little/linux/arch/riscv/boot/dts/kendryte/
镜像配置 board/common/gen_image_cfg/
板级配置 board/k230_canmv_dongshanpi/

感谢阅读!