嵌入式Uboot网络层



Uboot网络层配置


下面我们重启一下开发板,重启后:


net1.png


如图,你会发现又是3,这是怎么回事,我们可以想象一下因为我们现在这个uboot其实在开发板上运行起来,但是这些变量在哪里存着的,实际上我们要明白图上这些你能看到的变量都在内存中的一个小块去存的。


net2.png


如图,我们会讲到uboot其实在内存分布图(图左侧的大长方形)中它有这么一小块空间(图左侧大长方形中的小长方形)专门给我们的环境变量的内存空间,也就是说你现在看到的所有值或者你去修改或添加的都在我们RAM上,而这个RAM很显然是一时的。 图右侧大四边形其实是开发板,而开发板上其实还有块芯片叫FLASH,那么这个FLASH其主要目的就是保存东西用的,那么我们就需要一个动作把uboot这里面的内容拷贝到FLASH相关的空间里面(右侧大四边形中的小长方形)所以这个过程我们就需要注意在设计环境变量后一定要注意要saveenv一下,而这个把同没存搬移到FLASH上的这个命令我们统一叫saveenv,也就是说一旦使用saveenv就会看到如图中这样一个现象。


下面我们把他记住,就是说在saveenv中saveenv :才能把本次的设置的环境变量写回存储器,这个地方要注意为什么没有FLASH,因为我们后面看到源码就会发现saveenv它其实是一个通用接口,就说如果你配成saveenv就烧在FLASH里头。


net3.png


如图,其实这个部分大家一定要注意有点像我们在学习应用开发中printf一样,他实际上就是一个好像跟平台没有关系的,就是跟硬件没有关系的命令。但是具体怎么跟硬件打交道其实就是命令的内部实现。


所以它可以从uboot中,其实它的设计上已经像我们的应用驱动加硬件这样一种设计模型去靠近了。所以说这个大家可以在以后的学习中看到。


net4.png


如图,输入命令的时候要注意千万不要写错,有些同学说这里tab行不行,要记住在这里tab是不行的,因为这个不是shear所以tab是不行的。如果你稍微写错了就会出现又多了一个变量的问题。


net5.png


如图,我们输入命令“saveenv”点击回车键,其实你看打印信息也能看得出来是保存环境变量到NAND然后怎么NAND就是图下方这样一种操作,具体NAND为什么这样操作我们在讲arm的时候也说过,NAND实际操作是先“Erasing Nand”插完之后才能写,所以说这就是他的一个过程,然后在重启我们在试一下,那么这个在网卡初始化的时候要差一点,所以可能有点慢,大家稍微等一下。


net6.png


如图,大家看到这个的时候记得点任意键。然后回车就可以看到10就出来了。


所以说,这个uboot中前两个命令相对而言是比较简单的命令,然后nand命令是说明这个uboot跟nandflash的所以交互都可以通过nand命令来使用,这个命令等一下我们会用到,那么下面我们就来看一下在有了环境变量过后,我们就可以配置这个uboot的信息了。


配置这个uboot实际上就相当于我们在之前所说的目标机的信息就有了,而我们刚刚已经测试完主机也就是主机已经有东西了,和之前一样,我们之前环境搭建的时候说过,我们主要配网络,配完网络就主要测网络,所以下面我们来看在uboot中,如果它作为客户端他是怎么去测网络的,以及这个网络在测试过程中需要哪些相关的命令来辅助我们。


下面我们来看第一个就是说物理层的接口很简单,我们看灯亮没亮。然后我们再看网络端,之前我们说过网络端是怎么保证客户端跟服务器端相连的,就是说我们网络层是假象的连接,虽然通过物理来连接,但是从逻辑上他们是保证客户端跟服务端在同一个网段就可以了。


至于怎么保证:


net7.png


如图,PC中我们输入命令“ifconfig”就会显示我们刚刚配的双网卡中eth1中是10.110,假设我们把主机端称之为服务端,那么服务端就是10.110,那我现在只要保证我的开发板也是10网段的非110这些IP就可以。


那么该怎么保证我们来看一下,在我们的开发板中怎么去保证我们的环境,我们现在来看网络环境的相关信息:


net8.png


如图,那么在这个地方还是一样我们所谓uboot网络环境中它的网络层设置跟一个变量名叫做ipaddr有关,也就是说我们把ipaddr这个信息改变了那自然而然uboot这个地方的信息也就发生了一定的改变,那么怎么去改这个变量就要根据我们刚才讲的命令是一样“setenv ipaddr xxxxx”xxxxx代表你想要的IP。


net9.png


如图,我们可以看一下,因为我在给大家烧写uboot的时候,在之前已经也死了,就是死网的:ipaddr这里有个192.168.10.119,但是没关系你可以改,比如说我现在就变一下输入命令“setenv ipadder 192.168.9.120”我们换了一个网段,然后把这个虚拟机也换一个网段,这样我们就不用死网段我们用别的网段也能ping通或者也能去下载成功就可以了,然后点击回车键。


net90.png


如图,改是没有问题的了,但是记住千万小心不要写错了,有些同学就是因为粗心马虎把ipadder写错了最后导致实验做不出来。然后gatewip这个变量不用管,因为我们现在没有路由,所以跟网关没有关系我们现在主要是个局域网之间的互联互通,所以说只需要关心ipadder就可以了,当然netmask不用说了因为我们本身就是这个网段所以是三个255,下面我们也要保证我的客户端也要是相应的9网段就可以。


至于怎么做我们还是一样看一下做法,先打开之前的虚拟机,因为之前说的eth1是10.110,所以我们可以把它临时的改变一下,因为我们现在主要是要给大家验证一下:


net91.png


如图,输入命令“sudo eth1 192.168.9.110”我们还是9网段,然后点击回车键,就会发现我们已经改成9网段。


下面我们根据之前讲的内容网络环境中的网络层是通过ping来验证,那谁ping谁呢,当然从正常角度来讲谁ping谁都可以,主机ping服务器,服务器ping主机应该都能互相ping通才对。


那么这个地方一般情况下在我们的嵌入式开发中都是客户也就是我们的开发板去ping主机,你千万不要搞反了,就是说主机想要ping开发板理论上是可以但是由于我们这个开发板中uboot的设计,因为它本身就够精简了,它就没有把ping命令的那个协议,也就是说我们的数据包虽然能到开发板,但是开发板的回应包它不发,或者说它不想做这个功能就不给你回应,因为它为了精简所以说我们通过PC端去ping这个开发板,你永远ping不通,比如说:


net92.png


如图,我们输入命令“ping 192.168.9.120”点击回车键,就会发现我们永远ping不通。不是说数据没到,数据可能已经到了但是你的开发板中相关的ICMP协议中的AQ这个功能没有做进去。所以说你没有办法得到这个反馈信息,所以我们一定要注意要在开发板上去ping这个主机或者说ping这个PC:


net93.png


如图,输入命令“ping 192.168.9.110”点击回车键,记住他这个ping命令和我们PC ping命令不太一致,他做了很多的精简,当我们看到alive的时候我们就认为咱们的板子端的数据包就收到了也就是说明对方在。有的人不相信就换一个111,在这个环境中根本没有111,然后点击回车键,我们就会发现是not alive。


net94.png


如图,所以说在我们之前讲的双网卡配置到时候,我们可能第一步骤就需要考虑在配置这个网络层是否通过,因为要在网络层通过之后才能说传输,如果网络层都不通就更不要说传输层了。


所以说对于环境变量中的“setenv ipaddr”大家要记住后面去写你的IP地址就可以。


以上就是关于ipaddr的介绍。



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

logo
© 2012-2016 www.maiziedu.com
蜀ICP备13014270号-4 Version 5.0.0 release20160127

免费领取价值1888元求职宝典!

客服热线 400-862-8862

回到顶部