海思内核参数配置操作指南
背景
本文说明海思平台 Linux 内核参数配置、保存、编译、烧录和验证的操作流程,适用于 SS928V100、Hi3519DV500 / Hi3516DV500、Hi3516CV610 / Hi3516CV608 等已适配 SDK。不同平台的编译目录、默认配置文件和 Makefile 目标不同,操作前需要先确认当前平台实际使用的 defconfig 和编译命令。
.config 只代表当前构建目录正在使用的完整配置;如果只修改 .config,后续重新加载默认配置、重新解包源码或切换构建环境时,配置可能丢失。因此,完成 menuconfig 修改后,还需要将配置同步到项目使用的 defconfig。defconfig 是项目默认配置文件,通常位于内核源码的 arch/arm64/configs/ 目录,用于保证下次编译仍能加载相同的内核配置。
本文先列出各平台的配置文件和编译命令参考,再以 CH340 USB 转串口驱动为例,演示如何通过 menuconfig 开启 CONFIG_USB_SERIAL_CH341,并说明如何单独编译内核、整体编译 SDK 固件、烧录内核分区,以及在系统启动后通过 dmesg、lsmod 和 /dev/ttyUSB* 验证驱动是否生效。
重要提醒
必须以我们适配后的 SDK 为准,不要使用默认原厂 SDK,因为原厂 SDK 流程中存在删除源码的操作。原厂文档
bsp/readme_cn.txt中一步步编译内核的操作比较麻烦,不建议采用。
1. 各平台配置编译参考
不同平台的默认内核配置文件名称,需要参考对应平台 bsp 目录下的 Makefile。重点查看 KERNEL_CFG 的定义,以及 CHIP、EBAINA_BOARD、DEBUG、KOL 等参数对 KERNEL_CFG 的影响。
1.1 SS928V100 平台
BSP 编译目录:
/home/sunshine/Workspace/HiEuler_PI/SS928V100_SDK_V2.0.2.2/osdrv
内核源码目录:
/home/sunshine/Workspace/HiEuler_PI/SS928V100_SDK_V2.0.2.2/open_source/linux/linux-4.19.y
内核配置目录:
arch/arm64/configs/
SS928V100 对应的默认配置文件:
| 启动介质 | 默认 defconfig |
|---|---|
spi |
ss928v100_defconfig |
emmc |
ss928v100_emmc_defconfig |
打开 menuconfig:
make ARCH=arm64 CROSS_COMPILE=aarch64-mix210-linux- menuconfig
编译命令格式:
make BOOT_MEDIA=<启动介质> CHIP=ss928v100 <目标>
其中:
atf:单独编译内核相关内容;all:整体编译 SDK 固件。
示例:
# 单独编译
make BOOT_MEDIA=emmc CHIP=ss928v100 atf
# 整体编译
make BOOT_MEDIA=emmc CHIP=ss928v100 all
1.2 Hi3519DV500 / Hi3516DV500 平台
BSP 编译目录:
/home/sunshine/Workspace/HongOU_PI/Hi3519DV500_SDK_V2.0.2.0/smp/a55_linux/source/bsp
内核源码目录:
/home/sunshine/Workspace/HongOU_PI/Hi3519DV500_SDK_V2.0.2.0/open_source/linux/linux-5.10.y
内核配置目录:
arch/arm64/configs/
BSP目录下Makefile 中的 KERNEL_CFG 规则:
$(CHIP)$(MEDIUM_FLAG)$(PYH_MODE)$(TEE_FLAG)defconfig
默认 defconfig 对应关系:
| 板型 | 常用参数 | 默认 defconfig |
|---|---|---|
| HongouPI_38C | EBAINA_BOARD=38C,BOOT_MEDIA=emmc |
hi3519dv500_emmc_defconfig / hi3516dv500_emmc_defconfig |
| Board_38E | EBAINA_BOARD=38E,PYH_MODE=rmii_ |
hi3519dv500_rmii_defconfig / hi3516dv500_rmii_defconfig |
| Board_45E | EBAINA_BOARD=45E,BOOT_MEDIA=emmc,PYH_MODE=rmii_ |
hi3519dv500_emmc_rmii_defconfig / hi3516dv500_emmc_rmii_defconfig |
打开 menuconfig:
make ARCH=arm64 CROSS_COMPILE=aarch64-v01c01-linux-gnu- menuconfig
编译命令格式:
make EBAINA_BOARD=<板型> LIB_TYPE=glibc CHIP=<芯片> <目标>
其中:
atf:单独编译内核相关内容;all:整体编译 SDK 固件。
示例:
# 单独编译 (生成bl31.bin、uImage-fdt)
make EBAINA_BOARD=38C LIB_TYPE=glibc CHIP=hi3519dv500 atf
make EBAINA_BOARD=38C LIB_TYPE=glibc CHIP=hi3519dv500 kernel
# 整体编译
make EBAINA_BOARD=38C LIB_TYPE=glibc CHIP=hi3519dv500 all
1.3 Hi3516CV610 / Hi3516CV608 平台
BSP 编译目录:
/home/sunshine/Workspace/HongOUPI_PICO/Hi3516CV610_SDK_V1.0.2.1/smp/a7_linux/source/bsp
内核源码目录:
/home/sunshine/Workspace/HongOUPI_PICO/Hi3516CV610_SDK_V1.0.2.1/open_source/linux/linux-5.10.y
内核配置目录:
arch/arm/configs/
BSP目录下Makefile 中的 KERNEL_CFG 规则:
$(CHIP)$(MEDIUM_FLAG)$(BSP_KOL_FLAG)$(BSP_DEBUG_FLAG)defconfig
默认 defconfig 对应关系:
| 平台 | 常用参数 | 默认 defconfig |
|---|---|---|
| Hi3516CV610 非 KOL | CHIP=hi3516cv610,DEBUG=1,KOL=0 |
hi3516cv610_debug_defconfig |
| Hi3516CV610 KOL | CHIP=hi3516cv610,DEBUG=1,KOL=1 |
hi3516cv610_kol_debug_defconfig |
| Hi3516CV608 非 KOL | CHIP=hi3516cv608,DEBUG=1,KOL=0 |
hi3516cv608_debug_defconfig |
| Hi3516CV608 KOL | CHIP=hi3516cv608,DEBUG=1,KOL=1 |
hi3516cv608_kol_debug_defconfig |
打开 menuconfig:
make ARCH=arm CROSS_COMPILE=arm-v01c02-linux-musleabi- menuconfig
编译命令格式:
make LIB_TYPE=musl CHIP=<芯片> DEBUG=1 KOL=<0|1> <目标>
其中:
kernel:单独编译内核;all:整体编译 SDK 固件;
示例:
# 单独编译
make LIB_TYPE=musl CHIP=hi3516cv610 DEBUG=1 KOL=0 kernel
# 整体编译
make LIB_TYPE=musl CHIP=hi3516cv610 DEBUG=1 KOL=0 all
2. menuconfig 配置流程
本节以SS928V100平台开启 CH340/CH341 USB 转串口驱动为例,说明从加载默认配置、进入 menuconfig、保存 .config,到同步 defconfig 的完整流程。
2.1 准备内核源码目录
先进入 SDK 的 osdrv 目录,再切换到 Linux 内核源码目录。本文示例中的内核版本为 linux-4.19.y:
cd ~/Workspace/HiEuler_PI/SS928V100_SDK_V2.0.2.2/osdrv
cd ../open_source/linux/linux-4.19.y/
进入目录后建议执行 pwd 和 ls,确认当前目录确实为内核源码目录,并能看到内核源码文件。
2.2 生成当前内核配置
参考 osdrv/readme_cn.txt 以及当前板卡启动介质,SS928V100 eMMC 启动场景对应的默认配置文件为:
arch/arm64/configs/ss928v100_emmc_defconfig
将默认配置复制为当前内核构建使用的 .config:
cp arch/arm64/configs/ss928v100_emmc_defconfig .config
确认 .config 已生成:
ls -l .config
2.3 打开 menuconfig 配置界面
参考 osdrv/readme_cn.txt ,在内核源码目录执行:
make ARCH=arm64 CROSS_COMPILE=aarch64-mix210-linux- menuconfig
启动后会进入 Linux 内核配置主界面。menuconfig 主要通过键盘操作:
- 使用方向键移动光标;
- 按
Enter进入带有--->标记的子菜单; - 按
Y将配置编译进内核,显示为[*]; - 按
M将配置编译为模块,显示为<M>; - 按
N关闭配置,显示为[ ]或< >; - 按
/可以搜索配置项,例如搜索CH34; - 按
Esc Esc返回上一级或退出当前界面; - 底部的
<Select>、<Exit>、<Help>、<Save>、<Load>可以通过方向键选择后按Enter执行。
2.4 配置 CH341 USB 串口驱动
在 menuconfig 中按照以下路径进入 USB 串口驱动配置菜单:
Device Drivers
-> USB support
-> USB Serial Converter support
注意:菜单名称以当前 SDK 的实际内核配置界面为准,不同内核版本可能在大小写或描述上略有差异。
在 USB Serial Converter support 中找到以下配置项:
USB Winchiphead CH341 Single Port Serial Driver
根据项目需求选择编译方式:
[*] 编译进内核
<M> 编译为模块
保存后对应的内核配置项应为以下其中一种:
CONFIG_USB_SERIAL_CH341=y
CONFIG_USB_SERIAL_CH341=m
其中 y 表示驱动直接编译进内核,m 表示驱动编译为可加载模块。
如果菜单项较多,也可以在 menuconfig 中按 / 搜索 CH34,通过搜索结果确认该配置项所在路径和当前状态。
搜索结果中会列出匹配到的配置项及其所在路径。如下图所示,USB_SERIAL_CH341 前面的 (1) 表示可跳转编号;在键盘上按 1,即可直接进入该配置项所在的 USB Serial Converter support 目录。
2.5 保存并检查 .config
配置完成后,在 menuconfig 中选择 Save,保存到当前内核源码目录下的 .config。
保持默认文件名 .config,选择 Ok 确认保存。
退出 menuconfig 后执行以下命令确认 CH341 配置已经写入:
grep CONFIG_USB_SERIAL_CH341 .config
预期结果为以下其中一种:
CONFIG_USB_SERIAL_CH341=y
CONFIG_USB_SERIAL_CH341=m
2.6 同步到项目 defconfig
为了让后续重新加载默认配置或通过 SDK 顶层脚本编译时仍保留 CH341 配置,需要将当前 .config 覆盖到项目实际使用的 defconfig。
将当前 .config 覆盖到该 defconfig:
cp .config arch/arm64/configs/ss928v100_emmc_defconfig
3. 编译
完成内核配置并同步到 defconfig 后,回到 SDK 的 osdrv 顶层目录执行编译。调试阶段可先单独编译内核,确认无误后再整体编译 SDK。
方法一:单独编译内核
进入 osdrv 顶层目录:
cd ~/Workspace/HiEuler_PI/SS928V100_SDK_V2.0.2.2/osdrv
执行内核相关编译:
make BOOT_MEDIA=emmc CHIP=ss928v100 atf
atf 目标会先触发内核编译,适合需要同时更新启动相关组件的场景。
方法二:整体编译 SDK
需要生成完整固件包时,执行整体编译:
cd ~/Workspace/HiEuler_PI/SS928V100_SDK_V2.0.2.2/osdrv
make BOOT_MEDIA=emmc CHIP=ss928v100 all
4. 烧录固件(替换内核)
本次只修改内核配置,分区表和 rootfs 未变化时,可只烧录 kernel 分区,无需重新烧录完整固件。
在 BurnTool 中确认烧录介质、分区表和镜像路径正确后,仅勾选 kernel 分区,选择新编译生成的内核镜像进行烧录。
5. 验证 CH340 驱动
设备启动后插入 CH340 USB 转串口设备,查看内核日志:
dmesg | grep -i "ch34"
日志中出现 ch341-uart converter now attached to ttyUSB0,说明驱动已识别到 CH340 设备。
继续查看串口设备节点:
ls /dev/ttyUSB*
如果能看到 /dev/ttyUSB0,说明 CH340 串口节点已创建,驱动配置生效。
- 分享
- 举报
-
went 2026-06-29 21:02:22回复 举报有帮助
-
浏览量:458次2026-07-24 10:38:33
-
浏览量:5471次2020-08-31 08:41:19
-
浏览量:5196次2020-08-24 21:15:04
-
浏览量:5053次2020-08-25 18:13:09
-
浏览量:1837次2023-04-18 11:55:05
-
浏览量:11934次2020-08-30 15:32:16
-
浏览量:6938次2017-11-21 13:45:07
-
浏览量:5273次2020-08-30 15:59:35
-
浏览量:9882次2017-11-16 16:26:57
-
浏览量:8721次2020-08-30 09:01:15
-
浏览量:7671次2020-03-18 10:41:44
-
浏览量:3378次2024-03-29 10:57:19
-
浏览量:4086次2020-08-10 19:14:51
-
浏览量:5092次2020-07-30 14:53:44
-
浏览量:22479次2020-08-25 11:16:34
-
浏览量:2511次2020-08-30 00:47:44
-
浏览量:4179次2024-03-29 11:08:20
-
浏览量:5617次2020-08-30 12:27:19
-
浏览量:7076次2020-08-29 21:41:37
-
广告/SPAM
-
恶意灌水
-
违规内容
-
文不对题
-
重复发帖
Sunshine
微信支付举报类型
- 内容涉黄/赌/毒
- 内容侵权/抄袭
- 政治相关
- 涉嫌广告
- 侮辱谩骂
- 其他
详细说明

微信扫码分享
QQ好友