跳转至

在宿主机与单板之间传输文件

文档介绍宿主机与单板之间的文件传输,提供 SCP、SSH 管道与 TFTP 三种方式。

适用场景

适用于开发调试阶段在宿主机与单板之间传递文件或目录的场景。

所需条件:

  • 宿主机与单板网络互通,可通过 ping 验证
  • SSH 相关方式需单板已部署并运行 SSH 服务端(如 Dropbear),宿主机已安装 SSH 客户端
  • TFTP 方式需宿主机运行 TFTP 服务端,单板 busybox 内置 TFTP 客户端

步骤

通过 SCP 传输

SCP 基于 SSH 协议传输文件或目录,适合单文件或少量文件的日常传输。

从宿主机发送文件到单板:

scp /本地路径/源文件 root@单板IP:/远程路径/目标文件

发送目录时加 -r。从单板拉取文件到宿主机:

scp root@单板IP:/远程路径/源文件 /本地路径/目标文件

通过 SSH 管道传输

利用 SSH 将文件内容通过管道注入远程端或从远程端拉取,不产生中间压缩包。

实际场景中容易因屏幕定期打印字符导致传输错误,不推荐用此方式传输大文件。

从宿主机发送文件到单板:

ssh root@单板IP "cat > /root/目标文件" < /本地路径/源文件

从单板拉取文件到宿主机:

ssh root@单板IP "cat /root/源文件" > /本地路径/目标文件

传输目录时在宿主机端打包、通过管道在远程端解包:

tar -czf - /本地目录 | ssh root@单板IP "tar -xzf - -C /远程目标目录"

从单板拉取目录到宿主机时交换两端角色:单板端打包,宿主机端解包。

通过 TFTP 传输

当单板 SSH 服务不可用或需要传输大文件时使用 TFTP。宿主机运行 TFTP 服务端,单板作为客户端发起传输,下面以 /srv/tftp 为宿主机 TFTP 传输目录举例。

本项目 TFTP 默认目录关系:D:\tftp(Windows)→ /srv/tftp(Linux/WSL)→ /srv/tftp(Docker)。

配置宿主机 TFTP 服务端:

sudo apt-get install tftpd-hpa
sudo mkdir -p /srv/tftp
sudo chmod 777 /srv/tftp
sudo sed -i 's|TFTP_DIRECTORY=.*|TFTP_DIRECTORY="/srv/tftp"|' /etc/default/tftpd-hpa
sudo sed -i 's|TFTP_OPTIONS=.*|TFTP_OPTIONS="-c -s"|' /etc/default/tftpd-hpa
sudo systemctl restart tftpd-hpa

本项目环境安装已配置 TFTP,可跳过此步。

从宿主机发送文件到单板:

  1. 宿主机将文件放入 TFTP 传输目录:

    cp /本地路径/源文件 /srv/tftp/
    
  2. 单板端拉取文件:

    tftp -g -r 源文件 -l /root/目标文件 宿主机IP
    

从单板发送文件到宿主机:

tftp -p -l /root/源文件 -r 目标文件 宿主机IP

传输完成后文件出现在宿主机 /srv/tftp/ 目录下。

验证

传输后比对两端文件长度,确认无截断或损坏:

# 单板端
wc -c < /root/目标文件

# 宿主机端
wc -c < /本地路径/源文件

两端输出的字节数一致即传输完整。目录传输可汇总比对:

# 单板端
find /root/目标目录 -type f -exec wc -c {} + | tail -1

# 宿主机端
find /本地目录 -type f -exec wc -c {} + | tail -1

附录

相关文档