从零开始:在RK3568开发板上手把手搭建Linux驱动开发环境(含完整SDK编译与镜像烧录流程)
1. 环境准备与工具链配置
对于嵌入式Linux开发而言,正确的工具链配置是成功的第一步。RK3568作为瑞芯微推出的高性能处理器,其开发环境搭建需要特别注意工具链的兼容性。
推荐开发主机配置:
- Ubuntu 20.04 LTS或更新版本(物理机或虚拟机)
- 至少16GB内存(32GB更佳)
- 100GB以上可用磁盘空间
- 稳定的网络连接
必要工具安装清单:
sudo apt update sudo apt install -y git make gcc g++ bison flex libssl-dev \ libncurses-dev device-tree-compiler lzop u-boot-tools \ gcc-aarch64-linux-gnu g++-aarch64-linux-gnuRK3568专用工具链配置:
- 从官方获取工具链(如
gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu.tar.xz) - 解压并设置环境变量:
tar xvf gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu.tar.xz export PATH=$PATH:/path/to/toolchain/bin export CROSS_COMPILE=aarch64-none-linux-gnu-注意:不同版本的SDK可能需要特定版本的工具链,务必参考官方文档确认兼容性。
2. SDK获取与初始化
RK3568的Linux SDK包含U-Boot、Kernel和Buildroot三大核心组件,其获取和初始化有特定流程。
SDK仓库克隆:
git clone --recursive https://github.com/rockchip-linux/rk3568_linux_sdk.git cd rk3568_linux_sdkSDK目录结构关键说明:
| 目录 | 内容描述 |
|---|---|
u-boot/ | U-Boot引导加载程序源码 |
kernel/ | Linux内核源码(含Rockchip补丁) |
buildroot/ | 根文件系统构建工具 |
device/ | 板级配置文件 |
docs/ | 开发文档和技术参考 |
初始化环境变量:
source build/envsetup.sh lunch rk3568_defconfig常见问题解决方案:
- 问题:
build/envsetup.sh: No such file or directory解决:确认当前在SDK根目录执行 - 问题:
lunch命令无响应解决:检查.repo目录完整性,尝试repo sync
3. 全系统编译流程详解
完整的系统构建包含多个组件的协同编译,每个阶段都有其特定的配置要点。
3.1 U-Boot编译与配置
标准编译流程:
./build.sh uboot关键配置选项:
- DDR初始化:
CONFIG_ROCKCHIP_RK3568必须启用 - 存储设备支持:根据实际硬件选择
CONFIG_ROCKCHIP_SDHCI或CONFIG_ROCKCHIP_DWMMC - 调试接口:确保
CONFIG_DEBUG_UART正确配置串口
生成的关键镜像:
u-boot/uboot.img:主引导镜像u-boot/rk356x_spl_loader_v1.*.bin:二级加载器
3.2 Linux内核定制化编译
内核配置建议:
cd kernel make ARCH=arm64 rockchip_linux_defconfig make ARCH=arm64 menuconfig必须启用的驱动模块:
- CPU相关:
CONFIG_ARM64_CPU_PARK - GPU驱动:
CONFIG_DRM_PANFROST - 视频编解码:
CONFIG_VIDEO_ROCKCHIP_VDEC
生成FIT格式镜像:
../device/rockchip/common/mk-fitimage.sh kernel/boot.img device/rockchip/rk356x/boot.its3.3 Buildroot根文件系统构建
基础配置命令:
./build.sh buildroot自定义软件包添加:
- 编辑
buildroot/package/Config.in添加新条目 - 创建对应的
package/<name>/Config.in和<name>.mk - 重新运行
make menuconfig选择新增包
常见依赖问题解决:
# 当出现libmpfr.so.4缺失时 sudo ln -s /usr/lib/x86_64-linux-gnu/libmpfr.so.6 /usr/lib/x86_64-linux-gnu/libmpfr.so.44. 镜像烧录实战指南
4.1 Windows平台烧录(RKDevTool)
详细操作步骤:
开发板进入Maskrom模式:
- 按住UPDATE按键
- 连接USB OTG接口
- 上电或复位
RKDevTool配置要点:
- Loader地址:必须保持0x0
- Parameter配置:根据实际存储设备调整分区表
- 烧录模式选择:开发阶段建议使用
Loader模式
分区表parameter.txt示例:
FIRMWARE_VER: 1.0 MACHINE_MODEL: RK3568 MACHINE_ID: 007 MANUFACTURER: RK3568 MAGIC: 0x5041524B ATAG: 0x00200800 MACHINE: 3568 CHECK_MASK: 0x80 TYPE: GPT CMDLINE: mtdparts=rk29xxnand:0x00002000@0x00004000(uboot),0x00002000@0x00006000(misc),0x00010000@0x00008000(boot),0x00010000@0x00018000(recovery),0x00010000@0x00028000(backup),0x00040000@0x00038000(rootfs),0x00002000@0x00078000(oem),-@0x0007A000(userdata)4.2 Linux平台烧录(Linux_Upgrade_Tool)
命令行烧录流程:
sudo ./rkflash.sh all各镜像文件作用说明:
| 镜像文件 | 对应分区 | 功能描述 |
|---|---|---|
| MiniLoaderAll.bin | Loader | 初级引导加载程序 |
| uboot.img | uboot | 完整U-Boot镜像 |
| boot.img | boot | 内核与设备树打包 |
| rootfs.img | rootfs | 根文件系统镜像 |
| userdata.img | userdata | 用户数据分区 |
5. 驱动开发环境验证
5.1 基础驱动测试(LED控制)
设备树节点添加示例:
rk3568_led { compatible = "atkrk3568-led"; status = "okay"; reg = <0x0 0xFDC20010 0x0 0x08 /* PMU_GRF_GPIO0C_IOMUX_L */ 0x0 0xFDC20090 0x0 0x08 /* PMU_GRF_GPIO0C_DS_0 */ 0x0 0xFDD60004 0x0 0x08 /* GPIO0_SWPORT_DR_H */ 0x0 0xFDD6000C 0x0 0x08>; /* GPIO0_SWPORT_DDR_H */ };驱动加载与测试:
# 编译驱动 make ARCH=arm64 -C /path/to/kernel M=$PWD modules # 加载测试 insmod newchrled.ko ./ledApp /dev/newchrled 1 # 点亮LED ./ledApp /dev/newchrled 0 # 关闭LED5.2 进阶调试技巧
内核日志查看:
dmesg -wHU-Boot环境变量操作:
# 进入U-Boot命令行后 printenv # 查看当前环境变量 setenv bootdelay 5 # 设置启动延时 saveenv # 保存配置网络调试配置:
# 开发板网络设置 ifconfig eth0 192.168.1.100 netmask 255.255.255.0 route add default gw 192.168.1.1 # 主机端NFS挂载 mount -t nfs 192.168.1.1:/path/to/nfs /mnt