第二章 开发环境搭建: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架构,看看里面到底藏了些什么。