TFTP(Trivial File Transfer Protocol,简单文件传输协议)是 TCP/IP 协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务,端口号为 69。
在 U-Boot 中也支持 TFTP 协议,可以通过 tftp 命令从服务端下载文件。服务端可以是 Linux,也可以是 Windows,只要支持 TFTP 服务就可以。
本文介绍如何在 Linux(虚拟机 Ubuntu 18.04) 下搭建 TFTP 服务,并实现在 U-Boot 中使用 tftp 命令下载 Linux 内核镜像文件到开发板 RAM 中。
搭建 TFTP 服务
- 打开终端,执行命令安装 tftp-hpa 和 tftpd-hpa:
sudo apt-get install tftp-hpa tftpd-hpa sudo apt-get install xinetd
- 在用户目录下新建 TFTP 工作目录,并赋予权限:
mkdir /home/alpha/tftpboot chmod 777 /home/alpha/tftpboot
- 新建文件 /etc/xinetd.d/tftp,填入以下内容:
server tftp { socket_type = dgram protocol = udp wait = yes user = root server = /usr/sbin/in.tftpd server_args = -s /home/alpha/tftpboot/ disable = no per_source = 11 cps = 100 2 flags = IPv4 }
- 启动 tftp 服务:
sudo service tftpd-hpa start
- 修改 /etc/default/tftpd-hpa 文件:
# /etc/default/tftpd-hpa TFTP_USERNAME="tftp" TFTP_DIRECTORY="/home/alpha/tftpboot/" TFTP_ADDRESS=":69" TFTP_OPTIONS="-l -c -s --secure"
- 重启 tftp 服务:
sudo service tftpd-hpa restart
文件下载
- 将 Linux 内核镜像文件拷贝到 TFTP 工作目录,并赋予权限:
- 配置 U-Boot 网络相关的环境变量,注意服务端 IP 要设置正确,且开发板 IP 和服务端 IP 要在同一网段下:
setenv ipaddr 192.168.0.232 # U-Boor IP 地址 setenv ethaddr 00:aa:bb:cc:dd:ef # MAC 地址 setenv gatewayip 192.168.0.1 # 网关地址 setenv netmask 255.255.255.0 # 子网掩码 setenv serverip 192.168.0.120 # 服务器 IP 地址 saveenv # 保存环境变量
- 保证开发板能够 ping 通服务端 IP:
- 使用 tftp 命令下载文件,80800000 为 zImage 在 RAM 中的存放地址:
tftp 80800000 zImage
- 通过终端打印的日志可以看到下载进度、传输速率等相关信息:
更多内容
- CSDN博客:@Hello阿尔法
- 哔哩哔哩:@Hello阿尔法
- 知乎:@Hello阿尔法