3、开发环境搭建(上):交叉编译工具链安装、SSH远程连接配置、文件传输工具(SCP/RSYNC)使用
好,咱们正式开始动手了。这一章我带你搭开发环境。说实话,嵌入式开发最磨人的往往不是算法本身,而是环境配了半天跑不起来。我早期入坑时,光一个交叉编译链就折腾了两天,后来发现是路径写错了……嗯,咱们今天把这些坑都填平。
3.1 交叉编译工具链:为什么非得用这个?
先聊个基础问题。你平时在电脑上写C代码,gcc编译出来直接就能跑。但嵌入式平台不一样——你的电脑是x86架构,目标板可能是ARM、RISC-V或者MIPS。说白了,你得在x86的电脑上,生成一份ARM能识别的机器码。这就是交叉编译。
我个人的习惯是,拿到一块新开发板,第一件事就是确认它的CPU架构和厂商提供的工具链版本。别小看这一步,我见过有人拿ARMv7的工具链去编译ARMv8的代码,跑起来直接段错误。
3.2 安装交叉编译工具链
咱们以ARM Cortex-A系列为例,这是目前YOLO轻量版最常用的平台。假设你用的是树莓派4B或者瑞芯微RK3588这类板子。
3.2.1 下载与解压
去芯片厂商官网下载对应的交叉编译工具链。以ARM官方为例:
# 下载ARM GCC工具链(以gcc-arm-10.3-2021.07为例)
wget https://developer.arm.com/-/media/Files/downloads/gnu-a/10.3-2021.07/binrel/gcc-arm-10.3-2021.07-x86_64-arm-none-linux-gnueabihf.tar.xz
# 解压到指定目录
tar -xvf gcc-arm-10.3-2021.07-x86_64-arm-none-linux-gnueabihf.tar.xz -C /opt/
这里要注意,解压路径我建议统一放在 /opt/ 或者 /usr/local/ 下。我曾经图省事直接放桌面,结果换台电脑环境全废了。
3.2.2 配置环境变量
解压完只是第一步,你得让系统知道去哪找这些工具。编辑 ~/.bashrc 文件:
vim ~/.bashrc
# 在文件末尾添加
export PATH=$PATH:/opt/gcc-arm-10.3-2021.07-x86_64-arm-none-linux-gnueabihf/bin
export CROSS_COMPILE=arm-none-linux-gnueabihf-
export ARCH=arm
保存后执行 source ~/.bashrc 使其生效。验证一下:
arm-none-linux-gnueabihf-gcc --version
如果看到版本信息,恭喜你,环境通了。
CROSS_COMPILE 变量末尾忘了加短横线。你想想看,系统找的是 arm-none-linux-gnueabihf-gcc,你少个短横线就变成 arm-none-linux-gnueabihfgcc,当然找不到。
3.3 SSH远程连接配置
工具链装好了,但你不能每次都插着显示器和键盘去操作开发板吧?SSH就是你的远程遥控器。
3.3.1 开发板端开启SSH服务
大多数嵌入式Linux系统默认没开SSH。你需要先连上开发板(串口或HDMI),执行:
# 检查SSH服务状态
systemctl status sshd
# 如果没安装,先安装
sudo apt-get update
sudo apt-get install openssh-server
# 启动并设置开机自启
sudo systemctl start sshd
sudo systemctl enable sshd
这里有个小细节——记得检查防火墙。我有一块RK3588的板子,默认开了ufw,SSH端口22被拦了。执行 sudo ufw allow 22 即可。
3.3.2 电脑端连接
确保电脑和开发板在同一个局域网内。查看开发板的IP地址:
ifconfig
# 或者
ip addr show
然后从电脑端连接:
ssh username@192.168.1.100
第一次连接会提示确认指纹,输入 yes 即可。我个人习惯用 -X 参数开启X11转发,这样可以在远程跑一些图形化调试工具:
ssh -X username@192.168.1.100
~/.ssh/config 里配置别名。比如:
Host rk3588
HostName 192.168.1.100
User root
Port 22
之后直接 ssh rk3588 就能连上,省得每次输IP。
3.4 文件传输工具:SCP与RSYNC
环境搭好了,接下来你得把YOLO的模型文件和代码传到开发板上。这里我常用两个工具——SCP和RSYNC。
3.4.1 SCP:简单直接
SCP基于SSH协议,用法跟cp差不多。传单个文件:
# 从电脑传到开发板
scp ./yolov8n.pt root@192.168.1.100:/home/project/
# 从开发板传到电脑
scp root@192.168.1.100:/home/project/log.txt ./
传整个目录加 -r 参数:
scp -r ./yolo_project/ root@192.168.1.100:/home/
SCP的好处是简单,但缺点也很明显——每次都是全量传输。如果你只是改了一行代码,它也会把整个目录重新传一遍。我早期做项目时,模型文件动不动几百兆,每次改完代码等传输都要半分钟……后来我换成了RSYNC。
3.4.2 RSYNC:增量传输才是王道
RSYNC最大的优势是增量同步。它只传输变化的部分,对于大项目来说效率提升非常明显。
基本用法:
# 同步本地目录到开发板
rsync -avz ./yolo_project/ root@192.168.1.100:/home/yolo_project/
# 参数说明:
# -a 归档模式,保留文件属性
# -v 显示详细信息
# -z 传输时压缩
如果你要排除某些文件(比如编译生成的临时文件),可以用 --exclude:
rsync -avz --exclude='*.o' --exclude='build/' ./yolo_project/ root@192.168.1.100:/home/yolo_project/
- 第一次用SCP全量传输模型文件和代码
- 后续修改代码时,用RSYNC增量同步
- 模型文件如果没变,RSYNC会自动跳过,省时间
3.4.3 实战对比
| 特性 | SCP | RSYNC |
|---|---|---|
| 传输方式 | 全量 | 增量 |
| 压缩支持 | 否 | 是(-z参数) |
| 断点续传 | 不支持 | 支持 |
| 适用场景 | 小文件、首次传输 | 大项目、频繁更新 |
嗯,这里要提醒一下——RSYNC虽然强大,但第一次使用时建议加 --dry-run 参数先预览一下要传输的文件列表,避免误操作覆盖了重要文件。
3.5 本章小结
到这步,你的开发环境基本就绪了。交叉编译工具链让你能在电脑上编译ARM代码,SSH让你远程操控开发板,SCP和RSYNC帮你高效传文件。下一章咱们会真正开始编译YOLO的C++推理代码,到时候这些工具都会派上用场。
我个人建议你花点时间把SSH的免密登录也配好(用ssh-keygen生成密钥对),这样后续操作会流畅很多。好了,动手试试吧,有问题咱们下节课接着聊。