开发板:九鼎X210BV3S
uboot-IP:192.168.1.20
虚拟机:ubuntu16.04 x64IP:192.168.1.30
一、ubuntu搭建tftp环境
1.安装
sudo apt install tftp-hpa tftpd-hpa
tftp-hpa是客户端,tftpd-hpa是服务程序。
2.建立目录
mkdir /tftpboot # 在根目录下建立tftp传输目录,位置任意更改
sudo chmod 777 /tftpboot # 修改权限
sudo touch /tftpboot/test.txt # 建立文件
3.配置
vi /etc/default/tftpd-hpa # 编辑客户端文件
# 更改后内容如下:
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/tftpboot" # 这里是你的tftpd-hpa的服务目录
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="-l -c -s" #-l是以standalone/listen模式启动TFTP服务,-c是可以上传文件的参数,-s是指定tftpd-hpa服务目录
4. 重启服务
sudo service tftpd-hpa restart # 启动服务,采用独立的服务形式
5. 测试
cd /home
sudo touch test1.txt # 建立文件
tftp localhost # localhost 表示本机
tftp>get test.txt # 获取/tftpboot目录下的test.txt文件
tftp>put test1.txt # 把/home/test1.txt放到/tftpboot目录下
tftp>q
退出后,在/home目录下会有一个test.txt文件,在/tftpboot 目录下有test1.txt,表示tftp服务器安装成功!
二、配置uboot的环境变量
在uboot下面使用print命令可以打印出所有的环境变量,ipaddr为开发板IP,serverip为tftp服务器IP即ubuntu的IP,我的网络相关配置如下:
gatewayip=192.168.1.1
netmask=255.255.255.0
ipaddr=192.168.1.20
serverip=192.168.1.30
配置好了之后要确保开发板可以ping通ubuntu虚拟机,出现了host 192.168.1.30 is alive即说明配置成功。
x210 # ping 192.168.1.30
dm9000 i/o: 0x88000300, id: 0x90000a46
DM9000: running in 16 bit mode
MAC: 00:40:5c:26:0a:5b
operating at 100M full duplex mode
host 192.168.1.30 is alive
三、tftp下载镜像
上面两步成功之后,下面就要做最重要的事情了,从虚拟机下载镜像到开发板。于是出现了下面的情况:
x210 # tftp 30008000 zImage
dm9000 i/o: 0x88000300, id: 0x90000a46
DM9000: running in 16 bit mode
MAC: 00:40:5c:26:0a:5b
operating at 100M full duplex mode
TFTP from server 192.168.1.30; our IP address is 192.168.1.20
Filename 'zImage'.
Load address: 0x30008000
Loading: T T T T T T T T T T
Retry count exceeded; starting again
???虽然ping得通,但是不能下载!百度了很久之后,发现问题的原因是ubuntu没有关闭防火墙!!
操作 | 指令 |
---|---|
关闭防火墙 | ufw disable |
开启防火墙 | ufw enable |
查询防火墙状态 | ufw status |
卸载防火墙 | sudo apt remove iptables |
关闭了防火墙之后,即可tftp下载镜像到开发板!