第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内核源码获取与分支选择
源码从哪来?官方推荐两个渠道:
- Rockchip官方GitHub:
https://github.com/rockchip-linux/kernel。分支命名如rk3588/linux-5.10.y、rk3568/linux-5.10.y。这是最稳定的基线,我建议新手从这里开始。 - 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平台采用多级引导机制,我画了张图帮你理解:
流程拆解一下:
- BootROM:芯片内部固件,上电后从启动介质(SD卡、eMMC、SPI Flash)读取SPL。这段代码是固化的,你改不了。
- SPL(Secondary Program Loader):初始化DDR控制器、时钟、串口。我曾在SPL阶段踩过坑——DDR频率配置不对,导致U-Boot加载时随机死机。后来发现是时序参数抄错了。
- TPL(Tertiary Program Loader):可选阶段,专门做DDR训练。RK3588的DDR5需要训练,RK3568的DDR4一般不需要。
- U-Boot:加载设备树(.dtb)和内核镜像(Image/Image.gz),解析启动参数。这里可以加启动进度条、fastboot等功能。
- Linux Kernel:解压、初始化各子系统、挂载根文件系统。
- Rootfs:启动init进程(systemd或busybox),用户空间正式接管。
避坑指南:我曾经在RK3568上遇到U-Boot无法从eMMC启动的问题。排查了两天,发现是分区表偏移量写错了。记住:Rockchip的启动分区偏移是固定的,SPL在0x4000,U-Boot在0x8000,千万别乱改。