3. 配置TFTP服务
任务说明
本案例目标是在Ubuntu主机上配置TFTP服务,用于向目标板(ARM嵌入式Linux开发板)提供内核镜像(zImage/uImage)和设备树(.dtb)文件的下载。TFTP采用UDP 69端口,无认证机制,适合U-Boot引导阶段使用。
1. 安装TFTP服务端
sudo apt update
sudo apt install -y tftpd-hpa
2. 配置TFTP服务
编辑配置文件 /etc/default/tftpd-hpa:
sudo nano /etc/default/tftpd-hpa
内容如下:
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/srv/tftp"
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="--secure --create"
TFTP_DIRECTORY:TFTP根目录,所有下载文件均相对于此目录。TFTP_ADDRESS:监听所有网卡的69端口。--secure:限制访问仅限于TFTP根目录,防止路径穿越。--create:允许通过TFTP上传文件(可选,若仅下载可去掉)。
3. 创建根目录并设置权限
sudo mkdir -p /srv/tftp
sudo chown -R tftp:tftp /srv/tftp
sudo chmod -R 755 /srv/tftp
4. 放置内核与设备树文件
将编译好的内核镜像和设备树复制到TFTP根目录:
sudo cp ~/kernel/arch/arm/boot/zImage /srv/tftp/
sudo cp ~/kernel/arch/arm/boot/dts/your-board.dtb /srv/tftp/
sudo chown tftp:tftp /srv/tftp/zImage /srv/tftp/your-board.dtb
确认文件就位:
ls -l /srv/tftp/
5. 重启并验证服务状态
sudo systemctl restart tftpd-hpa
sudo systemctl status tftpd-hpa
预期输出中应包含 active (running),且监听 0.0.0.0:69。
6. 本机自测(验证路径)
安装客户端工具并测试下载:
sudo apt install -y tftp-hpa
cd /tmp
tftp 127.0.0.1 <<EOF
get zImage
quit
EOF
ls -l /tmp/zImage
判定标准:若 /tmp/zImage 存在且大小与 /srv/tftp/zImage 一致,则TFTP服务配置成功。
7. 目标板下载验证(交叉验证)
在U-Boot命令行中,确保主机IP与目标板IP在同一网段,执行:
setenv serverip 192.168.1.100 # 主机IP
setenv ipaddr 192.168.1.50 # 目标板IP
tftp 0x82000000 zImage
tftp 0x83000000 your-board.dtb
判定标准:U-Boot输出 Bytes transferred = xxx,且无超时或文件未找到错误,即表示目标板可通过TFTP成功下载内核与设备树。
8. 故障排查要点
- 连接超时:检查主机防火墙
sudo ufw status,若开启则允许69/udp:sudo ufw allow 69/udp。 - 文件未找到:确认文件名与TFTP根目录下完全一致(区分大小写)。
- 权限拒绝:确认
/srv/tftp下文件属主为tftp或权限为644。
验证判定标准汇总
| 检查项 | 命令/操作 | 通过条件 |
|---|---|---|
| 服务运行 | systemctl status tftpd-hpa | active (running) |
| 本机下载 | tftp 127.0.0.1 -c get zImage | 文件存在且大小一致 |
| 目标板下载 | U-Boot中执行 tftp 0x82000000 zImage | 输出 Bytes transferred,无错误 |
完成以上配置后,主机TFTP服务即可为目标板提供内核与设备树的下载通道,供后续U-Boot引导Linux内核使用。