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%的驱动开发工作。

RK SDK 顶层目录结构 RK SDK 根目录 kernel/ u-boot/ external/ device/ drivers/ arch/arm64/ board/ dts/ rknpu/ rga/ rockchip/ common/ 各目录职责速览 • kernel/drivers/ —— 外设驱动源码,你主要修改的地方 • u-boot/board/ —— 板级初始化,DDR、时钟、PMIC配置 • u-boot/dts/ —— 设备树源文件,硬件描述的核心 • external/rknpu/ —— NPU驱动与工具链 • device/rockchip/ —— 板级配置文件、分区表、编译脚本

你看,核心就四个目录: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,坑太多。

下面是标准流程,我一步步说:

  1. 安装基础依赖
    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
  2. 安装交叉编译工具链

    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
  3. 获取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

    这个过程比较慢,建议晚上挂着。我第一次同步花了将近两个小时。

  4. 验证环境

    编译一个最小的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,节省磁盘空间。