第1章 Rockchip平台概述:从芯片选型到启动流程

各位同学,欢迎来到这门实战课。我是你们的老朋友,一个在Rockchip平台上摸爬滚打多年的内核工程师。今天咱们先不急着敲代码,把地基打牢。这一章,我会带你搞清楚RK3588和RK3568到底强在哪、怎么拿到靠谱的内核源码、开发板怎么选,以及上电后芯片是怎么“活”起来的。

1.1 RK3588 / RK3568 芯片架构速览

Rockchip这两款芯片,是目前嵌入式Linux市场的中流砥柱。我个人习惯把它们看作“大核”和“中核”的搭配。

  • RK3588:4×Cortex-A76(2.4GHz)+ 4×Cortex-A55(1.8GHz),主打高性能。内置Mali-G610 MP4 GPU、6TOPS NPU、8K视频编解码。适合边缘AI服务器、高端平板、智能座舱。
  • RK3568:4×Cortex-A55(2.0GHz),主打低功耗与高性价比。内置Mali-G52 GPU、1TOPS NPU、4K视频解码。适合工业控制、智能网关、NAS。

你想想看,选型时最纠结的是什么?不是性能,而是外设接口。RK3588有PCIe 3.0×4、SATA 3.0、双千兆+WiFi6,而RK3568只有PCIe 2.1×1、单千兆。我在项目中遇到过客户把RK3568硬塞进需要多路PCIe NVMe存储的场景,结果只能外挂USB转接,延迟惨不忍睹。

核心差异速查表
特性 RK3588 RK3568
CPU大小核 4×A76 + 4×A55 4×A55
GPU Mali-G610 MP4 Mali-G52
NPU算力 6 TOPS 1 TOPS
视频解码 8K@60fps 4K@60fps
PCIe 3.0×4 / 2.0×4 2.1×1
典型功耗 8-15W 3-6W

1.2 Linux内核源码获取与分支选择

源码从哪来?官方推荐两个渠道:

  1. Rockchip官方GitHub:https://github.com/rockchip-linux/kernel。分支命名如 rk3588/linux-5.10.y、rk3568/linux-5.10.y。这是最稳定的基线,我建议新手从这里开始。
  2. Linux内核主线:https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git。主线对Rockchip的支持逐年完善,但驱动可能滞后。比如RK3588的NPU驱动,主线至今未合入。

分支选择有个小窍门:看BSP版本号。Rockchip每季度发布一次BSP,命名如 rk3588/linux-5.10.y_2024Q1。我一般选最新的季度分支,因为修复了上一季度的关键bug。嗯,这里要注意:不要直接拉master分支,那是开发分支,可能编译不过。

我的习惯:用 git clone --depth=1 -b rk3588/linux-5.10.y_2024Q1 只拉最新commit,省时间。后续需要历史记录再 git fetch --unshallow。

1.3 开发板选型与启动流程

开发板怎么选?我列个清单,你按需求对号入座:

  • RK3588:Firefly ROC-RK3588S-PC(性价比高)、Orange Pi 5(社区活跃)、Rock 5B(接口全)。
  • RK3568:Firefly ROC-RK3566-PC(入门首选)、Radxa Zero 2(超小尺寸)、友善 NanoPi R5C(双网口)。

启动流程,说白了就是芯片上电后怎么找到操作系统。Rockchip平台采用多级引导机制,我画了张图帮你理解:

Rockchip 启动流程(多级引导) BootROM 从SD/eMMC/SPI加载 SPL 初始化DDR、时钟 TPL(可选) DDR训练 U-Boot 加载设备树、内核 Linux Kernel 解压、初始化驱动 Rootfs(init进程启动) 说明:TPL仅在DDR需要训练时存在;SPL直接加载U-Boot是常见配置

流程拆解一下:

  1. BootROM:芯片内部固件,上电后从启动介质(SD卡、eMMC、SPI Flash)读取SPL。这段代码是固化的,你改不了。
  2. SPL(Secondary Program Loader):初始化DDR控制器、时钟、串口。我曾在SPL阶段踩过坑——DDR频率配置不对,导致U-Boot加载时随机死机。后来发现是时序参数抄错了。
  3. TPL(Tertiary Program Loader):可选阶段,专门做DDR训练。RK3588的DDR5需要训练,RK3568的DDR4一般不需要。
  4. U-Boot:加载设备树(.dtb)和内核镜像(Image/Image.gz),解析启动参数。这里可以加启动进度条、fastboot等功能。
  5. Linux Kernel:解压、初始化各子系统、挂载根文件系统。
  6. Rootfs:启动init进程(systemd或busybox),用户空间正式接管。
避坑指南:我曾经在RK3568上遇到U-Boot无法从eMMC启动的问题。排查了两天,发现是分区表偏移量写错了。记住:Rockchip的启动分区偏移是固定的,SPL在0x4000,U-Boot在0x8000,千万别乱改。