1. RK芯片选型与资料获取:RK3588/RK3568等主流芯片对比,官方SDK结构解析,Datasheet与TRM手册查阅技巧
做Rockchip平台的内核移植,第一步不是写代码,而是选芯片、找资料。我见过不少新手,拿到板子就开始编译,结果发现SDK版本不对、手册没下全,折腾一周还在原地打转。这一章,咱们就把这些基础工作捋清楚。
1.1 主流芯片对比:RK3588 vs RK3568 vs RK3399
Rockchip目前最活跃的三条产品线,我按自己的经验排了个优先级:RK3588(旗舰)、RK3568(主流)、RK3399(老将)。先看一张对比表:
| 参数 | RK3588 | RK3568 | RK3399 |
|---|---|---|---|
| CPU | 4×Cortex-A76 + 4×Cortex-A55 | 4×Cortex-A55 | 2×Cortex-A72 + 4×Cortex-A53 |
| GPU | Mali-G610 MP4 | Mali-G52 MP2 | Mali-T860 MP4 |
| NPU | 6 TOPS | 1 TOPS | 无 |
| 内存 | LPDDR4/4X/5,最大32GB | LPDDR4/4X,最大8GB | LPDDR4,最大4GB |
| 显示 | 8K@60fps + 4K@120fps | 4K@60fps | 4K@60fps |
| PCIe | PCIe 3.0 ×4 ×2 | PCIe 3.0 ×1 ×1 | PCIe 2.1 ×4 |
| 典型场景 | AI盒子、边缘服务器、高端平板 | 工控板、NAS、中端平板 | 开发板、老旧产品维护 |
我个人习惯这样选:如果项目需要跑AI推理或8K显示,直接上RK3588,别犹豫。如果只是做工业控制或轻量级Linux设备,RK3568性价比最高。RK3399嘛,除非是维护老项目,否则不建议新开案子——它的内核主线支持已经不太积极了。
1.2 官方SDK结构解析
拿到Rockchip的SDK,第一反应往往是「怎么这么大?」。一个完整的SDK解压后轻松超过10GB,里面包含了U-Boot、内核、Buildroot、Debian镜像、工具链、文档……
我建议你只关注这几个核心目录:
- kernel/ —— 内核源码,设备树文件在
arch/arm64/boot/dts/rockchip/ - u-boot/ —— 引导加载程序,板级配置在
configs/目录 - device/rockchip/ —— 芯片级配置,包括DDR参数、PMIC配置
- buildroot/ —— 根文件系统构建系统
- docs/ —— 官方文档,但说实话,很多已经过时了
来看一个典型的SDK目录树:
rk3588_linux_sdk/
├── kernel/ # Linux内核 (5.10 / 6.1)
│ └── arch/arm64/boot/dts/rockchip/
│ ├── rk3588.dtsi # 芯片级设备树
│ ├── rk3588-evb1.dts # EVB板级设备树
│ └── rk3588s.dtsi # 精简版芯片设备树
├── u-boot/ # U-Boot 2017.09
│ └── configs/
│ ├── rk3588_defconfig
│ └── rk3568_defconfig
├── device/rockchip/
│ ├── rk3588/ # DDR、PMIC、secure 配置
│ └── rk3568/
├── buildroot/ # 构建根文件系统
├── external/ # 第三方库、驱动
└── prebuilts/ # 预编译工具链
1.3 Datasheet与TRM手册查阅技巧
做内核移植,有两份文档你必须会看:Datasheet(数据手册)和TRM(技术参考手册)。
Datasheet比较薄,主要讲芯片的电气特性、封装、引脚定义、功耗参数。做硬件设计时用得更多。TRM才是我们软件工程师的「圣经」——它详细描述了每个寄存器的地址、位域定义、操作时序。
我查阅TRM的习惯是这样的:
- 先看目录 —— 找到你要用的模块章节,比如I2C、SPI、GMAC
- 看寄存器概览 —— 每个模块开头都有一个寄存器地址映射表
- 找关键寄存器 —— 控制寄存器(CTRL)、状态寄存器(STATUS)、数据寄存器(DATA)
- 看复位默认值 —— 很多坑都出在这里,默认值不对,驱动就起不来
举个例子,调试RK3588的GMAC(以太网)时,你需要查这些:
// TRM中GMAC寄存器片段
GRF_GMAC_CON0 (0xFE2C0000)
Bit[15:12] : PHY Interface (R/W)
0000: RMII
0001: RGMII
0010: SGMII
Bit[11:8] : CLK Select (R/W)
0000: 125MHz
0001: 25MHz
0010: 2.5MHz
嗯,这里要注意:TRM里的地址是芯片内部总线地址,不是CPU看到的地址。做设备树时,你需要用 reg = <0xfe2c0000 0x1000> 这样的方式映射。
1.4 知识结构图:芯片选型与资料获取流程
下面这张图,是我自己总结的「从选芯片到开始移植」的完整流程:
1.5 资料获取渠道与避坑
官方资料主要从这几个地方获取:
- Rockchip Wiki —— 最权威,但更新慢,有些链接已经404了
- GitHub (rockchip-linux) —— 内核、U-Boot源码都在这里,比SDK里的版本新
- 官方BSP包 —— 找代理商或FAE要,通常包含完整的SDK和文档
- 社区论坛 —— 比如Firefly、友善之臂的论坛,有很多实战经验
最后说一句:资料拿到手,别急着编译。先把TRM的「Memory Map」章节看一遍,了解各个外设的基地址。这一步做好了,后面写设备树的时候会顺手很多。