跳转到内容
新建笔记

Linux开发:tftp配置与使用

  1. window 端 window 端直接下载相关应用程序安装即可。

  2. linux 端

常用于传输内核、设备树、根文件系统

终端窗口
sudo apt install tftpd-hpa
终端窗口
sudo nano /etc/default/tftpd-hpa

修改为:

终端窗口
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/var/lib/tftpboot"
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="--secure"

3. 创建目录并设置权限

跳转到“3. 创建目录并设置权限”
终端窗口
sudo mkdir -p /var/lib/tftpboot
sudo chmod 777 /var/lib/tftpboot
终端窗口
sudo systemctl restart tftpd-hpa
sudo systemctl enable tftpd-hpa

命令行方式(开发板Linux环境)

跳转到“命令行方式(开发板Linux环境)”
终端窗口
# 从 TFTP 服务器获取文件
tftp -g -r filename 192.168.0.50
# 示例
tftp -g -r uImage 192.168.0.50
终端窗口
# 在 U-Boot 命令行
tftp 0x30000000 uImage
终端窗口
# Ubuntu 上复制文件到 TFTP 目录
cp myfile.bin /var/lib/tftpboot/
# 开发板上获取
tftp -g -r myfile.bin 192.168.0.50


📤 Ubuntu 端:放置文件

跳转到“📤 Ubuntu 端:放置文件”

方法1:直接复制文件到 TFTP 目录

跳转到“方法1:直接复制文件到 TFTP 目录”
终端窗口
# 复制任何文件到 TFTP 目录
cp /path/to/your/file /home/forlinx/tftp/
# 例如:
cp myapp /home/forlinx/tftp/
cp kernel.img /home/forlinx/tftp/
cp rootfs.tar.gz /home/forlinx/tftp/
# 查看 TFTP 目录内容
ls -lh /home/forlinx/tftp/

方法2:在 TFTP 目录下编译或生成文件

跳转到“方法2:在 TFTP 目录下编译或生成文件”
终端窗口
# 直接在 TFTP 目录工作
cd /home/forlinx/tftp/
# 编译程序
gcc -o myapp myapp.c
# 或者直接编辑文件
vim test.txt

📥 开发板端:获取文件

跳转到“📥 开发板端:获取文件”
终端窗口
tftp -g -r <文件名> <服务器IP>

参数说明:

  • -g: get,下载文件
  • -r: remote,指定远程文件名
  • -l: local,指定本地保存的文件名(可选)

Ubuntu 端:

终端窗口
# 编译你的程序
gcc -o hello hello.c
# 复制到 TFTP 目录
cp hello /home/forlinx/tftp/

开发板端:

终端窗口
# 下载程序
tftp -g -r hello 192.168.0.50
# 添加执行权限
chmod +x hello
# 运行程序
./hello

Ubuntu 端:

终端窗口
# 复制内核镜像
cp /path/to/uImage /home/forlinx/tftp/

开发板端(Linux 环境):

终端窗口
# 下载到 /tmp 目录
cd /tmp
tftp -g -r uImage 192.168.0.50
# 查看文件
ls -lh uImage

开发板端(U-Boot 环境):

终端窗口
# 在 U-Boot 命令行
tftp 0x30000000 uImage

Ubuntu 端:

终端窗口
# 创建配置文件
echo "server_ip=192.168.0.50" > /home/forlinx/tftp/config.txt
echo "port=8080" >> /home/forlinx/tftp/config.txt

开发板端:

终端窗口
# 下载配置文件
tftp -g -r config.txt 192.168.0.50
# 查看内容
cat config.txt

Ubuntu 端:

终端窗口
# 打包文件
tar -czf project.tar.gz /path/to/project/
# 复制到 TFTP
cp project.tar.gz /home/forlinx/tftp/

开发板端:

终端窗口
# 下载
tftp -g -r project.tar.gz 192.168.0.50
# 解压
tar -xzf project.tar.gz
# 查看
ls -lh

终端窗口
# 下载后保存为不同的名字
tftp -g -l my_local_name -r remote_file 192.168.0.50
终端窗口
# 先切换到目标目录
cd /tmp
tftp -g -r filename 192.168.0.50
# 或使用绝对路径
tftp -g -l /tmp/filename -r filename 192.168.0.50
终端窗口
# 使用 -v 参数查看传输进度
tftp -v -g -r filename 192.168.0.50

创建脚本 download_all.sh:

#!/bin/bash
FILES="uImage dtb.dtb rootfs.tar.gz"
for file in $FILES; do
echo "正在下载 $file ..."
tftp -g -r $file 192.168.0.50
if [ $? -eq 0 ]; then
echo "✓ $file 下载成功"
else
echo "✗ $file 下载失败"
fi
done

运行:

终端窗口
chmod +x download_all.sh
./download_all.sh

🔧 交互式使用(不推荐,但有时候需要)

跳转到“🔧 交互式使用(不推荐,但有时候需要)”
终端窗口
# 启动 TFTP 客户端
tftp 192.168.0.50
# 进入交互模式
tftp> get filename # 下载文件
tftp> put filename # 上传文件(如果服务器允许)
tftp> status # 查看状态
tftp> quit # 退出

场景:开发 ARM 程序并部署到开发板

跳转到“场景:开发 ARM 程序并部署到开发板”

第1步:在 Ubuntu 交叉编译

终端窗口
# 交叉编译(假设已安装交叉工具链)
arm-linux-gnueabihf-gcc -o myapp myapp.c
# 查看编译结果
file myapp
# 应该显示:myapp: ELF 32-bit ... ARM ...

第2步:放到 TFTP 目录

终端窗口
cp myapp /home/forlinx/tftp/

第3步:开发板下载

终端窗口
# 在开发板上执行
cd /tmp
tftp -g -r myapp 192.168.0.50
chmod +x myapp
./myapp

第4步:修改代码后重复

终端窗口
# Ubuntu 上修改代码
vim myapp.c
# 重新编译
arm-linux-gnueabihf-gcc -o myapp myapp.c
# 覆盖旧文件
cp myapp /home/forlinx/tftp/
# 开发板上重新下载(会覆盖)
tftp -g -r myapp 192.168.0.50
./myapp

终端窗口
# 实时查看 TFTP 访问日志
sudo tail -f /var/log/syslog | grep tftp
# 查看哪些文件被访问
sudo journalctl -u tftpd-hpa -f
终端窗口
# 列出所有可下载的文件
ls -lh /home/forlinx/tftp/

Error code 1: File not found

解决:

终端窗口
# 检查文件是否在 TFTP 目录
ls /home/forlinx/tftp/filename
# 确认文件名大小写
# TFTP 对文件名大小写敏感!
Error code 2: Access violation

解决:

终端窗口
# 修改文件权限
sudo chmod 644 /home/forlinx/tftp/filename
# 或修改整个目录
sudo chmod -R 755 /home/forlinx/tftp/
Transfer timed out

解决:

终端窗口
# 1. 检查网络连通性
ping 192.168.0.50
# 2. 检查服务是否运行
sudo systemctl status tftpd-hpa
# 3. 检查防火墙
sudo ufw allow 69/udp

完整测试流程:

终端窗口
# === Ubuntu 端 ===
# 创建测试文件
echo "Hello from TFTP" > /home/forlinx/tftp/test.txt
# 查看文件
cat /home/forlinx/tftp/test.txt
# === 开发板端 ===
# 下载测试文件
tftp -v -g -r test.txt 192.168.0.50
# 验证内容
cat test.txt
# 应该显示:Hello from TFTP

终端窗口
# 不用每次都复制文件到 TFTP 目录
ln -s /path/to/your/project /home/forlinx/tftp/project
# 开发板直接访问
tftp -g -r project/myapp 192.168.0.50

在 ~/.bashrc 添加:

终端窗口
alias tftp-put='cp $1 /home/forlinx/tftp/'
alias tftp-list='ls -lh /home/forlinx/tftp/'

使用:

终端窗口
source ~/.bashrc
tftp-put myapp # 快速复制到 TFTP
tftp-list # 快速查看

创建 deploy.sh:

#!/bin/bash
# 编译并部署到 TFTP
echo "编译中..."
arm-linux-gnueabihf-gcc -o myapp myapp.c
if [ $? -eq 0 ]; then
echo "编译成功,部署到 TFTP..."
cp myapp /home/forlinx/tftp/
echo "✓ 可以从开发板下载了: tftp -g -r myapp 192.168.0.50"
else
echo "✗ 编译失败"
fi

终端窗口
# 1. Ubuntu:准备文件
cp your_file /home/forlinx/tftp/
# 2. 开发板:下载文件
tftp -g -r your_file 192.168.0.50
# 3. 开发板:使用文件
chmod +x your_file # 如果是可执行文件
./your_file # 运行

就是这么简单!🎉

需要其他使用场景的示例吗?


来源:CSDN 原文,首次发布于 2025-12-27。