3、开发环境搭建:RK SDK获取、交叉编译工具链配置、板端环境准备(ADB/SSH)

好,咱们正式开始动手了。这一章我带你把开发环境搭起来。说实话,环境搭建这事儿,看着琐碎,但真要是哪个环节出了岔子,后面调试的时候能把你折腾到怀疑人生。我自己就吃过这个亏——第一次调RK3588的ISP时,交叉编译链版本不对,编译出来的库在板子上跑起来直接段错误,查了整整两天才发现是工具链的问题。所以这一章,咱们一步一个脚印,把地基打牢。

3.1 RK SDK获取:从哪里开始?

瑞芯微的SDK,说白了就是一套完整的BSP包。里面包含了Linux内核、U-Boot、驱动、HAL层代码、ISP tuning工具等等。你拿到手的SDK版本,直接决定了你能调哪些功能。

SDK的获取方式,通常有两种:

  • 官方Git仓库:瑞芯微在GitHub或Gitee上有官方仓库,比如 rk3588-linux 或 rk356x-android。但注意,很多内部代码是不开源的,你需要签NDA协议才能拿到完整包。
  • 板卡厂商提供:如果你用的是第三方开发板(比如Firefly、友善之臂),厂商会提供定制好的SDK。我建议优先用厂商的,因为适配工作他们已经做了一部分。

我的个人习惯:拿到SDK后,第一件事不是编译,而是先看 README.md 和 docs/ 目录。里面通常会写明依赖的交叉编译链版本、编译步骤、已知问题。别跳过这一步,我见过太多人上来就 make,结果卡在某个莫名其妙的错误上。

下载SDK的命令,以RK3588为例:

# 从Gitee克隆(国内速度快)
git clone https://gitee.com/rockchip_linux/rk3588_linux_sdk.git

# 或者从GitHub
git clone https://github.com/rockchip-linux/rk3588_linux_sdk.git

# 进入目录,初始化子模块
cd rk3588_linux_sdk
git submodule update --init --recursive

嗯,这里要注意:子模块更新这一步很关键。SDK里很多驱动和HAL代码是以子模块形式引用的,你不更新,编译时会缺文件。我曾经有一次忘了执行这步,结果编译内核时报了一堆头文件找不到的错误,排查了半天才发现是子模块没拉下来。

3.2 交叉编译工具链配置:别让版本坑了你

交叉编译工具链,就是把你在PC上写的代码,编译成能在ARM板子上运行的二进制文件。瑞芯微官方推荐用 gcc-arm-10.3-2021.07 这个版本,但不同芯片可能有差异。

工具链的安装步骤:

  1. 从ARM官网或瑞芯微网盘下载预编译的工具链。
  2. 解压到 /opt/ 或 /usr/local/ 目录。
  3. 配置环境变量,让系统能找到 aarch64-linux-gnu-gcc。

具体命令如下:

# 下载(以aarch64为例)
wget https://developer.arm.com/-/media/Files/downloads/gnu-a/10.3-2021.07/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu.tar.xz

# 解压到/opt
sudo tar -xvf gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu.tar.xz -C /opt/

# 配置环境变量(写入~/.bashrc)
export PATH=/opt/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin:$PATH
export CROSS_COMPILE=aarch64-none-linux-gnu-
export ARCH=arm64

# 使生效
source ~/.bashrc

# 验证
aarch64-none-linux-gnu-gcc --version

避坑指南:我曾经用gcc-9.2版本编译RK3588的ISP驱动,结果在板子上跑时,图像数据出现了奇怪的偏移。后来查了瑞芯微的论坛,才发现官方要求最低gcc-10.3。所以,工具链版本一定要和SDK文档里写的一致,别自作聪明用最新版。

另外,如果你同时开发多个项目(比如RK3566和RK3588),建议在 ~/.bashrc 里为每个项目单独配置别名:

alias rk3588_env='export PATH=/opt/gcc-arm-10.3-2021.07/bin:$PATH; export CROSS_COMPILE=aarch64-none-linux-gnu-'
alias rk3566_env='export PATH=/opt/gcc-arm-9.2-2019.12/bin:$PATH; export CROSS_COMPILE=aarch64-none-linux-gnu-'

这样切换项目时,只需要执行 rk3588_env 或 rk3566_env 就行,省得每次手动改环境变量。

3.3 板端环境准备:ADB与SSH

板子拿到手,第一件事是让它能联网、能通信。我一般同时准备 ADB 和 SSH 两种方式,因为调试时各有各的用处。

3.3.1 ADB:快速调试的利器

ADB(Android Debug Bridge)虽然名字带Android,但瑞芯微的Linux系统也支持。它通过USB连接,不需要网络,适合初期调试。

配置步骤:

  1. PC端安装ADB工具:sudo apt install adb
  2. 板端内核需要开启 CONFIG_USB_G_SERIAL 和 CONFIG_USB_CONFIGFS。
  3. 用USB线连接板子和PC,执行 adb devices 查看是否识别。

注意:如果 adb devices 显示 unauthorized,需要在板子上确认授权。有些板子默认没开ADB,你得先通过串口登录,执行 start adbd 启动服务。

ADB的常用命令:

# 推送文件到板子
adb push ./test_isp /data/

# 从板子拉取文件
adb pull /data/log.txt ./

# 进入shell
adb shell

# 重启板子
adb reboot

我个人习惯用ADB来快速推送测试程序。比如编译了一个ISP tuning的测试工具,直接 adb push 到板子上跑,比用U盘拷来拷去快多了。

3.3.2 SSH:远程开发的标配

SSH适合长时间调试,尤其是你需要在板子上跑服务、看日志的时候。配置SSH分两步:板端开启SSH服务,PC端连接。

板端配置:

# 安装openssh-server(如果系统没有)
apt-get update
apt-get install openssh-server

# 启动SSH服务
/etc/init.d/ssh start

# 设置开机自启
update-rc.d ssh defaults

# 查看IP地址
ifconfig eth0

PC端连接:

ssh root@192.168.1.100  # 替换为板子的实际IP

我的经验:如果板子和PC不在同一个网段,可以用USB网卡或者通过路由器桥接。我遇到过最坑的情况是,板子的IP是动态分配的,每次重启IP都变。后来我直接在板子的 /etc/rc.local 里写死了静态IP,省得每次都要去查。

SSH连接成功后,我通常会做两件事:

  • 用 scp 传输大文件(比如编译好的内核镜像)。
  • 用 screen 或 tmux 保持会话,防止SSH断开后任务中断。

3.4 知识体系总览

下面这张图,我把本章的核心逻辑画出来了。你一看就明白:SDK是原材料,交叉编译链是工具,板端环境是战场。三者缺一不可。

开发环境搭建核心流程 ① SDK获取 Git仓库克隆 子模块初始化 版本确认 ② 交叉编译链 下载解压 环境变量配置 版本验证 ③ 板端环境 ADB配置 SSH配置 网络连通性 最终目标:可编译、可烧录、可调试 注意:工具链版本必须与SDK要求一致,否则编译出的程序可能在板子上运行异常

3.5 环境验证:确保一切就绪

环境搭好了,怎么知道对不对?我一般跑一个简单的测试程序验证。

步骤1:编写测试代码

// test_env.c
#include <stdio.h>

int main() {
    printf("RK ISP Development Environment OK!\n");
    return 0;
}

步骤2:交叉编译

aarch64-none-linux-gnu-gcc test_env.c -o test_env

步骤3:推送到板子并运行

# 通过ADB
adb push test_env /data/
adb shell chmod +x /data/test_env
adb shell /data/test_env

# 或者通过SSH
scp test_env root@192.168.1.100:/tmp/
ssh root@192.168.1.100 /tmp/test_env

如果输出 RK ISP Development Environment OK!,说明环境搭建成功。如果报错,比如 No such file or directory,大概率是工具链版本不对,或者板子的glibc版本与编译链不匹配。

最后说一句:环境搭建这事儿,一次配好,后面能省下大把时间。我建议你把每一步都记录下来,尤其是工具链的路径和版本号。下次换电脑或者重装系统时,照着笔记来,十分钟就能恢复环境。

可可精品资料库