TFTP(Trivial File Transfer Protocol),即普通文件传输协议,是用来传送文件的Internet软件程序,它比文件传输协议(FTP)使用简单,但是功能少。
在嵌入式系统中(特别是在开发初期),TFTP和NFS(网络文件系统)这两种方式常用来,为目标板从服务器上下载程序。下面就详细的介绍TFTP方式的使用,以及可能会出现的问题。
实验环境:
PC机:RedHat Linux9.0
ARM开发板: uClinux-2.4.x
其它:数据线若干
1.如何在Linux下配置TFTP:
首先用 rpm -qa|grep tftp查看是否安装,没有的话,安装一下。如下图所示:
![](https://i-blog.csdnimg.cn/blog_migrate/b8255a4e3371dc7ba2d5a30231b71e28.png)
假如已经安装好了,我们可以检查一下配置文件,文件位于/etc/xinetd.d/tftp:
![](https://i-blog.csdnimg.cn/blog_migrate/cdf9f34036d1cf29f833f9705c8b8826.png)
我们可以看到TFTP指定的目录是/tftpboot,所以我们把要下载的文件都放到这个文件夹里就行了,输入命令service xinetd restart重新启动tftp服务。
![](https://i-blog.csdnimg.cn/blog_migrate/130e9dc91a1d4c4781faeeee3859875e.png)
现在我们的tftp 服务器已经设置完成,可以使用tftp 和minicom 下载程序了,但是有一点需要注意,如果你启动了防火墙,有可能不能正常下载,我们需要打来端口69,在此我们也可以做如下选择,点击[应用程序]->[系统设置]->[安全级别],显示如下图,因为我们的开发办接在eth0 上,所以我们可以选择eth0为信任设备,点击[确定]即可,另外也可以在[其它端口:]的文本框里输入69:udp 也可以。
2.服务器端:
到达/根目录下,看看是否有个tftpboot文件夹,如果没有,新建一个,把来下载到目标板的文件放到里面,本实验所用的是一个简单的hello实验,运行后连续输出10个“hello”,程序如下,编译过程略,
![](https://i-blog.csdnimg.cn/blog_migrate/0204dbf26a4d2f24c622aadff50e3043.png)
![](https://i-blog.csdnimg.cn/blog_migrate/75a55fbe8f1ca408ca4b9d1b610ecf88.png)
上图红线方框中的hello文件就是待下载到目标板的文件。
3.目标板端:
上电启动,进入uClinux界面,tmp和/var两个目录下是以虚拟ram盘的方法实现的可读写目录(系统掉电后,里边保存的内容全丢失),故在进行符号链接时必须链接到这两个可读写的目录下。
![](https://i-blog.csdnimg.cn/blog_migrate/019d00fac16297c9b66da1e3aaec4e31.png)
进入tmp目录下,输入指令 tftp 192.168.0.100(服务器IP地址),即进入tftp状态,输入“?”即可看到tftp相的命令,输入 get hello,下载hello文件到目标板,输入quit命令退出TFTP模式,输入ls命令,我们就可以看到hello文件已经下载到了tmp目录下,./hello运行文件,这时会出现提示无法执行,原因是访问权限的问题,输入命令chmod 777 hello修改访问权限:
![](https://i-blog.csdnimg.cn/blog_migrate/d93a46162132323e6911f7d54d07483f.png)
重新运行,输入运行成功,连续输出10个hello,如下图所示:
![](https://i-blog.csdnimg.cn/blog_migrate/4795c4a01265c06701a0ff2733779f34.png)