给RK3588 SDK加‘新菜单’:手把手教你添加自定义主板配置到./build lunch选项
为RK3588 SDK定制专属菜单嵌入式开发者的配置扩展实战当拿到瑞芯微官方SDK时面对琳琅满目的开发板配置选项如何在不干扰原有配置的前提下优雅地添加自己的定制主板选项这就像在餐厅点餐时既想保留经典菜品又想加入自己的特色定制。本文将带你深入RK3588 SDK的配置系统从零构建专属菜单项。1. 理解SDK的菜单架构RK3588的Linux SDK采用了一套巧妙的配置管理系统其核心思想是将硬件配置与编译流程解耦。这套系统的工作机制可以类比为餐厅的点单流程菜单目录.chips/rk3588目录相当于菜单本存放所有_defconfig文件点单系统build.sh脚本中的hook机制如同服务员负责接收和处理用户选择厨房后台mk-config.sh等脚本则是厨师根据点单准备对应的菜品编译配置查看设备树目录结构时你会发现典型的Rockchip风格组织方式device/rockchip/ ├── .chip - .chips/rk3588 ├── .chips │ └── rk3588 │ ├── rockchip_rk3588_evb7_v11_defconfig │ └── ... └── common └── build-hooks这种设计实现了配置的模块化管理开发者可以像在菜单中添加新菜品一样安全地扩展自己的配置选项。2. 创建自定义主板配置2.1 基础配置克隆添加新配置最安全的方式是基于现有配置进行克隆修改。以EVB7开发板配置为例cd device/rockchip/.chips/rk3588 cp rockchip_rk3588_evb7_v11_defconfig rockchip_rk3588_myboard_v10_defconfig然后编辑新创建的配置文件关键参数说明参数说明示例值RK_KERNEL_DTS_NAME指定内核设备树名称myboard-v10-linuxRK_USE_FIT_IMG是否使用FIT镜像格式yRK_ROOTFS_SYSTEM根文件系统类型debian一个典型的自定义配置内容RK_KERNEL_DTS_NAMEmyboard-v10-linux RK_USE_FIT_IMGy RK_ROOTFS_SYSTEM_DEBIANy2.2 设备树适配设备树文件是硬件配置的核心需要与defconfig中的RK_KERNEL_DTS_NAME对应。创建自定义设备树的推荐步骤复制参考开发板的dts文件cd kernel/arch/arm64/boot/dts/rockchip cp rk3588-evb7-v11-linux.dts myboard-v10-linux.dts cp rk3588-evb7-v11.dtsi myboard-v10.dtsi修改主设备树文件内容#include myboard-v10.dtsi #include rk3588-linux.dtsi / { model My Custom RK3588 Board; compatible rockchip,myboard-v10, rockchip,rk3588; /* 添加自定义硬件节点 */ my_custom_device { compatible my-custom-device; status okay; }; };提示设备树修改后建议先用dtc命令验证语法dtc -I dts -O dtb -o test.dtb myboard-v10-linux.dts3. Debian根文件系统定制切换到Debian系统需要特别注意软件包兼容性。以下是关键配置项RK_ROOTFS_SYSTEM_DEBIANy RK_DEBIAN_VERSIONbookworm RK_DEBIAN_MIRRORmirrors.ustc.edu.cn常见问题解决方案live-build版本问题wget https://ftp.debian.org/debian/pool/main/l/live-build/live-build_20230502_all.deb sudo dpkg -i live-build_20230502_all.deb || sudo apt-get -f install -y软件源配置 在device/rockchip/common/scripts/mk-rootfs.sh中可以修改默认源DEBIAN_MIRROR${RK_DEBIAN_MIRROR:-mirrors.ustc.edu.cn}自定义软件包 创建overlay/usr/local/sbin/custom-setup脚本用于在根文件系统构建后执行自定义操作#!/bin/bash apt-get update apt-get install -y my-custom-package systemctl enable my-service4. 编译验证与调试完整的编译流程验证./build.sh lunch # 选择自定义配置 ./build.sh all编译过程中需要关注的关键输出内核配置验证grep CONFIG_ output/linux/.config | grep MY_CUSTOM_CONFIG设备树包含检查fdtdump output/linux/arch/arm64/boot/dts/rockchip/myboard-v10-linux.dtb | less根文件系统验证sudo mount -o loop output/debian/rootfs.img /mnt ls /mnt/usr/local/my-custom-files常见错误处理设备树编译错误make dtbs -j$(nproc) 21 | grep -i error内核模块缺失 在kernel/.config中确保相关模块已启用CONFIG_MY_CUSTOM_DRIVERmDebian包依赖问题 在overlay/etc/apt/sources.list中调整源配置deb https://mirrors.ustc.edu.cn/debian/ bookworm main contrib non-free5. 工程实践建议5.1 版本控制策略建议的.gitignore配置output/ *.img *.dtb !overlay/5.2 多板卡支持架构对于需要支持多种定制主板的情况可以采用以下目录结构device/rockchip/.chips/ ├── rk3588 │ ├── rockchip_rk3588_board1_defconfig │ └── rockchip_rk3588_board2_defconfig └── rk3588s └── rockchip_rk3588s_board3_defconfig5.3 自动化测试集成在build.sh中添加自定义测试阶段add_build_hook() { case $1 in post-build) run_custom_tests ;; esac }测试脚本示例scripts/run_custom_tests.sh#!/bin/bash # 验证内核配置 check_kernel_config() { grep -q CONFIG_MY_FEATUREy ${RK_KERNEL_OUTPUT}/.config || { echo Kernel config check failed return 1 } } # 运行单元测试 run_unit_tests() { (cd ${RK_PROJECT_PATH}/tests make test) }通过这种系统化的配置管理方法开发者可以像在高级餐厅点餐一样灵活选择所需的功能配置同时保持整个SDK的整洁和可维护性。