2. Rockchip 平台介绍:SoC 家族与 BSP 结构

做嵌入式 Linux 这么多年,Rockchip 的芯片我接触得算比较多的。从早期的 RK3288 到现在的 RK3588,这一路走来,Rockchip 在多媒体和 AI 边缘计算领域的积累确实扎实。今天咱们就聊聊 Rockchip 的 SoC 家族、典型应用场景,还有它的官方 BSP 结构。

2.1 Rockchip SoC 家族概览

Rockchip 的产品线其实很清晰。我个人习惯把它们分成三大类:

  • 入门级:RK3326、RK3308,主打低功耗和语音场景
  • 中高端:RK3568、RK3566,平衡性能与功耗,工业级应用首选
  • 旗舰级:RK3588、RK3588S,8K 视频、多屏异显、AI 算力拉满

咱们课程主要围绕 RK3568 和 RK3588 展开,因为这两款芯片在 Yocto 集成场景中最具代表性。

2.2 核心芯片特性对比

先看一张对比表,这样更直观。我在项目里经常拿这张表跟客户对需求,省事不少。

特性 RK3568 RK3588
CPU 4×Cortex-A55 4×Cortex-A76 + 4×Cortex-A55
GPU Mali-G52 EE Mali-G610 MP4
NPU 1 TOPS 6 TOPS
视频编解码 4K@60fps H.264/H.265 8K@30fps H.265 / 4K@120fps
显示接口 HDMI 2.0, eDP, LVDS, MIPI DSI HDMI 2.1, DP 1.4, eDP, MIPI DSI ×2
PCIe PCIe 3.0 ×2 PCIe 3.0 ×4 + PCIe 2.0 ×1
典型功耗 5~8W 10~15W

我的经验:RK3568 的 1 TOPS NPU 虽然不高,但跑轻量级人脸检测或手势识别完全够用。RK3588 的 6 TOPS 则可以跑 YOLOv5s 这样的模型,帧率还不错。

2.3 典型应用场景

说白了,选哪颗芯片,看你的产品定位。我列几个实际落地的场景:

  • RK3568 场景:
    • 工业平板 / 人机交互界面
    • 边缘计算网关(带 4G/5G 模块)
    • 智能门禁 / 人脸识别终端
    • 车载中控(非仪表盘)
  • RK3588 场景:
    • 智能会议白板 / 视频会议终端
    • 8K 高清播放器 / 数字标牌
    • AI 边缘服务器 / 智能安防 NVR
    • 多屏异显广告机(最多 4 屏)

嗯,这里要注意一点:RK3588 的散热设计一定要做好。我之前有个项目,客户为了省成本没用散热片,结果 NPU 跑 10 分钟就降频了。你想想看,6 TOPS 的算力打五折,那还不如用 RK3568 呢。

2.4 官方 BSP 结构解析

Rockchip 的官方 BSP 是基于 Linux 内核 + U-Boot + Buildroot 的。但咱们要用 Yocto 来集成,所以得先搞清楚它的源码仓库结构。官方 BSP 主要包含这几个部分:

rk3588-linux/
├── kernel/                 # Linux 内核(5.10 / 6.1 LTS)
│   ├── arch/arm64/boot/dts/rockchip/   # 设备树
│   └── drivers/            # Rockchip 自有驱动
├── u-boot/                 # U-Boot 引导程序
├── rkbin/                  # 闭源二进制(ATF、DDR 初始化、M0 固件)
├── buildroot/              # 官方默认构建系统
├── external/               # 第三方库与工具
│   ├── rknpu/              # NPU 驱动与工具链
│   ├── rkmpp/              # 多媒体处理库
│   └── rkisp/              # 图像信号处理
└── docs/                   # 文档与参考手册

关键点:rkbin/ 目录下的闭源二进制是 Rockchip 平台绕不开的坎。ATF(ARM Trusted Firmware)、DDR 初始化代码、M0 协处理器固件都是二进制形式提供的。Yocto 集成时,我们需要通过 SRC_URI 把这些二进制包拉进来,再通过 do_deploy 放到正确位置。

2.5 启动流程与镜像分区

Rockchip 的启动流程跟其他 ARM 平台不太一样。我画了一张图,帮你理清整个链条:

Rockchip RK3588 启动流程 BootROM DDR 初始化 U-Boot SPL ATF (BL31) U-Boot Proper Linux Kernel 根文件系统 闭源二进制 存放在 rkbin/ Yocto 需单独 集成部署

启动流程大致是这样的:

  1. BootROM:芯片上电后,BootROM 从存储介质(eMMC/SD/NAND)读取引导代码
  2. DDR 初始化:rkbin 里的 DDR 二进制负责初始化内存控制器
  3. U-Boot SPL:加载 ATF 和 U-Boot Proper
  4. ATF (BL31):提供 PSCI 电源管理、安全监控调用
  5. U-Boot Proper:加载设备树、内核、ramdisk
  6. Linux Kernel:启动内核,挂载根文件系统

避坑指南:我曾经在 RK3568 上踩过一个坑——U-Boot SPL 和 ATF 的版本必须严格匹配。如果你从 rkbin 拉下来的 ATF 是 v2.6,但 U-Boot 是较老的版本,启动时会卡在 DDR 初始化阶段,串口输出只有一行乱码。嗯,排查起来很痛苦。

2.6 镜像分区布局

Rockchip 的存储分区是固定的。以 eMMC 为例,典型布局如下:

分区 起始扇区 大小 内容
MBR 0 1 扇区 主引导记录
IDB 64 8 MB BootROM 引导块(含 DDR 初始化)
UBOOT 16384 8 MB U-Boot SPL + Proper
MISC 32768 4 MB 系统恢复/升级标识
DTB 40960 4 MB 设备树 blob
BOOT 49152 128 MB 内核 + ramdisk
ROOTFS 311296 剩余空间 根文件系统(ext4)

我的习惯:在 Yocto 的 wic 镜像配方里,我会直接用 part 命令按这个布局生成镜像。这样烧录时直接用 dd 写进 eMMC 就行,省去手动分区和烧录的麻烦。

2.7 小结