第三章 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把这三块都给你准备好了,你只需要配置好,然后编译。
我个人经验是,刚开始不要试图搞懂每一个目录。先聚焦在 kernel 和 device 这两个目录上,因为大部分开发工作都在这两个地方。
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是否存在,这是文件系统镜像
如果这些文件都有,那恭喜你,首次全编译成功了!接下来就可以烧录到板子上,开始真正的嵌入式开发了。
嗯,这一章的内容就到这里。下一章我们会讲如何烧录固件到板子,以及如何通过串口登录系统。到时候见。