2. 开发环境搭建:交叉编译工具链安装、刷机与系统烧录、SSH远程连接与文件传输
说实话,做工业缺陷检测模型移植,最怕的不是模型本身,而是环境搭不起来。我见过太多人卡在第一步——工具链装不上,板子刷不进去,连SSH都连不通。今天咱们就把这些基础活干利索。
2.1 交叉编译工具链安装
先说说交叉编译。你想想看,我们的模型最终要跑在嵌入式设备上,比如ARM架构的盒子。但开发是在x86的PC上。这就需要一个“翻译官”——交叉编译工具链。
为什么不用本地编译?嵌入式设备性能有限,编译个OpenCV可能要等半小时。在PC上交叉编译,几分钟搞定。
2.1.1 工具链的选择
我常用的几款工具链,列个表给你参考:
| 目标平台 | 工具链名称 | 下载来源 |
|---|---|---|
| ARM Cortex-A系列 | gcc-arm-linux-gnueabihf | Linaro官网 / 芯片厂商SDK |
| ARM Cortex-M系列 | gcc-arm-none-eabi | ARM官网 |
| RISC-V | riscv64-unknown-linux-gnu | SiFive / 芯片厂商 |
| 海思Hi35xx系列 | arm-himix200-linux | 海思SDK包内 |
我个人习惯用Linaro的版本,社区活跃,更新也及时。你在项目中遇到最多的是哪种?我猜是ARM Cortex-A,因为工业相机和边缘盒子大多用这个。
2.1.2 安装步骤
以ARM 32位工具链为例,操作很简单:
# 1. 下载工具链
wget https://releases.linaro.org/components/toolchain/binaries/latest/arm-linux-gnueabihf/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf.tar.xz
# 2. 解压到指定目录
tar -xvf gcc-linaro-*.tar.xz -C /opt/
# 3. 配置环境变量
echo 'export PATH=$PATH:/opt/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf/bin' >> ~/.bashrc
source ~/.bashrc
# 4. 验证安装
arm-linux-gnueabihf-gcc --version
2.1.3 避坑指南
我曾经遇到过一个问题:工具链装好了,但编译出来的程序在板子上跑不起来。后来发现是glibc版本不匹配。PC上的工具链glibc是2.27,板子上是2.23,直接报错。
解决办法有两个:
- 用板子厂商提供的工具链(最稳妥)
- 或者编译时静态链接:
-static参数
2.2 刷机与系统烧录
环境搭好了,接下来要把系统装到板子上。这一步叫“刷机”或“烧录”。说白了,就是把操作系统镜像写到板子的存储里。
2.2.1 准备工作
你需要准备三样东西:
- 烧录工具:不同芯片厂家有不同工具。海思用HiTool,瑞芯微用RKDevTool,全志用PhoenixCard。
- 系统镜像:通常是.img或.uboot文件。可以从厂商官网下载,也可以自己用Buildroot/Yocto编译。
- 硬件连接:USB线、串口线(TTL转USB)、电源线。
2.2.2 以海思Hi3516DV300为例
我记得第一次给海思板子刷机,折腾了一下午。后来总结出标准流程:
# 步骤1:安装HiTool
# 从海思SDK中解压HiTool,双击运行(Windows环境)
# 步骤2:连接板子
# USB线连PC,串口线连板子的调试口
# 板子上电,按住复位键
# 步骤3:烧录
# HiTool中选择“烧写eMMC”模式
# 加载uboot、kernel、rootfs三个镜像
# 点击“烧写”,等待进度条走完
# 步骤4:验证
# 串口终端看到启动日志,说明烧录成功
关键点: 烧录时千万别断电!我有个同事就是烧到一半断电,板子直接变砖,后来用JTAG才救回来。
2.2.3 系统烧录后的检查
刷完机别急着高兴,先做几个检查:
- 串口输出是否正常?有没有卡在某个驱动加载处?
- 网络接口能不能获取IP?
ifconfig看一下 - 存储空间够不够?
df -h确认一下
嗯,这里要注意:很多工业板子默认不开SSH服务,需要手动启动。我们下一节就讲这个。
2.3 SSH远程连接与文件传输
板子刷好了,总不能每次都插着串口线操作吧?SSH就是你的远程遥控器。有了它,你可以像操作本地电脑一样操作板子。
2.3.1 开启SSH服务
大多数嵌入式Linux默认用Dropbear(轻量级SSH服务器)。检查并启动:
# 检查SSH服务状态
ps | grep dropbear
# 如果没有启动,手动启动
/etc/init.d/dropbear start
# 设置开机自启
update-rc.d dropbear defaults
如果你用的是Buildroot编译的系统,记得在配置里勾选 BR2_PACKAGE_DROPBEAR。我刚开始做的时候老忘,每次都要重新编译,烦得很。
2.3.2 连接板子
PC端操作:
# 基本连接
ssh root@192.168.1.100
# 如果端口不是默认的22
ssh -p 2222 root@192.168.1.100
# 第一次连接会提示确认指纹,输入yes即可
ssh myboard 就行:
Host myboard
HostName 192.168.1.100
User root
Port 22
2.3.3 文件传输
模型移植过程中,文件传输是家常便饭。我常用的三种方式:
| 工具 | 适用场景 | 命令示例 |
|---|---|---|
| scp | 单个文件或小批量 | scp model.kmodel root@192.168.1.100:/home/ |
| rsync | 大量文件、增量传输 | rsync -avz ./models/ root@192.168.1.100:/home/models/ |
| nfs | 开发调试阶段 | 挂载PC目录到板子,实时同步 |
我个人最常用rsync。为什么?因为模型文件经常改,rsync只传变化的部分,省时间。有一次我传一个300MB的模型文件,用scp要等2分钟,用rsync第一次传完,后面改几行代码再传,几秒钟就搞定。
2.3.4 常见问题
连不上SSH? 先ping一下板子IP,能ping通说明网络没问题。再看板子上有没有开SSH服务,用串口进去查。
传文件很慢? 检查一下网线是不是百兆的。工业现场经常有人用劣质网线,跑不满千兆。换个六类线试试。
权限被拒绝? 看看目标目录的权限。我习惯把文件传到 /tmp 或 /home 下,这两个目录一般都有写权限。
小结
好了,开发环境这块就讲这么多。总结一下:
- 交叉编译工具链要选对版本,最好用厂商提供的
- 刷机时注意不要断电,变砖很麻烦
- SSH和文件传输是日常操作,rsync比scp更高效
下一章我们开始讲模型转换和量化,那才是真正的重头戏。环境搭好了,后面就顺了。有什么问题,咱们群里聊。
公众号:蓝海资料掘金营,微信deep3321