嵌入式Linux开发中,TFTP协议在很多场合都被用到,甚至是必不可少的,特别是在内核调试阶段,在U-Boot下通过TFTP协议从服务器上加载内核并运行,既方便又快捷。
一般的发行版默认都没有安装TFTP服务以及TFTP服务器。TFTP服务依赖于网络守护进程服务程序,可选择安装inetd或者升级版的xinetd,然后安装tftp和tftp-server,接着修改或者创建/etc/xinetd.d/tftp配置文件,最后重启xinetd,启动TFTP服务。无论采用什么发行版,TFTP服务器的安装都是这样的流程,只不过不同发行版的安装命令不同而已,下面以ubuntu为例进行说明。
一、首先查看自己版本下是否已经存在这个服务
root@ubuntu:/etc# tftp 127.0.0.1
The program 'tftp' can be found in the following packages:
* tftp-hpa
* tftp
Try: apt-get install <selected package>
root@ubuntu:/etc#
说明没有安装tftp服务
二、下面使用apt安装该服务
root@ubuntu:~# sudo apt-get install xinetd
安装成功以后在/etc/的目录下有一个文件 xinetd.conf 一个目录 xinetd.d 在目录下有几个准备被用的配置文件
安装tftp和tftpd:
root@ubuntu:~# sudo apt-get install tftp tftpd
或者安装tftp的增强版本tftp-hpa:
root@ubuntu:~# sudo apt-get install tftp-hpa tftpd-hpa (建议使用这个增强版本)
建立/etc/xinetd.d/tftp文件:
service tftp { socket_type = dgram protocol = udp wait = yes user = root server = /usr/sbin/in.tftpd server_args = -s /tftpboot/ disable = no per_source = 11 cps = 100 2 flags = IPv4 }
启动或者重启xinetd服务:
root@ubuntu:~# /etc/init.d/xinetd start/restart
查看是否启动成功
sudo netstat -a | grep tftp
本机测试。在/tftpboot目录下创建一个test文件,启动另外一个终端,输入:
root@ubuntu:~# tftp 127.0.0.1
tftp> get test #获取ky文件
tftp> q #退出tftp
在终端输入ls命令,可以看到当前目录下看到ftp获取到的test文件。
问题:(按照上述步骤安装仍然不成功或者出现得不到文件之类的错误)
1、关闭防火墙 ufw disable
2、get 命令Error code 1: File not found 这个问题说明tftp服务没有成功启动,
3、transfer timed out tftp 服务器没有成功启动
4. put 命令Error code 1: File not found 指定文件不存在,或者在/etc/xinetd.d/tftp 中的service_args中的参数没有-c
5、Error code 2: Only absolute filenames allowed 在/etc/xinetd.d/tftpd中设置的server_args为/etc/default/tftpd-hpa
cat /etc/default/tftpd-hpa
#Defaults for tftpd-hpa
RUN_DAEMON="no"
OPTIONS="-s /home/tftpd -c -p -U 077 -u tftpd"
设置的时候只要将server_args=改为你自己设定的服务器文件夹就行了
6.仍然不行,可以重启虚拟机啊尝试(这也是IT的惯例)