K230 Linux SDK 新板子适配指南#
文档目的#
本文介绍如何为 K230 Linux SDK 适配非官方支持的设备。
基于已有配置适配(推荐)#
选一个与目标板子硬件配置相近的配置,直接修改相关文件即可。本章节以 k230_canmv_01studio_defconfig 为例。
01studio 主配置文件#
项目 |
说明 |
|---|---|
文件路径 |
|
功能 |
SDK 配置文件,可使能软件包、配置 rootfs 大小、配置 U-Boot 和内核使用的配置文件等 |
修改方法 |
直接修改,或执行 |
生效方法 |
|
关键配置项说明
BR2_LINUX_KERNEL_DEFCONFIG="k230" # 内核默认配置文件 k230_defconfig
BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="board/canaan/k230-soc/fragment/linux.fragment" # 内核配置追加文件
BR2_LINUX_KERNEL_INTREE_DTS_NAME="canaan/k230-canmv-01studio-lcd canaan/k230-canmv-01studio" # 内核设备树
BR2_PACKAGE_BUSYBOX_CONFIG_FRAGMENT_FILES="board/canaan/k230-soc/fragment/busybox.fragment" # BusyBox 配置文件
BR2_TARGET_UBOOT_BOARDNAME="k230_canmv_01studio" # U-Boot 使用的配置文件
BR2_TARGET_ROOTFS_EXT2_SIZE="400M" # rootfs 大小
U-Boot 下关键文件#
U-Boot 配置文件#
项目 |
说明 |
|---|---|
文件路径 |
|
修改方法 |
手动修改,或执行 |
生效方法 |
|
关键配置项说明:
CONFIG_DEFAULT_DEVICE_TREE="k230_canmv_01studio" # 配置使用的设备树文件
CONFIG_CANMV_01STUDIO_LPDDR4_2667=y # DDR 类型和频率
CONFIG_TARGET_K230_CANMV_01STUDIO=y # 01studio 开发板
U-Boot 设备树#
项目 |
说明 |
|---|---|
文件路径 |
|
备注 |
由 |
生效方法 |
|
关键代码说明:
// BANK 电压设置必须与板子硬件匹配,否则可能永久损坏设备
#define BANK_VOLTAGE_IO0_IO1 K230_MSC_1V8 // FIXED
#define BANK_VOLTAGE_IO2_IO13 K230_MSC_3V3
#define BANK_VOLTAGE_IO14_IO25 K230_MSC_3V3
#define BANK_VOLTAGE_IO26_IO37 K230_MSC_3V3
#define BANK_VOLTAGE_IO38_IO49 K230_MSC_3V3
#define BANK_VOLTAGE_IO50_IO61 K230_MSC_3V3
#define BANK_VOLTAGE_IO62_IO63 K230_MSC_1V8
// IOMUX 功能配置,根据板子实际情况调整
// SEL 域选择 IOMUX 功能,参考:附录 A
(IO2) (1<<SEL | 0<<SL | BANK_VOLTAGE_IO2_IO13<<MSC | 1<<IE | 1<<OE | 0<<PU | 0<<PD | 4<<DS | 0<<ST)
(IO3) (3<<SEL | 0<<SL | BANK_VOLTAGE_IO2_IO13<<MSC | 1<<IE | 1<<OE | 0<<PU | 0<<PD | 4<<DS | 0<<ST)
(IO4) (3<<SEL | 0<<SL | BANK_VOLTAGE_IO2_IO13<<MSC | 1<<IE | 1<<OE | 0<<PU | 0<<PD | 4<<DS | 0<<ST)
(IO5) (1<<SEL | 0<<SL | BANK_VOLTAGE_IO2_IO13<<MSC | 1<<IE | 1<<OE | 0<<PU | 0<<PD | 4<<DS | 0<<ST)
(IO6) (1<<SEL | 0<<SL | BANK_VOLTAGE_IO2_IO13<<MSC | 1<<IE | 1<<OE | 0<<PU | 0<<PD | 4<<DS | 0<<ST)
注意:IOMUX 配置请参考 附录 A:IOMUX 引脚配置说明
U-Boot Board 目录#
项目 |
说明 |
|---|---|
目录路径 |
|
修改方法 |
直接修改 |
生效方法 |
|
关键文件说明:
board.c:板级初始化文件sysctl_boot_mode_e sysctl_boot_get_boot_mode(void) { return SYSCTL_BOOT_SDIO0; // 强制从 MMC0 启动 }
lpddr4_init_32_swap_2667.c:DDR4 初始化代码
Linux 关键文件#
Linux 设备树#
项目 |
说明 |
|---|---|
文件路径 |
|
修改方法 |
直接修改 |
生效方法 |
|
其他说明 |
编译一遍后才会生成;文件名带 |
关键配置片段:
aliases {
serial3 = &uart3; // 定义设备号
i2c0 = &i2c4; // 定义设备号
i2c1 = &i2c3;
mmc0 = &mmc_sd0; // 定义设备号
mmc1 = &mmc_sd1;
};
&usb1 {
dr_mode = "host"; // 强制为 host 模式
status = "okay"; // 使能 USB1
};
内核配置文件修改#
方法一:直接在 board/canaan/k230-soc/fragment/linux.fragment 中添加需要的内核配置。
方法二:执行以下命令修改内核配置:
make linux-menuconfig;
make linux-savedefconfig;
cp output/k230_test_defconfig/build/linux-*/defconfig buildroot-overlay/board/canaan/k230-soc/fragment/linux.fragment;
修改完后生效办法:
make linux-reconfigure;make
全新适配(不推荐)#
提示:不建议本方法,推荐直接使用已有的配置并进行修改。
添加主配置文件#
在 buildroot-overlay/configs/ 目录下创建配置文件(以 k230_test_defconfig 为例):
cd buildroot-overlay/configs/
cp k230_canmv_01studio_defconfig k230_test_defconfig
cd ../../
make CONF=k230_test_defconfig
U-Boot 适配#
Step 1:添加板级目录#
cd buildroot-overlay/boot/uboot/u-boot-2022.10-overlay/board/canaan/
cp k230_canmv_01studio k230_test -r
cd -
Step 2:修改 Kconfig#
在
buildroot-overlay/boot/uboot/u-boot-2022.10-overlay/arch/riscv/Kconfig中添加:
#buildroot-overlay/boot/uboot/u-boot-2022.10-overlay/arch/riscv/Kconfig文件
#大概50行附近
config TARGET_K230_TEST
bool "Support TEST BOARD"
select SYS_CACHE_SHIFT_6
#大概112行附近
source "board/canaan/k230_test/Kconfig"
修改
board/canaan/k230_test/Kconfig文件, 将TARGET_K230_CANMV_01STUDIO替换为TARGET_K230_TEST,类似如下:
if TARGET_K230_TEST
#......
config SYS_BOARD
default "k230_test"
#......
endif
Step 3:新增并修改uboot设备树#
新增设备树:
cd buildroot-overlay/boot/uboot/u-boot-2022.10-overlay/arch/riscv/dts/
cp k230_canmv_01studio.dts k230_test.dts
cd -
修改设备树,关键修改点如下
// BANK 电压设置必须与板子设计一致,错误配置可能导致芯片损坏
#define BANK_VOLTAGE_IO0_IO1 K230_MSC_1V8 // FIXED
#define BANK_VOLTAGE_IO2_IO13 K230_MSC_3V3
#define BANK_VOLTAGE_IO14_IO25 K230_MSC_3V3
#define BANK_VOLTAGE_IO26_IO37 K230_MSC_3V3
#define BANK_VOLTAGE_IO38_IO49 K230_MSC_3V3
#define BANK_VOLTAGE_IO50_IO61 K230_MSC_3V3
#define BANK_VOLTAGE_IO62_IO63 K230_MSC_3V3
#include "k230.dtsi"
&mmc0 {
1-8-v; // 配置 MMC0 为 1.8V IO
status = "okay";
};
&mmc1 {
status = "okay";
};
&iomux {
pinctrl-names = "default";
pinctrl-0 = <&pins>;
pins: iomux_pins {
u-boot,dm-pre-reloc;
pinctrl-single,pins = <
(IO2) (1<<SEL | 0<<SL | BANK_VOLTAGE_IO2_IO13<<MSC | 1<<IE | 0<<OE | 0<<PU | 1<<PD | 4<<DS | 1<<ST)
(IO63) (0<<SEL | 0<<SL | BANK_VOLTAGE_IO62_IO63<<MSC | 1<<IE | 1<<OE | 0<<PU | 0<<PD | 7<<DS | 1<<ST)
>;
};
};
注意:IOMUX 配置请参考 附录 A:IOMUX 引脚配置说明
Step 4:添加修改uboot配置文件#
添加配置文件
cd buildroot-overlay/boot/uboot/u-boot-2022.10-overlay/configs/
cp k230_canmv_01studio_defconfig k230_test_defconfig
cd -
修改配置项,关键修改点:
CONFIG_DEFAULT_DEVICE_TREE="k230_test"
CONFIG_TARGET_K230_TEST=y
CONFIG_CANMV_01STUDIO_LPDDR4_2667=y
Step 5:修改 SDK 配置#
修改 buildroot-overlay/configs/k230_test_defconfig 文件:
把BR2_TARGET_UBOOT_BOARDNAME修改为”k230_test”
BR2_TARGET_UBOOT_BOARDNAME="k230_test"
Step 6:编译验证#
# 进入 SDK 主目录执行以下命令
make k230_test_defconfig
make uboot-dirclean
make uboot
Linux 适配#
Step 1:新增设备树#
cd output/k230_test_defconfig/build/linux-*/arch/riscv/boot/dts/canaan/
cp k230-canmv-01studio.dts k230-test.dts
cd -
关键配置示例:
aliases {
serial3 = &uart3;
i2c0 = &i2c4;
i2c1 = &i2c3;
mmc0 = &mmc_sd0;
mmc1 = &mmc_sd1;
};
&usb1 {
dr_mode = "host";
status = "okay";
};
&mmc_sd0 {
status = "okay";
io_fixed_1v8; // 配置 MMC0 为 1.8V IO
rx_delay_line = <0x0d>;
tx_delay_line = <0x40>;
};
Step 2:切换设备树#
修改 buildroot-overlay/configs/k230_test_defconfig:
把BR2_LINUX_KERNEL_INTREE_DTS_NAME修改为”canaan/k230-test”
BR2_LINUX_KERNEL_INTREE_DTS_NAME="canaan/k230-test"
Step 3:内核配置文件修改#
参考上述 内核配置文件修改 章节。
开发板 OTP烧写#
OTP说明#
K230/K230D内部集成了一次性可编程器件OTP(One Time Programmable)。此器件可存储MAC、启动参数等永久绑定信息,通常我们把启动配置存储其中。
!!!如果烧录了错误的 OTP 或者固件的电压配置不匹配硬件配置有可能导致烧坏芯片!!!
根据硬件设置自动生成OTP配置bin文件#
嘉楠提供了便捷的图形化WEB界面,自动生成OTP配置bin文件。在此过程中,务必与硬件工程师充分沟通,明确硬件设置以及电压设置等关键信息。
配置工具连接:OTP配置工具
生成 bin 文件时,需依据硬件电路图仔细挑选相应配置:
BOOT ROM打印使用的UART IOMUX:此选项用于选定 BOOT log 输出的串口(建议优先选择 UART0)
BOOT ROM打印使用的UART电压:BOOT输出串口所采用的电压
OSPI IO电压:OSPI域的电压
SDIO0 IO电压:MMC0域的电压
SDIO1 IOMUX:MMC1选择的引脚
SDIO1 IO电压:MMC1域的电压
以01Studio开发板原理图为例,可以根据这些部分确定选项:
根据上述信息01studio的otp配置应该如下

特别提醒:务必与硬件工程师反复核对配置的准确性。一旦配置错误并进行烧写操作,极有可能导致芯片永久性损坏,无法修复!
完成上述配置后,点击 “生成配置文件” 按钮,即可生成一个 bin 文件,示例如下:
如果界面提示”设置和默认配置一致,无需生成配置文件”,说明默认otp就可以工作,不需要重新烧录otp,请跳过OTP烧写章节。
烧写OTP bin文件#
烧写工具下载链接:勘智开发者社区-资料下载
请根据您所使用的操作系统,选择对应的版本进行下载。同时,务必注意:在未完成OTP烧录之前,切勿给开发板长时间供电,以免出现芯片烧坏情况。

给芯片接通电源,连接好 UART0 接口,打开 BurningTool 软件,选择先前生成的 bin 文件:
点击 “开始” 按钮,耐心等待烧录过程结束:
烧录完成后,点击 “确认” 即可。
附录 A:IOMUX 引脚配置说明#
本章节描述uboot下iomux配置 linux下iomux请参考K230 linux IOMUX 指南
配置原则#
IOMUX 配置需参考板子原理图和 iomux 表
未使用的引脚建议配置为 GPIO,避免功能冲突
配置参数说明#
以下以 IO7 配置为 I2C4_SCL 为例:
(IO7) (2<<SEL | 0<<SL | BANK_VOLTAGE_IO2_IO13<<MSC | 1<<IE | 1<<OE | 1<<PU | 0<<PD | 7<<DS | 1<<ST)
参数 |
说明 |
示例 |
|---|---|---|
SEL |
功能号选择,从 0 开始(iomux 表中 Function Number - 1) |
I2C4_SCL 对应 |
SL |
输出翻转率控制,仅 IO0/IO1 单电压 PAD 可配置 |
|
MSC |
工作电压配置,必须与板子 BANK 供电一致 |
|
IE |
输入使能,0 表示输入方向无效 |
|
OE |
输出使能,0 表示输出方向无效 |
|
PU |
上拉配置,I2C 等总线建议开启 |
|
PD |
下拉配置,与功能需求相关 |
|
DS |
驱动强度配置,IO2~IO63 均为双电压 PAD(16 驱) |
|
ST |
施密特触发器配置,一般配置为 1 |
|
驱动强度说明#
单电压 PAD:8 驱,3bit 有效,取值范围
0x0~0x7双电压 PAD (IO2~IO63):16 驱,4bit 有效,取值范围
0x0~0xF
