目标:建立tftp服务器,使得嵌入式开发板可以从虚拟机下载程序至开发板运行。
软件环境:winxp中使用vmware建立rhle5 linux系统
硬件环境:测试阶段无需开发板。
1、查询linux中tftp安装情况
在终端输入 :rpm -qa |grep tftp
显示:tftp-server-0.42-3.1
代表已经安装了tftp服务器程序,但是没有安装tftp客户端,所以在终端无法输入tftp命令。
如果没有安装可以挂载CentOS5.2光盘安装
[root@wk ~]# mount -t auto /dev/cdrom /mnt/cdrom
mount: block device /dev/cdrom is write-protected, mounting read-on
[root@wk ~]# cd /mnt/cdrom/CentOS
[root@wk CentOS]# rpm -ivh tftp-0.42-3.1.el5.centos.i386.rpm
[root@wk CentOS]# rpm -ivh tftp-server-0.42-3.1.el5.centos.i386.rpm
2、修改启动配置文件
默认情况下TFTP服务是禁用的,所以要修改文件来开启服务。
修改文件/etc/xinetd.d/tftp。主要是设置TFTP服务器的根目录,开启服务。
修改后的配置文件如下:
service tftp
{
disable = yes 把这里的yes改为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
}
这里指定/tftpboot 为tftp服务器的根目录
参数-s指定chroot,-c指定了可以创建文件
3、创建tftp根目录,关闭防火墙,启动tftp-server
[root@wk ~]# mkdir /tftpboot
[root@wk ~]# chmod -R 777 /tftpboot
[root@wk ~]# /etc/init.d/iptables stop
[root@wk ~]# service xinetd restart
重启xinetd服务,因为TFTP服务受控与xinetd服务,xinetd是管服务的服务,它是不开端口的。
所以要验证一下TFTP是否开启69端口起来了:
[root@wk ~]# netstat -nlp
udp 0 0 0.0.0.0:67 0.0.0.0:* 5172/dnsmasq
udp 0 0 0.0.0.0:67 0.0.0.0:* 4745/dhcpd
udp 0 0 0.0.0.0:69 0.0.0.0:* 6171/xinetd
udp 0 0 0.0.0.0:994 0.0.0.0:* 4633/rpc.rquotad
可以看到69端口已经打开,说明服务启动正常。
4、测试tftp服务器
[root@wk ~]# tftp 192.168.0.110
tftp>get
tftp>put
tftp>q
经过以上配置,linux的tftp服务器应能正常工作,不过有些特殊的情况会出现不能传输的问题,现象是将server_args保持默认目录即可访问,而改动到其他目录不运行,这时候通过查看系统日志,输入命令“tail var/log/messages”后看到“/tftpboot: Permission denied”则需要设置安全级别,即禁止selinux,可以通过如下操作:
以下介绍一下SELinux相关的工具
/usr/bin/setenforce 修改SELinux的实时运行模式
setenforce 1 设置SELinux 成为enforcing模式
setenforce 0 设置SELinux 成为permissive模式
如果要彻底禁用SELinux 需要在/etc/sysconfig/selinux中设置参数selinux=0