服务端(Ubuntu端):
1、安装服务
//sudo apt-get install tftp-hpa tftpd-hpa xinetd(另一种)
sudo apt install tftp-hpa
sudo apt install tftp
2、新建配置文件
sudo vim /etc/xinetd.d/tftp
3、新建配置文件/etc/xinetd.d/tftp的内容
service tftp
{
disable = no
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /tftpboot -c
per_source = 11
cps = 100 2
flags = IPv4
}
其中:server_args = -s /tftpboot -c中的/tftpboot目录是Ubuntu与开发板互传文件的目录
4、/etc/default/tftpd-hpa配置文件的内容
TFTP_USERNAME=“tftp”
TFTP_DIRECTORY=“/tftpboot”
TFTP_ADDRESS=“:69”
TFTP_OPTIONS=“–secure -L -c -s”
其中:server_args = -s /tftpboot -c中的/tftpboot目录是Ubuntu与开发板互传文件的目录
5、在根目录创建tftp目录,并修改权限
mkdir /tftpboot //最终设备端tftp传过来的文件会保存在这个目录
sudo chmod 777 -R /tftpboot
6、重启tftp服务
//sudo /etc/init.d/xinetd reload (另一种)
//sudo /etc/init.d/xinetd restart (另一种)
sudo service tftpd-hpa start
sudo service tftpd-hpa restart
7、测试tftp是否成功
netstat -a|grep tftp
显示 :
udp 0 0 *:tftp :
则启动服务了
8、测试
切到需要获取文件到的当前目录:
比如当前目录在/home/luo/test,则运行一下指令后:
tftp +IP地址(如:127.0.0.1)
tftp > get test.txt
tftp > put test.c
tftp >
get时/tftpboot目录下有test.txt文件时,会把该文件下载到当前目录/home/luo/test
put时会将当前目录下的test.c传到/tftpboot目录下
出现错误:
【错误】Error code 0: Permission denied,是因为tftpboot文件夹没有权限,或者是要上传和下载的文件没有权限。
【解决】修改权限sudo chmod 777 -R /tftpboot
【错误】Error code 1: File not found,原因1:指定的文件不存在;原因2:tftpd启动参数中没有指定-c选项;原因3:目录有问题,因为安装的时候默认的tftp目录是【/var/lib/tftpboot】,您可以把test文件放在这个目录中重新测试一下,如果正确说明猜想是正确的。
【解决】原因1和原因2都好解决,这里只解决原因3:重启服务或者重启系统
9、以上都是为了保证Ubuntu能正常使用tftp,以下则是互传的精髓
客户端(设备端)[因为tftp是通过网络传输,所以需要先Ubuntu和开发版都能连接网络,能ping通]:
1、设备发送文件给Ubuntu:
先切到文件所在的目录,然后tftp -pl 文件 服务端IP(UbuntuIP192.168.1.108)
若出现进度条则表明能传输,传输完了之后在Ubuntu的/tftpboot目录下将能看到这里传过去的文件file
2、从Ubuntu下载文件到设备:
先切到要将文件下载到的目录,比如当前目录/mnt/mtd,然后:tftp -g -r filename 192.168.1.108
成功之后在当前目录/mnt/mtd下就能看到从Ubuntu传过来的文件filename