3. 获取Rockchip官方SDK:仓库结构、Repo同步与分支选择
做Rockchip平台开发,第一步就是拿到官方SDK。很多新手上来就急着git clone,结果发现仓库根本拉不全,或者拉下来编译报错。嗯,这里面的门道,我花了不少时间才摸清楚。
Rockchip的SDK不是单个git仓库,而是一组仓库的集合。说白了,它用Google的Repo工具来管理。你想想看,一个完整的BSP包含U-Boot、Kernel、Buildroot、RGA驱动、Mali GPU驱动、NPU工具链……如果每个都单独维护,版本对齐就是个噩梦。
3.1 SDK仓库结构解析
先看看Rockchip官方SDK长什么样。以RK3588的Linux SDK为例,它的顶层结构是这样的:
rk3588-linux/
├── .repo/ # Repo的元数据目录,别手动改
├── u-boot/ # 引导加载程序
├── kernel/ # Linux内核(5.10或6.1)
├── buildroot/ # Buildroot构建系统
├── device/ # 设备配置与分区表
├── external/ # 第三方组件
│ ├── rkwifibt/ # WiFi/BT驱动
│ ├── camera_engine/ # 摄像头算法库
│ └── drm/ # DRM显示驱动
├── prebuilts/ # 预编译工具链
├── tools/ # 烧录与调试工具
└── docs/ # 文档(有时很旧)
每个目录都有自己的git仓库。我刚开始接触时,以为.repo是多余的,删过一次……结果整个SDK就废了。千万别碰.repo目录,它是Repo工具的命根子。
| 目录 | 作用 | 我踩过的坑 |
|---|---|---|
u-boot/ |
引导加载程序,负责初始化DDR、加载内核 | 分支选错,板子直接变砖 |
kernel/ |
Linux内核,包含Rockchip的板级补丁 | 设备树文件经常要自己改 |
buildroot/ |
根文件系统构建工具 | 默认配置不带Qt,得自己加 |
device/ |
板级配置、分区表、参数文件 | 分区大小改错,系统起不来 |
external/ |
Rockchip私有库和驱动 | 版本不匹配,编译报一堆错 |
3.2 使用Repo同步源码
Repo是Google为Android开发的管理工具,Rockchip拿来管理BSP。它的核心是一个manifest文件,里面列出了所有子仓库的地址和分支。
同步步骤其实很简单:
- 安装Repo:
sudo apt install repo或者从Google官方下载 - 初始化:
repo init -u <manifest_url> -b <branch> - 同步:
repo sync -c -j4
我个人习惯用-j4,网络好的话可以开到-j8。但别贪多,我试过-j16,结果服务器把我限流了,反而更慢。
--no-clone-bundle参数,可以避免下载预打包的bundle文件,有时候反而更快。
同步完成后,所有子仓库都处于detached HEAD状态。什么意思?就是没有分支名,只有commit ID。这时候如果你想改代码,记得先建个本地分支:
cd kernel
git checkout -b my-feature-branch
我曾经直接改代码没建分支,结果repo sync后所有修改全丢了……嗯,血的教训。
3.3 SDK目录功能详解
咱们挑几个关键目录深入看看。
device/ 目录
这个目录存放板级配置。以RK3588 EVB为例:
device/rockchip/
├── rk3588/
│ ├── BoardConfig.mk # 板级编译配置
│ ├── parameter.txt # 分区表
│ ├── recovery.sh # 恢复模式脚本
│ └── rk3588_evb7.dts # 设备树
BoardConfig.mk里定义了用什么内核、什么文件系统、分区大小。我改得最多的就是parameter.txt,因为产品需求不同,分区大小经常要调。
external/ 目录
这里放的是Rockchip的私有组件。比如rkwifibt是WiFi和蓝牙驱动,camera_engine是ISP算法库。这些组件通常不开源,只提供二进制文件。
prebuilts/ 目录
预编译工具链。Rockchip提供了aarch64的交叉编译工具链,省去了自己编译gcc的麻烦。不过版本比较老,如果你要用新特性,可以自己换。
3.4 版本管理与分支选择
Rockchip的分支命名有规律。以RK3588为例:
| 分支名 | 内核版本 | 适用场景 |
|---|---|---|
rk3588/linux-5.10.y |
5.10 | 稳定版,推荐量产 |
rk3588/linux-6.1.y |
6.1 | 新特性,但驱动可能不全 |
rk3588/linux-next |
开发版 | 尝鲜,别用于产品 |
我建议新手选linux-5.10.y。为什么?因为Rockchip对5.10的支持最成熟,文档最多,社区问题也最多。6.1虽然新,但有些驱动还没完全稳定。
选择分支时,还要注意manifest文件里的版本号。Rockchip会定期发布release版本,比如V3.0、V3.1。这些release版本经过了内部测试,比直接拉分支更可靠。
最后,画一张图总结一下SDK的获取和结构:
这张图把整个流程串起来了。从repo init开始,manifest文件决定了拉哪些仓库、用什么分支。同步完成后,你得到的就是一个完整的、版本对齐的SDK。