第二章 开发环境搭建:Ubuntu虚拟机安装、基础开发工具安装、交叉编译工具链配置、SDK获取与同步
说实话,做瑞芯微的BSP开发,环境搭建这一步看着简单,但坑是真不少。我见过太多新手,甚至有些老手,在这上面浪费一两天时间。今天我就把这几年的经验捋一捋,帮你把这条路铺平。
2.1 Ubuntu虚拟机安装——别小看这一步
我个人习惯用VMware Workstation,当然VirtualBox也行。但我要提醒你,瑞芯微的SDK对磁盘空间和内存要求都不低。
硬件建议配置:
- CPU:至少4核,推荐8核
- 内存:至少8GB,推荐16GB
- 磁盘:至少100GB,推荐200GB以上(SDK解压后轻松吃掉30-50GB)
系统版本我推荐Ubuntu 18.04 LTS或20.04 LTS。为什么?因为瑞芯微官方SDK在这两个版本上测试最充分。我曾经试过用22.04,结果编译时遇到一堆Python依赖问题,折腾了两天才搞定。嗯,后来我就老实了。
安装时注意几点:
- 语言选英文,避免路径乱码问题
- 磁盘分区时,/home单独分大一点,SDK一般都放这里
- 安装OpenSSH Server,方便后续远程操作
2.2 基础开发工具安装——一个都不能少
系统装好后,第一件事就是装工具。我习惯用一个命令搞定:
sudo apt update
sudo apt install -y git repo vim ssh openssh-server \
build-essential cmake python3 python3-pip \
curl wget tree htop net-tools
这里我重点说几个:
Git与Repo
Git是基本功,这个不用多说。Repo是Google为Android开发的多仓库管理工具,瑞芯微的SDK就是用它来管理的。你想想看,一个SDK里几十个Git仓库,手动一个个clone?那得疯掉。
小技巧:配置Git的用户名和邮箱时,最好和你的代码托管平台一致。我见过有人随便填了个邮箱,结果提交记录里找不到人,排查问题时可费劲了。
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"
Vim与SSH
Vim是嵌入式开发的标配。别跟我说你用IDE,在服务器上调试时你就知道Vim有多香了。SSH更是必备,毕竟开发机通常是远程的。
我曾经在客户现场,只有一根网线和一台笔记本,全靠SSH连回办公室的服务器干活。那会儿要是没配好SSH,项目就得延期。
2.3 交叉编译工具链配置——这一步最容易出错
交叉编译工具链,说白了就是让你的PC能编译出ARM架构上跑的程序。瑞芯微官方提供了两种方式:
| 方式 | 说明 | 推荐场景 |
|---|---|---|
| SDK自带 | SDK解压后,工具链在prebuilts目录下 | 新手、快速验证 |
| 独立安装 | 从ARM官网或瑞芯微官网下载 | 多项目并行、自定义需求 |
我建议新手直接用SDK自带的。为什么?因为版本匹配,省心。我自己刚开始做RK3399时,从网上下了一个gcc 7.5的工具链,结果编译出来的程序在板子上跑不起来,查了半天才发现是glibc版本不匹配。
配置环境变量:
# 以RK3588为例,SDK路径假设在~/rk3588_sdk
export PATH=~/rk3588_sdk/prebuilts/gcc/linux-x86/aarch64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin:$PATH
export CROSS_COMPILE=aarch64-none-linux-gnu-
export ARCH=arm64
注意:每次打开新终端都要重新export?太麻烦了。我习惯把这几个变量写到~/.bashrc里,一劳永逸。但要注意,如果你同时做多个平台的项目,最好用脚本切换,别混在一起。
验证工具链是否生效:
aarch64-none-linux-gnu-gcc --version
# 应该能看到版本信息,比如:gcc (GCC) 10.3.1 20210621
2.4 SDK获取与同步——耐心活
瑞芯微的SDK通常通过Repo来获取。官方会提供一个manifest仓库,里面记录了所有子仓库的地址和版本。
获取SDK的典型步骤:
mkdir ~/rk_sdk
cd ~/rk_sdk
repo init -u https://github.com/rockchip-linux/manifests -b master
repo sync -j4
这里我要多说两句:
- 网络问题:国内访问GitHub有时很慢。我建议用代理,或者找瑞芯微的国内镜像。我曾经在酒店里同步SDK,网速只有200KB/s,同步了整整一个通宵。
- -j参数:表示并行下载的线程数。设成CPU核心数的1.5倍左右比较合适。设太大反而容易出错。
- 断点续传:repo sync支持断点续传。如果中途断了,重新执行repo sync就行,不会从头开始。
避坑指南:我曾经在同步到一半时强行中断,然后直接删了.repo目录重新init。结果发现有些仓库的.git目录损坏了,最后只能全部删了重来。正确做法是:先执行repo sync --force-sync,实在不行再考虑重来。
同步完成后,检查一下:
repo status
# 应该看到所有仓库都是干净的,没有未提交的修改
到这里,开发环境就基本搭好了。你可能会觉得步骤有点多,但相信我,一次配好,后面能省下大把时间。下一章我们开始真正接触瑞芯微的SDK架构,看看里面到底藏了些什么。