第二章:开发环境搭建
好,咱们正式开始动手了。这一章我带你搞定开发环境,说白了就是让你的电脑能和板卡“说话”。
很多新手在这一步就卡住了,不是工具链装不上,就是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 配置远程连接
- 点击左下角绿色图标,选择“Connect to Host...”
- 选择你刚才配好的主机别名(比如rk3588)
- VSCode会在新窗口打开远程连接
- 第一次连接会安装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推理程序,到时候你就知道这些准备有多重要了。