第三章 SDK源码获取与编译:从GitHub/Gitee拉取RK SDK、了解SDK目录结构、执行首次全编译

好,咱们进入第三章。这一章可以说是整个课程的「地基」——你得先把SDK拿到手,知道它长什么样,再把它编译一遍。很多新手在这一步就卡住了,不是网络问题就是环境问题。别急,我带你一步步走。

3.1 从哪里拉取SDK?GitHub还是Gitee?

瑞芯微的官方SDK,其实主要托管在GitHub上。但说实话,国内访问GitHub有时候真的慢得让人抓狂。我个人习惯是优先用Gitee,尤其是瑞芯微在Gitee上有官方镜像仓库,速度飞快。

举个例子,RK3588的SDK,你可以在Gitee上找到这个地址:

git clone https://gitee.com/rockchip_linux/rk3588_linux_sdk.git

如果你非要用GitHub,那也行:

git clone https://github.com/rockchip-linux/rk3588_linux_sdk.git

嗯,这里有个坑。SDK本身是一个「repo」管理的项目,不是简单的单仓库。你拉下来之后,还需要执行一个同步子仓库的操作。我刚开始做RK平台时,就傻乎乎地只拉了主仓库,结果编译时缺了一堆东西……

注意: 拉取完成后,一定要执行 repo sync 或者脚本里的同步命令,否则子仓库是空的。

3.2 SDK目录结构:别被吓到

第一次打开SDK目录,你可能会觉得「哇,这什么鬼,这么多文件夹?」别慌,我帮你理一理。RK的SDK目录结构其实很有规律,核心就几个部分:

目录名 作用
kernel/ Linux内核源码,驱动开发主要在这里
u-boot/ 引导加载程序,负责启动内核
buildroot/ 根文件系统构建工具,生成最小系统
device/ 设备树、分区表、板级配置
external/ 第三方库、工具、应用
tools/ 烧录工具、打包脚本、调试工具
docs/ 官方文档,强烈建议先看这里

你看,是不是清晰多了?说白了,嵌入式Linux系统就三大部分:引导程序(u-boot)、内核(kernel)、文件系统(buildroot)。RK的SDK把这三块都给你准备好了,你只需要配置好,然后编译。

我个人经验是,刚开始不要试图搞懂每一个目录。先聚焦在 kerneldevice 这两个目录上,因为大部分开发工作都在这两个地方。

3.3 首次全编译:从零到镜像

好,现在开始编译。这一步我建议你严格按照官方文档来,但我会给你一些避坑指南。

首先,确保你的Ubuntu环境装好了必要的依赖。我记得有一次我在一台新机器上编译,结果报了一堆「找不到某某库」的错误。后来我学乖了,先跑一遍这个:

sudo apt-get install repo git-core gitk git-gui gcc-arm-linux-gnueabihf u-boot-tools device-tree-compiler \
gcc-aarch64-linux-gnu mtools parted libudev-dev libusb-1.0-0-dev python3-pip autoconf automake \
libtool libssl-dev libncurses5-dev pkg-config

嗯,这个列表可能因SDK版本不同而略有差异。最保险的方法是看SDK根目录下的 docs/ 文件夹,里面通常有一个 Linux_Development_Guide 文档,列出了所有依赖。

接下来,进入SDK根目录,执行全编译脚本。以RK3588为例:

cd ~/rk3588_linux_sdk
./build.sh lunch
# 选择你的板子型号,比如 rk3588-evb1-lp4
./build.sh

这个 build.sh 脚本会自动编译u-boot、内核、文件系统,最后打包成一个完整的固件镜像。整个过程大概需要30分钟到1小时,取决于你的电脑性能。

关键点: 首次编译时,建议不要修改任何配置。先跑通一次,确保环境没问题。之后再慢慢改。

编译完成后,你会在 output/ 目录下看到生成的镜像文件,比如 update.img。这个就是可以烧录到板子上的固件。

3.4 避坑指南:我踩过的那些坑

说到编译,我不得不提几个常见的坑,都是我曾经血泪教训换来的:

  • 磁盘空间不足: SDK全编译后,占用空间轻松超过20GB。确保你的虚拟机或电脑有至少50GB空闲空间。
  • 网络问题导致repo sync失败: 如果你用GitHub,建议设置代理或者换Gitee。我曾经因为网络问题,sync了三次才成功。
  • Python版本不兼容: RK的编译脚本依赖Python 3.6以上。如果你用的是Ubuntu 18.04,默认Python版本可能不够,需要手动升级。
  • 编译时CPU过热: 全编译会跑满所有CPU核心,笔记本用户注意散热。我有一台老笔记本,编译时风扇狂转,最后直接过热关机了……
小技巧: 如果你只想编译内核,可以单独执行 ./build.sh kernel,这样快很多。调试阶段我经常这么干。

3.5 编译后的验证:确保镜像可用

编译完成后,别急着烧录。先检查一下生成的镜像文件是否完整。我一般会看这几个地方:

  • output/update.img 文件大小是否在合理范围内(通常几百MB到1GB左右)
  • output/boot.img 是否存在,这是内核镜像
  • output/rootfs.img 是否存在,这是文件系统镜像

如果这些文件都有,那恭喜你,首次全编译成功了!接下来就可以烧录到板子上,开始真正的嵌入式开发了。

嗯,这一章的内容就到这里。下一章我们会讲如何烧录固件到板子,以及如何通过串口登录系统。到时候见。