4、获取 RK3568 SDK:使用 repo 工具同步 Android/Linux SDK、SDK 目录结构介绍

好,咱们继续。上一节我们把交叉编译链和基础工具都装好了,现在该拿真正的 SDK 了。RK3568 的 SDK 分两套:一套是 Android SDK,一套是 Linux SDK(也叫 Buildroot/Yocto SDK)。

我个人习惯把两套都拉下来,因为做驱动开发时经常要两边对照——比如某个外设的 dts 节点,Android 和 Linux 的写法可能不一样。你想想看,同一个寄存器地址,两边定义不同,那调试起来多头疼。

4.1 什么是 repo?为什么用它?

RK3568 的 SDK 不是单个 git 仓库,而是由几十个 git 仓库组成的集合。包括 u-boot、kernel、device/rockchip、external 库等等。如果一个个 git clone,你得敲几十次命令,而且版本还容易对不上。

repo 是 Google 为 Android 开发的一个工具,专门用来管理这种多仓库项目。它通过一个 manifest.xml 文件,把几十个仓库的地址、分支、提交号都列清楚。你只需要一条 repo sync,就能把所有仓库拉到正确版本。

核心概念:repo = 清单文件 + git 仓库集合。清单文件告诉你「要拉哪些仓库、拉哪个分支、拉哪个提交」。

4.2 初始化 repo 环境

虽然 repo 是 Python 脚本,但我们需要先把它下载到本地。嗯,这里要注意:不同版本的 repo 对 Python 版本有要求,RK3568 的 SDK 一般用 repo v2 系列。

# 下载 repo 工具
mkdir -p ~/bin
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo

# 把 repo 加入 PATH(建议写到 .bashrc 里)
export PATH=~/bin:$PATH

小技巧:国内访问 Google 的 repo 源可能慢。我一般用清华或中科大的镜像:export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo'。拉 SDK 时能快不少。

4.3 获取 Android SDK

Android SDK 是 RK 官方维护最全的。包含完整的 Android 系统、内核、u-boot、以及所有外设驱动。我们做驱动开发时,大部分时间都在这个 SDK 里工作。

# 创建一个工作目录(名字随意,我习惯叫 rk3568_android)
mkdir rk3568_android && cd rk3568_android

# 初始化 repo(这里用 RK 官方提供的 manifest 地址)
repo init -u https://github.com/rockchip-linux/manifests -b Android12 -m rk3568.xml

# 同步代码(-j4 表示用 4 个线程并行拉取,根据你的 CPU 核心数调整)
repo sync -j4

第一次同步会比较久,看网速,一般 30 分钟到 2 小时不等。我记得第一次拉 RK3399 的 SDK 时,等了快 3 个小时,中间还断了一次。后来我学乖了,用 repo sync -j4 --no-clone-bundle 避免一些 bundle 文件导致的断连。

避坑指南:我曾经因为网络不稳定,repo sync 到一半卡住。这时候不要直接 Ctrl+C 重来,先 repo sync --abort 清理锁文件,再重新 sync。否则会报 .repo/repo/.repo_fetchtimes.json 相关的错误。

4.4 获取 Linux SDK(Buildroot)

如果你做的是纯 Linux 嵌入式产品(非 Android),那用 Linux SDK 更轻量。它基于 Buildroot 构建,没有 Android 那套复杂的框架,更适合做 IoT 设备、工业控制等场景。

# 创建 Linux SDK 目录
mkdir rk3568_linux && cd rk3568_linux

# 初始化(注意 manifest 分支不同)
repo init -u https://github.com/rockchip-linux/manifests -b master -m rk3568_linux.xml

# 同步
repo sync -j4

Linux SDK 比 Android 小很多,大概 3-5GB,Android 要 20GB+。所以如果你的硬盘空间紧张,或者只做驱动验证,拉 Linux SDK 就够了。

4.5 SDK 目录结构介绍

同步完成后,我们来看看 SDK 里都有什么。我以 Android SDK 为例,Linux SDK 结构类似,只是少了 frameworks/、packages/ 这些 Android 特有的目录。

下面这张图帮你快速建立整体认知:

RK3568 Android SDK 核心目录结构 rk3568_android/ u-boot/ kernel/ device/ external/ arch/arm64/boot/dts/rockchip/ drivers/ device/rockchip/rk3568/ 各目录作用说明 • u-boot/:引导加载程序,负责初始化硬件、加载内核 • kernel/:Linux 内核源码,驱动开发的主战场 • device/rockchip/rk3568/:板级配置、dts 文件、分区表、init.rc • external/:第三方库,如 rkwifibt、rga、mpp 等硬件相关库 • build/:编译系统,makefile 和编译脚本 • out/:编译输出目录,生成的镜像、ko 文件都在这里

4.6 关键目录详解

做驱动开发,你打交道最多的就是下面这几个目录。我列个表,方便你快速查阅:

目录 核心内容 驱动开发关注点
kernel/ Linux 内核源码(5.10 或 4.19) 驱动源码、Kconfig、Makefile、dts 文件
kernel/arch/arm64/boot/dts/rockchip/ 设备树源文件(.dts / .dtsi) 外设节点定义、寄存器地址、时钟、中断、pinctrl
kernel/drivers/ 所有驱动源码 按子系统分类:gpio、i2c、spi、pwm、drm、usb 等
device/rockchip/rk3568/ 板级配置 分区表(parameter.txt)、BoardConfig.mk、init.rc
u-boot/ U-Boot 源码 板级初始化、fastboot、电源管理
external/ RK 硬件相关库 rga(2D 加速)、mpp(视频编解码)、rkwifibt(WiFi/BT)
out/target/product/rk3568/ 编译输出 boot.img、super.img、vendor.img、*.ko 文件

我的习惯:拿到 SDK 后,我第一件事就是去 kernel/arch/arm64/boot/dts/rockchip/ 下看看 rk3568-evb.dts。这个文件是 EVB 板的完整设备树,里面几乎包含了所有外设的节点。你写驱动时,dts 节点怎么配、reg 地址是多少、中断号是多少,都能在这里找到参考。

4.7 同步后的验证

同步完成后,建议做几个快速检查,确保 SDK 完整:

  1. 检查仓库数量:repo list | wc -l,Android SDK 一般 200-300 个仓库。
  2. 检查内核版本:cd kernel && make kernelversion,应该显示 5.10.x 或 4.19.x。
  3. 检查 dts 文件:ls arch/arm64/boot/dts/rockchip/rk3568*.dts,应该有 5-10 个 dts 文件。
  4. 检查编译环境:source build/envsetup.sh && lunch rk3568-userdebug,看能否正常加载。

注意:如果 repo list 出来的仓库数远少于预期,说明同步过程中有仓库没拉下来。可以用 repo sync --force-sync 强制重新同步失败的仓库。我曾经因为磁盘空间不足,同步到一半停了,结果编译时缺了 external/ffmpeg 的某个头文件,查了半天才发现是仓库没拉全。

4.8 小结

到这一步,你的开发环境基本就绪了。SDK 在手,接下来就是编译、烧录、调试的循环。记住,dts 文件是你做驱动开发的第一份地图,多花点时间熟悉它,后面会省很多事。