广东快3>WIKI库>学习嵌入式>嵌入式Uboot的tftp

嵌入式Uboot的tftp



Uboot下的tftp服务的使用


广东快3接下来我们来看根据之前所说的内容中的传输层,现在来看传输层,传输层中我们用一个什么样的命令来验证,大家来看就是tftp,就说tftp他跟ftp不太一致。ftp我们说它是一个文件传输协议没有问题。他底层走的是tcp协议,大家都知道tcp协议比较复杂,它涉及到发送确认等等,但是对于uboot来说它本身的目的不是为了网络,他就是为了启动加载内核的功能,所以说他根本就没有必要做这么复杂,所以说在uboot中我们并没有把tcp这个协议装进去,也就是说uboot这个软件中根本没有涉及tcp因为太大了,它只做了一个相对我们网络协议中比较精简的udp协议,udp如果说在之前你们学习网络编程中也能发现一个现象,就是udp这个协议的量很少只有一些很简单是信息就是原地址和目标端口。


广东快3所以uboot采用的是一个基于udp的文件传输协议叫tftp协议,那么这个tftp实际上一样也分了一种叫C/S这样一种模式也就是说有客户有服务器,这个没有说的,当然我们说一下C(客户端)这一端是我们的开发板来做,因为我们的板子资源本身就少,所以去做客户端要方便一点。那S(服务器)就是我们的PC。


所以这是我们在整个开发中用tftp来验证传输层在不在同时应用层是否可以。也就是说开发板中已经把客户端做进去了。


广东快3然后我们来看怎么用这个tftp相对而言比较复杂一点,因为我们现在的PC又可以分两个一个是Windows一个是Linux,然后在回忆下我们刚才说的那个图:


tftp1.png


如图,我们现在的这台PC中(图中最大四边形)实际上是有两个网卡一个是跟我们开发板(图右侧四边形)相连的网卡(最大四边形外的圆圈)还有一个是虚拟机(最大四边形中的小四边形)中的双网卡中的一个网卡(最大四边形中小四边形上的圆圈)这个网卡就是桥接到另一个网卡然后在跟开发板相连,所以说我们现在的问题就是从网络层角度来讲其实有两个网卡可以跟开发板相连。


广东快3下面我们就来看一下我的Windows也可以作为服务器,因为它从旁边的网卡中走出去,从网络层到传输层。当然我们也可以通过虚拟机的网卡走,因为我们刚才已经ping通这个网卡。


下面我就分别给大家说一下Windows和Linux其实思路是一样的,就是在Windows或者Linux上都运行一个tftp的服务端,然后在这个服务端中去共享相应的目录,然后把这个进行数据的传输和下载就可以。


我先说一下Windows,Windows比Linux简单得多,因为它操作起来比较方便,然后我们来看一下Windows一般在网络上去搜就搜得到。叫tftpd这样一个绿色的软件安装包,那么这个软件安装包大家把它下载下来过后,一启动就可以启动了,就是说咱们的服务端就起来了,然后我们后面用开发板把它连通就可以了,然后我们来看该怎么做这个事情。


tftp2.png


如图,在这个地方已经有一个tftpd这个可执行程序,然后我们双击打开就可以了,大家可以在网上下一个,然后在这个地方大家可以看到双击就可以,双击过后就把这个列表点到这里tftp server就起来了,所以Windows非常简单,然后唯一要变的就是因为tftp协议在走网卡的时候不一样,因为像我这台笔记本的话里面就有很多虚拟网卡。


广东快3所以就涉及到我们的数据从传输层到网络层的哪一个地方去传的问题,所以我们就要看把它绑定在哪一个网卡中,因为我的计算机中之前是10网段所以说有一个10.3,至于怎么认识10.3我们要看到这里:


tftp3.png


广东快3在之前我们说的开发板跟Windows相连的时候,是不是连的是这个本地连接,那么这个本地连接中我们点击右键属性的时候:


tftp4.png


广东快3如图,点击属性我这里把IP地址已经写死了,但我们等一下只要跟开发板一样就可以,但是我们现在Windows不改,因为Windows改我怕到时候路平会有问题,这样我们就不用管了,相当于这里已经把10.3展示出来了,就告诉我这个服务已经好了。current directory是我们这个共享目录,共享目录刚刚已经在本地磁盘D中的downbuild目录下的ok中放进去的,所以我们就把这个地方改一下:


tftp5.png


如图,这样的话我们共享文件就出来了。然后我们在服务端这条线已经走通了。它的IP是10.3端口不用管是它内部的服务已经做好的,然后现在是客户端,因为刚才把客户端改了现在把它改回10就可以如下图:


tftp6.png


如图,先输入命令“setenv ipaddr 192.168.10.120”然后我们在输入命令验证一下“ping 192.168.10.3”然后点击回车键,我们就会发现alive也代表192.168.10.3是存在的,所以说开发板跟Windows的网卡是没问题的。


广东快3下面我们要看客户端是怎么用,这个开发板是客户端根据之前学网络编程的时候,我们其实已经发现了,如果我们要写一个客户端比如说client那么一般来说这个问题,就在这后面跟一个server_ip,也就是说这个客户端该连接哪一个端口,然后做什么什么事情,所以我们设计成这样一个参数“./client server_ip port xxxx”来做。


也就是说,作为客户端来说他有很多疑问,这是我该连接谁连接哪个端口干些什么事情,这就是他要关心的三个事情,那我们的uboot中tftp5的做法他要稍微跟PC不太一致所以我们不管PC只管uboot,uboot中它server_ip 按理说是客户端通过输入参数给但是它变成了通过环境变量来取得也就是说我们这个目标地址是谁,我们就不管了,是在环境变量里面设,至于,在哪个环境变量中,大家下面来看一下:


tftp7.png


如图,这是这个serverip最好不要变所以说server_ip 变成了通过环境变量serverip来取得。那么我们现在想把server_ip 通过saveenv来变:


tftp8.png


广东快3如图,输入命令“setenv serverip ”当然我这里就不用变了因为本身serverip=192.168.10.3,就说明这本身就跟Windows的IP是一样的。


广东快3接下来我们再往下看,“./client server_ip port xxxx”的端口,因为这个命令本身的命令名字就叫tftp,所以说它这个端口就写死了,因为tftp是标准协议,也就是说这个port我们不用改因为tftp这个命令写死了,也就是说改是改不了的。然后干什么事情就涉及到我们tftp的目的是传东西所以说 xxxx : 干什么事情,由tftp 这个命令通过输入参数,就是说你要干什么是你是事情我们这个程序写不死只有靠你通过说参数的方式来给。


下面我们给大家演示一下输入参数,比如说“tftp 20008000 abc ”怎么理解,就是这三个东西,tftp是客户端,第二个参数是目标地址。其实就是我们传什么东西,其实就是三要素,目标地址是哪里我从哪里传然后传什么。当然传到目标,我们要先理解,传当然是从服务端传所以说目标就是20008000。20008000就是十六进制的目标地址。然后最后一个参数,abc就代表我们要传的是什么东西,有了这个想法后我们就来测试一下,为了测试这个我们在ok的目录下在创建一个新文件叫a.txt我们在这个文件中写“abcd”然后就说明这个文件已经有了,下面我们来看看我们怎么传:


tftp9.png


如图,我们输入命令“tftp 20008000 a.txt”在下载这个之前我们还要输入一个命令“md 20008000”md代表内存显示的意思,我们先看一看内存是什么,点击回车键后我们发现内存只的信息很乱,那么我们在输入命令“tftp 20008000 a.txt”如果说现在点击回车键后成功了就说明我们应用层到对方的应用层就已经通了,如果没成功大家下来就要慢慢查找原因,等一下我们会给大家演示还有哪些原因。


tftp90.png


广东快3如图,大家就可以看到这就是成功的现象,成功的现象就是done然后看到我们看到bytes transferred = 4,就代表我们刚刚在a.txt中写的abcd刚好四个字节。


tftp91.png


如图,我们在输入命令“md 20008000”点击回车键后我们就会发现abcd已经出来了。说明文件写什么我们就传到什么,如果说我们是一个可执行程序,把一个二进制文件放在这里然后把tftp下到一个内存中,然后把PC值指到这个内存,然后让它运行这个指令就可以了,所以说其实内核运行也是这个道理,把内核里的东西放到这个内存上然后再把PC指过去就可以跑了。


广东快3所以其实就是完成这样一个搬移的过程,下面我们来演示一下tftp一些常见的错误如下图:


tftp92.png


如图,就是第一种错误,我们输入命令“tftp 20008000 b.txt”因为我们之前只创建了a.txt如果输成了b.txt点击回车后就会有个“not found”如果出现这个问题,至少我们能够判定应用层通没通,这样的现象就代表应用层肯定是通了因为它找不到了,找不到就代表应用层肯定去问了一下。所以这个问题很好查,这个问题到时候你在共享目录中创建那个文件就可以,有些同学说我创建了为什么没有,那就注意一下你共享目录是不是写错了如下图:


tftp93.png


广东快3这就是我们在tftp中可能遇到的比较常见的问题,还有一种就是超时不断超时那么就有可能是如上图中的server interfac 根本就不在,也就是说不是10.3的。


以上就是告诉大家客户端是这样使用,不管服务端是Windows还是Linux用法都是一样的。



【本文由麦子学院独家原创,转载请注明出处并保留原文链接】

分享到:

目录