从零到一:基于RK3568的Linux 5.10内核移植与驱动适配实战指南

张开发
2026/5/30 3:50:32 15 分钟阅读
从零到一:基于RK3568的Linux 5.10内核移植与驱动适配实战指南
从零到一基于RK3568的Linux 5.10内核移植与驱动适配实战指南RK3568作为Rockchip新一代中端嵌入式芯片凭借四核Cortex-A55架构和丰富的外设接口在工业控制、智能安防、边缘计算等领域快速普及。本文将带您完成从开发环境搭建到驱动适配的全流程实战重点解决三个典型问题如何基于官方BSP快速构建可启动系统如何通过设备树精准描述硬件拓扑如何验证V4L2摄像头与I2C传感器的协同工作1. 开发环境构建与BSP准备1.1 主机系统配置推荐使用Ubuntu 22.04 LTS作为开发主机其软件包版本与RK3568官方工具链兼容性最佳。以下是最小化依赖集合sudo apt update sudo apt install -y git make gcc flex bison dtc libssl-dev \ ncurses-dev parted dosfstools mkbootimg u-boot-tools device-tree-compiler \ python3-pip python3-setuptools对于交叉编译工具链Rockchip官方提供的gcc-11.3版本针对RK3568的ARMv8-A架构做了特定优化。安装后需验证工具链有效性aarch64-linux-gnu-gcc -v # 应显示类似输出 # gcc version 11.3.1 20220712 (Linaro GCC 11.3-2022.02)1.2 BSP源码获取Rockchip通过GitHub维护了完整的BSP仓库建议按以下结构组织工程目录rk3568_project/ ├── linux/ # 内核源码linux-5.10-gen-rkr4分支 ├── u-boot/ # Bootloader源码 └── rkbin/ # 官方预编译固件获取源码时需特别注意分支匹配git clone -b linux-5.10-gen-rkr4 https://github.com/rockchip-linux/linux.git git clone -b master https://github.com/rockchip-linux/u-boot.git2. U-Boot引导系统定制2.1 编译配置RK3568的U-Boot已预置多种开发板配置以EVB1开发板为例cd u-boot make ARCHarm64 CROSS_COMPILEaarch64-linux-gnu- rk3568-evb1-ddr4-1008mhz_defconfig关键配置项可通过menuconfig调整Boot options设置默认启动设备SD卡/eMMCSerial console启用UART2作为调试串口波特率1152002.2 镜像生成编译完成后需要组合生成Rockchip专用启动镜像make ARCHarm64 CROSS_COMPILEaarch64-linux-gnu- -j$(nproc) cd ../rkbin ./tools/mkimage -n rk3568 -T rksd -d bin/rk3568_ddr4_1008MHz_v1.16.bin:bin/rk3568_miniloader_v1.28.bin ../u-boot/idbloader.img生成的启动镜像包含两个关键文件文件类型作用烧录偏移地址idbloader.img初始化DDR和最小化引导程序64KBu-boot.itb完整U-Boot镜像含设备树16384KB3. Linux内核深度适配3.1 设备树核心修改设备树文件位于arch/arm64/boot/dts/rockchip/典型修改包括HDMI输出配置hdmi { status okay; rockchip,phy-table hdmi_phy; #sound-dai-cells 0; }; hdmi_sound { status okay; };I2C传感器节点以SHT30为例i2c1 { sht30: sht3044 { compatible sensirion,sht30; reg 0x44; interrupts RK_PA0 IRQ_TYPE_LEVEL_HIGH; }; };V4L2摄像头节点OV5640示例i2c2 { ov5640: camera3c { compatible ovti,ov5640; reg 0x3c; clocks cru CLK_CAM0_OUT; pinctrl-names default; pinctrl-0 cam0_clk; port { ov5640_ep: endpoint { >make ARCHarm64 CROSS_COMPILEaarch64-linux-gnu- Image -j$(nproc) make ARCHarm64 CROSS_COMPILEaarch64-linux-gnu- dtbs -j4 make ARCHarm64 CROSS_COMPILEaarch64-linux-gnu- modules -j$(nproc)4. 根文件系统与烧录验证4.1 Buildroot定制配置在Buildroot配置中需要特别注意Target packages添加v4l2-utils、i2c-tools等调试工具Filesystem overlay预置设备节点如/dev/video0Kernel modules自动加载摄像头和传感器驱动典型编译过程make menuconfig make savedefconfig make -j$(nproc)4.2 烧录与调试技巧使用dd命令烧录时建议先测试写入速度time dd if/dev/zero of${SD_DEVICE} bs1M count100烧录完成后可通过以下命令验证驱动V4L2摄像头v4l2-ctl --list-devices v4l2-ctl --set-fmt-videowidth1920,height1080,pixelformatYUYVI2C传感器i2cdetect -y 1 echo sht30 0x44 /sys/bus/i2c/devices/i2c-1/new_deviceHDMI输出modetest -M rockchip -s 1920x1080605. 典型问题解决方案5.1 启动故障排查流程graph TD A[无串口输出] -- B[检查U-Boot烧录偏移] B --|正常| C[验证设备树兼容性] B --|异常| D[重新生成idbloader] C -- E[核对内存型号参数]5.2 驱动加载异常处理现象dmesg显示probe failed错误检查设备树compatible字段与驱动匹配验证时钟和电源域配置测量物理接口电平I2C应满足3.3VV4L2常见错误link frequency mismatch调整设备树link-frequenciesno frame sync检查摄像头MIPI线序在实际项目中曾遇到OV5640图像偏色问题最终发现是设备树中data-lanes顺序与硬件布线不符。通过示波器抓取MIPI信号后将data-lanes从1 2改为2 1后问题解决。

更多文章