4. SDK获取与结构解析:瑞芯微官方SDK下载、SDK目录结构详解、BSP各组件作用

拿到一块新的开发板,第一件事是什么?我个人习惯,不是急着看原理图,而是先把SDK拉下来,把目录结构摸清楚。瑞芯微的SDK说大不大,说小不小,解压完十几个G是常事。但你别被这个数字吓到,其实核心的东西就那么几块。

这一章,我就带你从头捋一遍:去哪下载、下载完长什么样、每个文件夹是干嘛的。嗯,这里要注意,不同芯片型号的SDK结构会略有差异,但骨架是一样的。

4.1 官方SDK获取途径

瑞芯微的SDK主要分两条线:一条是公开的,一条是签了NDA的。公开的你去GitHub上搜"rockchip-linux"就能找到,但那个只是碎片化的仓库,不是完整的BSP。真正能用的完整SDK,得从瑞芯微的官方FTP或者百度网盘拿。

获取方式 适用对象 内容完整度 更新频率
GitHub rockchip-linux 个人开发者、爱好者 仅部分组件(U-Boot、Kernel) 不定期
瑞芯微官方FTP 签约客户、合作伙伴 完整SDK(含Buildroot、工具链、文档) 季度/月度
百度网盘(代理商提供) 购买了开发板的用户 板级支持包 + 部分源码 随板卡发布
我的建议:如果你是第一次接触瑞芯微平台,先别急着签NDA。去淘宝买一块RK3566或RK3588的开发板,卖家通常会提供百度网盘链接,里面就有完整的SDK压缩包。先拿这个练手,等真要做产品了再走官方渠道。

4.2 SDK目录结构全景

下载完SDK,解压后你会看到类似下面的目录结构。我用RK3588的SDK举个例子,其他型号大同小异。

rk3588_linux_sdk/
├── app/                    # 上层应用示例
├── buildroot/              # Buildroot构建系统
├── device/                 # 板级配置与分区表
├── docs/                   # 文档(英文为主)
├── external/               # 第三方库与工具
├── kernel/                 # Linux内核源码
├── prebuilts/              # 预编译工具链
├── rkbin/                  # 瑞芯微闭源二进制(ATF、DDR、M0)
├── tools/                  # 烧录与打包工具
├── u-boot/                 # U-Boot引导加载程序
├── yocto/                  # Yocto构建系统(部分SDK有)
├── .repo/                  # repo管理元数据
├── Makefile                # 顶层构建入口
└── README.md               # 说明文件

你想想看,这十几个文件夹,真正需要你动手改的其实就三四个。我刚开始做RK3399移植的时候,看到这个目录头皮发麻,后来发现大部分文件夹根本不用碰。

4.3 核心组件详解

咱们挑几个最重要的文件夹,一个一个说清楚。

4.3.1 u-boot/ — 引导加载程序

U-Boot负责初始化硬件、加载内核。瑞芯微的U-Boot做了大量定制,比如支持FIT镜像、Rockchip特有的DDR初始化流程。你在移植新板子时,主要改的是u-boot/board/rockchip/下的板级文件。

关键路径:

  • u-boot/configs/ — 板级默认配置(如 rk3588_defconfig)
  • u-boot/arch/arm/dts/ — 设备树文件(如 rk3588-evb.dts)
  • u-boot/board/rockchip/ — 板级初始化代码

4.3.2 kernel/ — Linux内核

内核部分,瑞芯微基于LTS主线内核打上了大量Rockchip-specific的补丁。我记得有一次移植RK3566,内核启动到一半卡在PCIe枚举上,查了两天才发现是设备树里一个reg属性写错了。说白了,内核移植80%的工作量都在设备树上。

避坑指南:千万不要直接拿主线内核往瑞芯微板子上怼。官方SDK里的内核包含了大量未合入主线的驱动补丁,比如VPU、NPU、RGA这些硬件加速模块。我曾经试过用主线5.10内核跑RK3399,结果MIPI DSI死活点不亮,最后还是乖乖换回SDK内核。

4.3.3 rkbin/ — 闭源二进制固件

这个文件夹很特殊。里面放的是瑞芯微不公开源码的二进制文件,包括:

  • ATF (ARM Trusted Firmware) — 安全监控层,负责PSCI、电源管理
  • DDR初始化代码 — 内存控制器训练,不同频率有不同bin
  • M0协处理器固件 — 用于低功耗管理、音频DSP等

这些二进制文件是瑞芯微的"黑盒",你没法改源码,但可以替换版本。比如你想支持更高频率的DDR,就得找FAE要新的DDR bin。

4.3.4 device/ — 板级配置中心

这个文件夹是移植工作的主战场。它包含了:

  • 分区表(parameter.txt) — 定义每个分区的大小和位置
  • 板级配置文件(BoardConfig.mk) — 指定芯片型号、DDR容量、屏幕参数
  • 恢复模式镜像(recovery) — 用于OTA升级

4.4 BSP各组件关系图

下面这张图,我画的是瑞芯微BSP各组件之间的依赖关系。你看一眼就能明白,为什么改一个设备树会影响那么多东西。

瑞芯微BSP组件关系图 瑞芯微BSP组件依赖关系 硬件平台 (SoC + DDR + PMIC) rkbin (ATF / DDR / M0) U-Boot (引导加载程序) Linux Kernel + 驱动 设备树 (DTS/DTB) 板级配置 (BoardConfig) 根文件系统 (Buildroot/Yocto) 上层应用 / 多媒体框架 说明:箭头表示依赖关系,下层组件依赖上层组件提供的能力。设备树是连接硬件描述与软件驱动的桥梁。

4.5 各组件版本对应关系

移植时最头疼的问题之一:U-Boot、Kernel、ATF这三个东西的版本必须匹配。我见过有人把RK3588的U-Boot配RK3566的Kernel,结果DDR初始化就挂了。下面这张表,是我整理的主流芯片的组件版本对应关系。

芯片型号 U-Boot版本 Kernel版本 ATF版本 Buildroot版本
RK3566 2017.09 (Rockchip定制) 4.19 / 5.10 rk3568_bl31_v1.24 2020.02
RK3568 2017.09 (Rockchip定制) 4.19 / 5.10 rk3568_bl31_v1.27 2020.02
RK3588 2021.07 (Rockchip定制) 5.10 / 6.1 rk3588_bl31_v1.08 2022.02
RK3399 2014.10 (Rockchip定制) 4.4 / 4.19 rk3399_bl31_v1.30 2018.08
我的经验:如果你要升级内核版本,比如从4.19升到5.10,别只换kernel目录。U-Boot里的设备树、ATF的版本、甚至DDR bin都可能需要同步更新。我建议你先把整个SDK升级到目标版本,再把自己的板级改动移植过去,而不是反过来。

4.6 快速上手:从SDK到第一次编译

下载完SDK,别急着改代码。先跑一遍编译流程,确认环境没问题。步骤很简单:

  1. 解压SDK — 注意路径不要有中文和空格
  2. 安装依赖 — Ubuntu 20.04/22.04 执行 sudo apt install repo git-core gcc-arm-linux-gnueabihf 等
  3. 选择板级配置 — ./build.sh rk3588-evb1-lp4-v10-linux.mk
  4. 执行编译 — ./build.sh all(第一次编译大概1-2小时)
  5. 检查输出 — 在 rockdev/ 目录下找到 update.img
注意:第一次编译如果报错,90%是缺少依赖包。别慌,看报错信息缺什么就装什么。我遇到过最离谱的一次,缺的是python2,因为Buildroot里某个老脚本还在用Python 2语法。

SDK的结构,说白了就是一层套一层的依赖关系。你不需要一开始就全部搞懂,但心里要有张地图:改硬件配置去device/,改驱动去kernel/,改启动流程去u-boot/,改文件系统去buildroot/。这张地图,就是你这章学到的东西。