1. RK平台概述:芯片家族、SDK架构与开发环境
大家好,欢迎来到这门实战课程。我是你们的老朋友,一个在嵌入式底层摸爬滚打了十几年的驱动工程师。今天咱们正式开篇,聊聊瑞芯微RK平台的那些事儿。
说实话,我第一次接触RK平台是在2014年,当时RK3288刚出来,我拿着公版原理图对着SDK发愣。那时候文档少,全靠自己啃代码。现在好多了,生态成熟了不少。但不管怎么变,搞懂平台的全貌,永远是第一步。
1.1 RK芯片家族:从入门到旗舰
瑞芯微的芯片线,说白了就是一条从低功耗MCU到高性能AI SoC的完整链路。我个人习惯把它们分成三大类:
| 系列 | 代表型号 | 核心特点 | 典型场景 |
|---|---|---|---|
| 入门级 | RK3308、RK3326 | Cortex-A35/A53,低功耗,无GPU或简单GPU | 智能音箱、IoT网关、简单HMI |
| 主流级 | RK3568、RK3588 | Cortex-A55/A76,Mali-G52/G610,6TOPS NPU | 工业平板、边缘计算盒、NVR、智能座舱 |
| 旗舰级 | RK3588S、RK3576 | 4*A76+4*A55,Mali-G610 MC4,6-8K视频编解码 | 高端AI盒子、AR/VR、多屏互动 |
嗯,这里要注意一点。RK3588和RK3588S,别看名字像,封装和部分外设是有差异的。我在项目中就踩过这个坑——画完板子才发现S版本少了PCIE3.0控制器,只能降级用。所以选型时一定要去官网查最新的Datasheet差异表。
1.2 RK SDK架构解析:别被目录吓到
第一次解压RK SDK,你可能会懵。动辄几十个G,目录层级深得像迷宫。其实它的骨架很清晰,我画了张图帮你理一理:
核心观点:RK SDK = 芯片厂商BSP + 第三方组件 + 构建系统。你只需要关注其中20%的目录,就能搞定80%的驱动开发工作。
你看,核心就四个目录:kernel(驱动主体)、u-boot(引导与板级初始化)、external(第三方库与硬件加速组件)、device(板级配置与编译脚本)。
我建议你拿到SDK后,先别急着编译。花半小时把device/rockchip/下的BoardConfig.mk和u-boot/dts/下的rk3588-evb.dts翻一遍。这能帮你快速理解这块板子用了哪些外设、挂在了哪个总线、中断和GPIO是怎么分配的。
小技巧:RK SDK的kernel目录下有个scripts/子目录,里面有个checkpatch.pl脚本。提交代码前跑一遍,能省去不少review时的尴尬。我刚开始写RK驱动时,就被这个脚本教育过好几次。
1.3 开发板选型:别盲目跟风
选开发板这事儿,说白了得看你的项目阶段和预算。我列个对比表,你对着自己的需求挑:
| 开发板型号 | SoC | 内存 | 关键接口 | 适合场景 |
|---|---|---|---|---|
| RK3568 EVB | RK3568 | 2/4GB LPDDR4 | 2x千兆网、PCIE3.0、SATA3.0、MIPI DSI/CSI | 工业控制、边缘计算原型验证 |
| RK3588 EVB | RK3588 | 8/16GB LPDDR4X | PCIE3.0x4、双HDMI2.1、USB3.0、M.2 | 高性能AI盒子、多屏互动、NVR |
| Firefly ROC-RK3588S-PC | RK3588S | 4/8GB LPDDR4X | HDMI2.1、MIPI CSI、PCIE2.1、eDP | 个人学习、轻量级原型、成本敏感项目 |
| Orange Pi 5 | RK3588S | 4/8/16GB LPDDR4X | HDMI2.1、M.2 NVMe、USB3.0、40pin GPIO | 极客开发、社区资源丰富、性价比高 |
嗯,这里有个坑我得提醒你。如果你要做PCIE3.0或者双千兆网口的开发,千万别选RK3588S的板子。S版本砍掉了PCIE3.0控制器和第二个GMAC。我有个朋友就因为这个,项目延期了两周。
1.4 环境搭建:一步到位
环境搭建这事儿,说简单也简单,说复杂也复杂。我推荐用Ubuntu 20.04 LTS或者22.04 LTS,64位系统。别用Windows WSL,坑太多。
下面是标准流程,我一步步说:
- 安装基础依赖
sudo apt update sudo apt install git ssh make gcc g++ libncurses5-dev \ libssl-dev bc bison flex libelf-dev gnupg \ python3 python3-pip python3-dev \ device-tree-compiler cpio rsync - 安装交叉编译工具链
RK官方推荐使用gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu。别用太新或太旧的版本,我试过gcc12编译kernel会报一堆警告。
wget https://developer.arm.com/-/media/Files/downloads/gnu-a/10.3-2021.07/binrel/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu.tar.xz sudo tar -xf gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu.tar.xz -C /opt/ export PATH=/opt/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin:$PATH - 获取SDK
RK的SDK通常通过repo管理。以RK3588为例:
mkdir rk3588_sdk && cd rk3588_sdk repo init -u https://github.com/rockchip-linux/manifests -b master repo sync -j8这个过程比较慢,建议晚上挂着。我第一次同步花了将近两个小时。
- 验证环境
编译一个最小的u-boot试试:
cd u-boot make rk3588_defconfig make CROSS_COMPILE=aarch64-none-linux-gnu- -j$(nproc)如果不出错,终端会生成
u-boot-rockchip.bin。看到这个文件,说明环境基本没问题了。
注意:千万不要在root用户下编译SDK!RK的编译脚本有些地方会检查用户权限,root下会报奇怪的错误。我曾经因为这个折腾了一下午,最后发现是权限问题。
1.5 我的个人工作流
最后分享一个我自己的习惯。我会在~/rk_workspace/下建三个目录:
- sdk/ —— 放官方SDK,只同步不修改
- project/ —— 放自己的项目代码,通过软链接引用SDK中的kernel和u-boot
- tools/ —— 放烧录工具、串口工具、分析脚本
这样做的好处是,SDK可以随时更新,不会影响你的项目代码。而且多个项目可以共用同一个SDK,节省磁盘空间。