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/
📌 我的经验: 在实际部署YOLO时,我通常这样组合使用:
  • 第一次用SCP全量传输模型文件和代码
  • 后续修改代码时,用RSYNC增量同步
  • 模型文件如果没变,RSYNC会自动跳过,省时间

3.4.3 实战对比

特性 SCP RSYNC
传输方式 全量 增量
压缩支持 是(-z参数)
断点续传 不支持 支持
适用场景 小文件、首次传输 大项目、频繁更新

嗯,这里要提醒一下——RSYNC虽然强大,但第一次使用时建议加 --dry-run 参数先预览一下要传输的文件列表,避免误操作覆盖了重要文件。

3.5 本章小结

到这步,你的开发环境基本就绪了。交叉编译工具链让你能在电脑上编译ARM代码,SSH让你远程操控开发板,SCP和RSYNC帮你高效传文件。下一章咱们会真正开始编译YOLO的C++推理代码,到时候这些工具都会派上用场。

我个人建议你花点时间把SSH的免密登录也配好(用ssh-keygen生成密钥对),这样后续操作会流畅很多。好了,动手试试吧,有问题咱们下节课接着聊。