1. RK3588 SDK定制化开发入门第一次拿到RK3588 SDK的时候我对着那一堆配置文件完全摸不着头脑。作为一款性能强劲的ARM64处理器RK3588在嵌入式领域应用广泛但原厂SDK的配置选项都是针对官方开发板的我们需要为自己的定制开发板创建专属配置。这套SDK的核心是build.sh脚本它封装了整个编译流程。执行./build.sh lunch会列出所有可用的默认配置但这些配置都是针对瑞芯微官方评估板的。直接修改这些默认配置不是个好主意因为后续SDK升级时很容易产生冲突。更好的做法是创建自己的配置。2. 创建自定义板级配置2.1 理解SDK配置机制RK3588 SDK采用了一种巧妙的hook机制来管理配置。当执行./build.sh lunch时实际是通过device/rockchip/common/build-hooks目录下的脚本实现的。核心逻辑在mk-config.sh中它会扫描.chip目录下的所有_defconfig文件。.chip目录实际上是个符号链接指向.chips/rk3588。这个目录下存放着各种配置文件包括设备树相关的its文件和参数配置文件。我们重点关注那些以_defconfig结尾的文件。2.2 添加自定义配置创建一个新的配置其实很简单。以我最近做的一个AIoT项目为例cd device/rockchip/.chips/rk3588 cp rockchip_rk3588_evb7_v11_defconfig rockchip_rk3588_aiot_v10_defconfig然后编辑这个新文件主要修改RK_KERNEL_DTS_NAME参数RK_KERNEL_DTS_NAMErk3588-aiot-v10-linux RK_USE_FIT_IMGy保存后再次运行./build.sh lunch就能看到新增的配置选项了。这种方式完全独立于原厂配置后续SDK升级时也不会受影响。3. 内核设备树定制3.1 设备树基础设备树(DTS)是ARM Linux内核的重要配置机制。RK3588的设备树文件存放在kernel/arch/arm64/boot/dts/rockchip/目录下。一个典型的设备树文件结构如下#include rk3588-evb7-v11.dtsi #include rk3588-evb7-v11-imx415.dtsi #include rk3588-linux.dtsi / { model Rockchip RK3588 EVB7 V11 Board; compatible rockchip,rk3588-evb7-v11, rockchip,rk3588; };3.2 创建自定义设备树基于现有配置创建自定义设备树是最稳妥的方式cd kernel/arch/arm64/boot/dts/rockchip cp rk3588-evb7-v11.dtsi rk3588-aiot-v10.dtsi cp rk3588-evb7-v11-imx415.dtsi rk3588-aiot-v10-imx415.dtsi cp rk3588-evb7-v11-linux.dts rk3588-aiot-v10-linux.dts然后修改主设备树文件#include rk3588-aiot-v10.dtsi #include rk3588-aiot-v10-imx415.dtsi #include rk3588-linux.dtsi / { model RK3588 AIoT Board V1.0; compatible rockchip,rk3588-aiot-v10, rockchip,rk3588; };4. Debian根文件系统配置4.1 启用Debian支持默认情况下SDK使用Buildroot构建根文件系统。要切换到Debian需要在defconfig中添加RK_ROOTFS_SYSTEM_DEBIANy这个选项会触发SDK使用live-build工具来构建Debian系统。需要注意的是不同版本的SDK支持的Debian版本可能不同常见的有buster、bullseye和bookworm。4.2 解决live-build版本问题编译时可能会遇到live-build版本不兼容的问题。错误信息通常如下Your live-build doesnt support bookworm Please replace it: sudo apt-get remove live-build git clone https://salsa.debian.org/live-team/live-build.git --depth 1 -b debian/1%20230131 cd live-build rm -rf manpages/po/ sudo make install -j8如果网络环境受限可以直接下载deb包安装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 -y4.3 配置Debian源为了提高下载速度建议修改为国内镜像源。在defconfig中添加RK_DEBIAN_MIRRORmirrors.tuna.tsinghua.edu.cn5. 完整编译流程5.1 编译命令配置完成后执行完整编译./build.sh lunch # 选择自定义配置 ./build.sh all第一次编译会比较耗时因为需要下载大量软件包。编译完成后生成的固件位于output/update/update.img。5.2 编译输出解析编译完成后会输出详细的配置信息以下是一些关键参数参数说明RK_DEFCONFIG使用的defconfig文件RK_KERNEL_DTS内核设备树文件RK_ROOTFS_SYSTEM根文件系统类型RK_DEBIAN_VERSIONDebian版本RK_DEBIAN_MIRRORDebian镜像源6. 常见问题排查6.1 内核编译失败如果内核编译失败首先检查设备树文件路径是否正确依赖的头文件是否存在内核配置是否完整可以尝试单独编译内核./build.sh kernel6.2 Debian根文件系统构建失败常见原因包括live-build版本不匹配网络问题导致软件包下载失败磁盘空间不足可以查看output/logs/目录下的日志文件定位问题。6.3 固件烧录后无法启动检查以下方面设备树是否正确编译进内核启动参数是否配置正确存储设备分区表是否正确7. 进阶配置技巧7.1 添加自定义软件包在device/rockchip/common/overlay-debian/目录下创建packages.list文件列出需要额外安装的软件包。7.2 系统服务配置自定义服务可以放在device/rockchip/common/overlay-debian/etc/systemd/system/目录下。7.3 内核模块配置如果需要额外的内核模块可以在defconfig中添加RK_KERNEL_MODULESmodule1 module28. 性能优化建议8.1 编译加速使用ccache可以显著加快二次编译速度sudo apt install ccache export USE_CCACHE18.2 根文件系统优化在defconfig中添加以下选项可以优化Debian系统RK_ROOTFS_STRIP_MODULESy # 精简内核模块 RK_ROOTFS_FSTRIMy # 启用定期trim RK_ROOTFS_EXT4y # 使用ext4文件系统8.3 内核配置优化根据实际需求裁剪内核功能可以减小镜像体积./build.sh menuconfig9. 实际项目经验分享在最近的一个工业控制器项目中我们基于RK3588开发了定制系统。遇到最棘手的问题是USB3.0接口的稳定性问题。通过分析设备树发现需要调整PHY参数usbdrd_dwc3 { dr_mode host; snps,dis_u2_susphy_quirk; snps,dis_enblslpm_quirk; snps,usb3_lpm_capable; };另一个经验是关于Debian软件源的选择。初期使用官方源经常遇到下载超时后来切换到国内镜像后构建成功率大幅提升。同时我们发现bookworm版本对RK3588的新特性支持更好但软件包体积较大最终根据项目需求选择了折中方案。