TFTP(TrivialFile Transfer Protocol,简单文件传输协议)是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务。端口号为69。
TFTP协议专门为小文件传输而设计,只能从服务器上获取文件,或者向服务器写入文件,不能列出目录,也不能进行认证。
根据上面关于 TFTP 的介绍,实现TFTP,我们需要搭建一个TFTP 的服务器,ARM开发板当做客户端。
使用虚拟机 Ubuntu来当做服务器,下面我们先讲解一下服务器端的配置。
嵌入式Linux的ftp最常用来完成开发板和开发环境Linux系统之间的的文件传输功能,避免了频繁的U盘拷贝的过程。Linux下的tftp开发环境建立包括两个方面:一是Linux服务器端的tftp-server支持,二是嵌入式目标系统的tftp-client支持。本文将介绍基于Ubuntu14.04发行版的Linux服务器端tftp-server的配置和在主机和目标机之间的tftp文件传输方法。
我个人每次都是使用的是root账户登陆,避免每条命令之前加sudo,普通用户登陆登陆的话,需在命令加上sudo。
搭建TFTP服务所需要安装的软件有tftp-hpa,tftpd-hpa以及xinetd。
tftp-hpa是客户端软件,命令行输入命令为:apt-get installtftp-hpa
tftpd-hpa是服务端软件,命令行输入命令为:apt-get installtftpd-hpa
xinetd是新一代进程守护程序,命令行输入命令为:apt-get installxinetd
进入/etc目录,首先看目录中有没有一个xinetd.conf文件,如果没有则新建一个,有的话查看其内容:
catxinetd.conf
看是否与下面的一致,内容如下所示:
# Simple configuration file for xinetd
#
# Some defaults, and include/etc/xinetd.d/
defaults
{
# Please note that you need a log_typeline to be able to use log_on_success
# and log_on_failure. The default is thefollowing :
# log_type = SYSLOG daemon info
}
includedir /etc/xinetd.d
若不一致则运行如下命令,修改为相同即可。
gedit xinetd.conf
修改tftpd-hpa配置文件的内容:
gedit /etc/default/tftpd-hpa
将内容修改成:
# /etc/default/tftpd-hpa
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/tftpboot"
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="-l -c -s"
修改成功后,如下图所示,保存退出。
注解:TFTP_DIRECTORY="/tftpboot"表示tftp服务器的工作目录,用户可根据自己的实际情况进行更改。
指定了tftp服务的工作目录后,我们需要在相应的路径下建立该tftp工作目录,在根目录下新建文件夹tftpboot,命令为:
mkdir –p /tftpboot
修改工作目录的权限为777,777是最松的权限,这样不仅可以允许别的主机或者目标机下载,同时允许其上传文件。命令为:
chmod 777 /tftpboot
进入/etc下面的xinetd.d文件夹,查看是否有一个tftp文件,如果没有的话,就新建一个并输入以下内容,如果有的话就查看内容是否与下面的一致,不一致则修改,内容如下:
命令行命令:gedittftp
tftp文件内容:
servicetftp
{
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一行是配置服务器的文件存放的位置,就是进行tftp传输的时候,都是从该文件夹中搜索文件的。然后保存文件,并退出编辑。
每次修改完配置文件后,都需要重新启动一下服务。
重新启动TFTP命令: service tftpd-hpa restart
重新加载xinetd命令: /etc/init.d/xinetd reload
重新启动xinetd命令: /etc/init.d/xinetd restart
至此,嵌入式Linux系统下搭建TFTP开发环境大功告成,下面介绍如何测试TFTP
第一步:新建测试文件
首先在tftp的工作目录"/tftpboot"中新建一个文件test,在其中输入任意内容。
第二步:进入测试目录
然后进入任意一个不同于/tftpboot的目录(例如/opt目录下),然后在终端中输入如下命令,进入tftp命令符下。
tftp localhost3
第三步:获取测试文件
输入如下命令,再按回车,获取存放在tftp工作目录/tftpboot中的"test"文件。如果没有任何提示,就说明传输成功了。
get test4
第四步:退出TFTP测试
输入 q 退出tftp命令行。
在/opt目录下,就会出现test文件。
修改test文件后,可以在tftp命令中输入如下命令,把修改过的test文件上传到服务器文件夹中。
put test
参考:https://jingyan.baidu.com/article/6079ad0e80c99b28ff86dbdd.html
NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。
apt-get install nfs-kernel-server
安装过程弹出对话,选择Y,回车继续安装
在最后一行添加/opt *(rw,sync,no_root_squash)
– /opt表示要共享的目录,根据实际情况修改
– *:代表允许所有的网络段访问
– rw:是可读写权限
– ync:是资料同步写入内存和硬盘
– no_root_squash:是Ubuntu nfs 客户端分享目录使用者的权限,如果客户端使用的是root 用户,那么对于该共享目录而言,该客户端就具有root 权限。
/etc/init.d/portmaprestart
/etc/init.d/nfs-kernel-serverrestart
创建挂载点: mkdir /tmp/opt
挂载nfs: mount-t nfs 192.168.1.135:/opt/ /tmp/opt/
192.168.1.135是服务器的ip,即虚拟机的ip。
挂载成功之后通df -h可以查看挂载的情况
卸载nfs 和普通文件系统一样,使用 umount /tmp/opt
a. 将文件系统rootfs_p2放在nfs挂载点,即虚拟机的/opt目录
b. 将内核zImage 文件和设备树Z imx6dl-sabresd.dtb放在/tftboot下。
连接好板子的串口,打开xshell,或者putty。指定好端口号,波特率115200。然后打开板子电源,快速(我们的板子是1s内)按回车键(enter)。
在命令行依次输入以下命令:
setenv ip_dyn no
setenv ipaddr 192.168.1.131 //这是设置板子的ip
ping 192.168.1.135 //这是虚拟机的ip 答复host192.168.1.135 is alive,就ping通了。
setenv serverip 192.168.1.135
setenv nfsroot "/opt/rootfs_p2" //根文件系统在虚拟机的这个目录下:/opt/rootfs_p2
setenv netargs "setenv bootargs console=${console},${baudrate}${smp} root=/dev/nfs nfsroot=/opt/rootfs_p2 ip=dhcpnfsroot=${serverip}:${nfsroot},v3,tcp"
saveenv
run netboot
运行完run netboot命令之后,内核就启动了。内核,设备树,文件系统就使用了服务器上的文件,而不是mmc上的文件。
注:如果是调试阶段,每次重启都需要从服务器启动,则执行命令setenv bootcmd "run netboot"。
如果是mmc启动,则bootcmd=mmc