本人纯小白,刚刚接触嵌入式Linux开发。这几天一直在搭建tftp及nfs服务器,今天刚刚在主机上完成nfs服务器的搭建,遂总结此文,方便自己记忆,有希望有资于其他小白。
望大神怒喷,指点一二。
参考文档:
1. TFTP
实验环境:
PC:Ubuntu12.04
其他:路由器 网线 串口线 开发板与PC处于同一网段。
TFTP(Trivial FileTransfer Protocol),即普通文件传输协议,是用来传送文件的Internet软件程序,它比文件传输协议(FTP)使用简单,但是功能少。
在嵌入式开发,特别是初期,利用TFTP下载内核,可大大减少内核下载的时间。(串口下载时间太长,USB下载配置太麻烦)。
嵌入式linux的tftp开发环境包括两个方面:一是linux服务器端的tftp-server支持,二是嵌入式目标系统的tftp-client支持。因为u-boot本身内置支持tftp-client,所以嵌入式目标系统端就不用配置了。我们要做的是在服务器端(即主机)上安装TFTP服务,并且正确地配置TFTP服务的路径和参数。
1、安装tftp所需软件包:
tftp有好几种版本,其中tftp和tftpd是最经典、最常用的。还有增强版,如atftp和atftpd、tftp-hpa和tftpd-hpa等。所以配置TFTP的方法也不唯一。
传统方法(xinetd):
sudoapt-get install tftp
sudoapt-get install tftpd
sudoapt-get install xinetd
tftp是客户端,作用是从别人的TFTP服务器端上传/下载东西。
tftpd是服务端,字母d代表daemon,作用是为别人提供TFTP服务,供别人上传/下载东西。
xinetd是inetd的扩展。inetd 服务器是一个专门管理入网连接的网络后台程序,xinetd现在已经取代inetd,它一个守护进程,用于处理对各种服务的请求。tftp是要用inetd来控制的。
2、创建TFTP目录
首先需要建立一个TFTP目录,以供上传和下载。当然也可以使用现有的目录。然后需要设定该目录的权限,决定是否能够下载和上传文件。对于日常使用,我们一般就将其权限设置为最高,为所有用户组都添加所有权限(读+写+执行=4+2+1=7):
sudomkdir /home/tftpboot
cd/home
sudochmod 777 tftpboot –R
我们的TFTP目录为/home/example/tftp,其权限已经是最高。
3、修改配置文件
对于xinetd方法,要在/etc/xinetd.d/下,修改配置文件tftp。如果是第一次使用,没有这个文件,需要自己创建一个空文件。可以利用touch指令:
cd/etc/xinetd.d
touchtftp
sudogedit tftp
在打开的文件中输入以下内容:
servicetftp
{
socket_type= dgram
protocol= udp
wait =yes
user =root
server =/usr/***in/in.tftpd
server_args= -s /home/tftpboot
disable =no
per_source= 11
cps = 1002
flags =IPv4
}
socket_type:网络套接字类型,流或者数据包
protocol:IP 协议,通常是TCP或者 UDP
user:运行进程的用户 ID,当前用户或root
server:执行的完整路径
server_args: 传递给server的变量或值。前面的-s代表tftp参数,后面/home/tftpboot是TFTP的根目录,可以根据自己实际情况来修改地址,如/home/example/tftp。
4、重新启动服务
如果用xinetd法,修改好tftp的配置文件后,需要重新启动一下xinetd。每次修改完配置文件后,都需要重新启动该服务:
sudo/etc/init.d/xinetd restart
5、确认tftp服务是否已经开启
查看tftp相关进程可以用以下指令:
psaux |grep tftp
弹出以下信息
root 2290 0.0 0.0 2364 120 ? Ss 19:45 0:00 /usr/***in/in.tftpd --listen --user donghai --address 0.0.0.0:69 -l-c -s /home/tftpboot
可以看到,/usr/***in/in.tftpd已经启动,说明TFTP服务已经开启了,进程号正是2290。
--listen对应配置文件中的参数 -l
--user donghai就是配置文件中的TFTP_USERNAME
/home/tftpboot是配置文件中的TFTP_DIRECTORY
另一种方法:
netstat-a|grep tftp
如果看到如下提示,说明TFTP服务开启了。
udp 0 0 *:tftp *:*
二、TFTP的使用
1、连接本机
连接本机有三种方法,一是输入真实的IP地址,可以用ifconfig查得;二是用localhost来代表本机;三是使用地址127.0.0.1,这个IP地址始终代表本机的IP。
先在TFTP目录下新建一个文件a,在里面随便写一些内容,然后修改其权限为777。接着,输入以下指令的任意一条,进入TFTP命令行。
tftp192.168.1.201 (自己设定的IP)
tftplocalhost
tftp127.0.0.1
TFTP命令行的基本指令:
put:将文件上传到TFTP目录
get:取得TFTP目录上的文件
quit/q:退出TFTP
因为TFTP服务将某一设定的目录视为根目录,因此不需要打出完整的路径。既然该目录下已经有一个文件a,我们就下面输入指令:
tftp>get a
Received 5 bytes in 0.0 seconds
tftp>put a
Sent 5 bytes in 0.0 seconds
这样就传输成功了。在方法1中,传输成功后会有时间的提示;而在方法2中,如果没有任何提示,则说明传输成功。