第二章:开发环境搭建

好,咱们正式开始动手了。这一章我带你搞定开发环境,说白了就是让你的电脑能和板卡“说话”。

很多新手在这一步就卡住了,不是工具链装不上,就是SSH连不上。别急,我把自己踩过的坑都告诉你。

2.1 交叉编译工具链安装

先说说什么是交叉编译。你想想看,你的电脑是x86架构,板卡通常是ARM架构。在x86上编译出ARM能跑的程序,这就是交叉编译。

我个人习惯用Linaro提供的工具链,稳定且社区支持好。以ARM64位板卡为例,安装步骤如下:

# 下载工具链
wget https://releases.linaro.org/components/toolchain/binaries/latest/aarch64-linux-gnu/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz

# 解压到指定目录
tar -xvf gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz -C /opt/

# 配置环境变量
echo 'export PATH=$PATH:/opt/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin' >> ~/.bashrc
source ~/.bashrc

# 验证安装
aarch64-linux-gnu-gcc --version
小提示: 如果你用的是Ubuntu 20.04及以上版本,可以直接用apt安装:sudo apt install gcc-aarch64-linux-gnu。但版本可能较老,我建议还是手动装Linaro的。

安装完成后,写个简单的hello world测试一下:

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

int main() {
    printf("Hello Edge AI!\n");
    return 0;
}

// 编译
aarch64-linux-gnu-gcc -o hello hello.c

// 查看文件信息
file hello
// 输出: ELF 64-bit LSB executable, ARM aarch64, version 1 (SYSV)

看到“ARM aarch64”就对了。我曾经有一次编译出来还是x86的,折腾了半天才发现是环境变量没生效,嗯,这里要注意source一下。

2.2 SSH远程开发配置

板卡刷好系统后,第一件事就是连上它。SSH是最常用的方式。

2.2.1 板卡网络配置

我建议用静态IP,避免每次重启IP都变。以我常用的RK3588板卡为例:

# 编辑网络配置文件
sudo vi /etc/netplan/01-netcfg.yaml

# 内容如下
network:
  version: 2
  renderer: networkd
  ethernets:
    eth0:
      dhcp4: no
      addresses:
        - 192.168.1.100/24
      gateway4: 192.168.1.1
      nameservers:
        addresses: [8.8.8.8, 114.114.114.114]

# 应用配置
sudo netplan apply
注意: 不同板卡的网卡名称可能不同,有的是eth0,有的是enp1s0。用ip a命令先查一下。

2.2.2 主机SSH配置

为了方便,我习惯在~/.ssh/config里配置主机别名:

# ~/.ssh/config
Host rk3588
    HostName 192.168.1.100
    User root
    Port 22
    IdentityFile ~/.ssh/id_rsa

# 然后就可以直接 ssh rk3588 连接了

为什么要配别名?你想想看,如果同时管理好几块板卡,每次都要输IP和用户名,多麻烦。配好之后,一行命令就搞定。

2.3 VSCode远程调试配置

我个人觉得,VSCode的Remote-SSH插件是最好用的远程开发工具。没有之一。

2.3.1 安装插件

在VSCode扩展市场搜索“Remote - SSH”,安装即可。安装后左下角会出现一个绿色的“><”图标。

2.3.2 配置远程连接

  1. 点击左下角绿色图标,选择“Connect to Host...”
  2. 选择你刚才配好的主机别名(比如rk3588)
  3. VSCode会在新窗口打开远程连接
  4. 第一次连接会安装VSCode Server,稍等片刻
避坑指南: 我曾经遇到过VSCode Server安装失败的情况,原因是板卡时间不对。用date命令检查一下,如果时间差太多,用ntpdate ntp.aliyun.com同步一下。

2.3.3 配置调试器

以C/C++开发为例,需要配置launch.json:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Remote Debug",
            "type": "cppdbg",
            "request": "launch",
            "program": "/home/project/hello",
            "args": [],
            "stopAtEntry": false,
            "cwd": "/home/project",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "miDebuggerPath": "/usr/bin/gdb",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ]
        }
    ]
}

配置好后,按F5就能远程调试了。断点、变量查看、单步执行,跟在本地开发一模一样。

2.4 板卡刷机与系统烧录

这是最刺激的一步。刷机刷不好,板子变砖头。别怕,我教你稳扎稳打的方法。

2.4.1 准备工作

工具/材料 说明
板卡 以瑞芯微RK3588为例
USB Type-C数据线 用于连接电脑和板卡
SD卡(可选) 用于SD卡启动模式
刷机工具 RKDevTool(Windows)或upgrade_tool(Linux)
固件 从官方下载的完整镜像

2.4.2 刷机步骤(以Linux环境为例)

# 1. 安装刷机工具
sudo apt install libusb-1.0-0-dev
git clone https://github.com/rockchip-linux/tools
cd tools/rk_tools/
make

# 2. 进入Loader模式
# 按住板卡上的RECOVERY键,然后上电
# 或者按住RECOVERY键,再按一下RESET键

# 3. 检查设备是否识别
lsusb | grep Rockchip
# 应该看到:ID 2207:350a Rockchip

# 4. 烧录固件
sudo ./upgrade_tool ul update.img
# 等待进度条走完,大概3-5分钟

# 5. 重启板卡
sudo ./upgrade_tool rd
警告: 刷机过程中绝对不能断电!我有个同事刷到一半拔了USB线,板子直接变砖,最后只能短接Flash引脚救砖。嗯,那场面,惨不忍睹。

2.4.3 系统烧录后的验证

刷完机,先别急着高兴。做几个基本检查:

  • 网络连通性: ping一下板卡IP,看通不通
  • SSH登录: 用ssh命令登录,看能不能进系统
  • 系统信息: uname -a查看内核版本
  • 硬件检测: cat /proc/cpuinfo查看CPU信息
我的经验: 刷完机后,我习惯先做一次全量备份。用dd if=/dev/mmcblk0 of=backup.img bs=4M把整个系统盘备份下来。万一后面搞坏了,直接恢复就行。

好了,到这里开发环境就搭建完成了。你可能会觉得步骤有点多,但相信我,一次配好,后面能省下大把时间。下一章我们开始写第一个边缘AI推理程序,到时候你就知道这些准备有多重要了。