uboot 与环境变量操作、有线网卡传输有关的命令

环境变量相关的命令
一、printenv/print
(1)print命令不用带参数,作用是打印出系统中所有的环境变量。
(2)环境变量就好像程序的全局变量一样。程序中任何地方都可以根据需要去调用或者更改环境变量(一般都是调用),
环境变量和全局变量不同之处在于:全局变量的生命周期是在程序的一次运行当中,开始运行时诞生程序结束时死亡,
下次运行程序时从头开始;但是环境变量被存储在Flash的另一块专门区域(Flash上有一个环境变量分区),一旦我们在程序中
保存了该环境变量,那么下次开机时该环境变量的值将维持上一次更改保存后的值。


二、设置(添加/更改)环境变量:setenv/set
(1)用法:set name value

保存环境变量的更改:saveenv/save
(1)saveenv/save命令不带参数,直接执行,作用是将内存中的环境变量的值同步保存到Flash中环境变量的分区。注意:环境变量的保存是整体的覆盖保存,也就是说内存中所有的环境变量都会整体的将Flash中环境变量分区中原来的内容整体覆盖。

总结:彻底更改一个环境变量的值,需要2步:第一步set命令来更改内存中的环境变量,第二步用save命令将其同步到Flash中环境变量的分区。
有时候我们只是想测试下这个环境变量,不希望影响到下一次开机,那就只set不save,这样set后当前本次运行的uboot已经起效果了,只不过没save下一次开机还是会恢复到原来的状况。

网络、网卡网线传输相关的命令

一、网络测试指令:ping
(1)命令用法: ping ip地址
注意:ping是测试开发板和主机之间的网络链接,注意以下步骤:
1)首先要插上网线。
2)先试图ping通主机windows。注意Windows中有线网卡的地址设置(设置本地连接)。设置主机windows的本地连接IPv4地址
为192.168.1.10
3)第三步确认开发板中uboot里几个网络相关的环境变量的值对不对。最重要的是ipaddr(这个环境变量表示当前开发板的IP地址),
这个地址必须和主机windows的IP地址在同一个网段。


网段的概念:一个IP地址分为2部分,一部分是网段地址,另一部分是网段内的主机地址(由子网掩码来区分哪一部分是网段地址,
哪一部分是IP地址)。在子网掩码是255.255.255.0的情况下,192.168.1.10这个IP地址的前三部分(192.168.1.)属于网段地址,
第4部分(10)属于主机地址。


二、开发板和主机的ping通

1、开发板运行linux下和主机Windows的ping通
(1)先将开发板刷机成linux+QT镜像(刷机见裸机教程第三部分),然后启动进入linux命令行终端下。
(2)在linux下使用ifconfig命令将开发板中linux系统的IP地址设置为和主机windows同一网段(为了方便,以后就固定:主机windows本地连接的ip地址为192.168.1.10,开发板uboot或linux的地址为192.168.1.20,虚拟机ubuntu地址为192.168.1.141)
(3)此时开发板端ping windows通的。
(4)windows中ping开发板也是通的。
说明:首先开发板和主机的网络部分硬件都是好的,网络连接也是好的,主机windows中的网络软件设置是好的。

2、开发板运行linux下和虚拟机ubuntu的ping通
(1)在linux基础课中讲过:虚拟机的网卡设置可以选择好几种方式,常用的就是NAT和桥接(bridged)。
(2)虚拟机要和开发板进行网络通信,只能通过桥接方式连接。
(3)虚拟机要想被开发板ping通,设置步骤如下:
第一步:虚拟机设置成桥接方式。
第二步:虚拟机的菜单中有个“虚拟网络编辑器”,这里面要设置为桥接到有线网卡。(默认是自动的,自动的一般会影响ping通。因为电脑现在一般都有2个网卡:一个有线的一个无线的。如果选了自动,那么虚拟机会自动桥接到无线网卡上,但是我们却是通过有线网卡来连接开发板的,自然ping不通)
第三步:在虚拟机ubuntu中设置IP地址为192.168.1.141(可以通过/etc/network/interfaces文件来设置静态的然后重启;也可以直接命令行ifconfig去设置)
(4)此时开发板ping虚拟机ubuntu应该就通了。
(5)此时虚拟机ubuntu中ping开发板也是通的。

3、开发板运行uboot下和主机Windows的ping通
(1)刚才开发板运行linux时和主机windows、虚拟机ubuntu都ping通了,说明硬件和连接和主机设置没错。
(2)此时开发板重启进入uboot,设置好ipaddr、gatewayip,然后去ping windows发现还是不通。 怀疑uboot本身网络驱动有问题。
(3)然后同样情况下尝试去ping通虚拟机ubuntu,理论分析应该也不通,但是实际发现是通的。

4、开发板运行uboot下和虚拟机ubuntu的ping通
(1)uboot和虚拟机ubuntu互相ping通(前提是虚拟机ubuntu设置为桥接,且桥接到有线网卡,且ip地址设置正确的情况下)
结论:开发板中运行的uboot有点小bug,ping windows就不通,ping虚拟机ubuntu就通。

三、tftp下载指令:tftp
(1)uboot本身主要目标是启动内核,为了完成启动内核必须要能够部署内核,uboot为了部署内核就需要将内核镜像从主机中下载过来然后烧录到本地flash中。uboot如何从主机(windows或者虚拟机ubuntu)下载镜像到开发板上?有很多种方式,主流方式是:fastboot和tftp。
fastboot的方式是通过USB线进行数据传输。fastboot 是uboot 的一个命令,也是Windows系统在cmd命令行下的一个可执行程序,在Windows系统上安装好fastboot驱动后,在uboot的命令行下通过fdisk -c 0,进行flash分区,执行fastboot命令后,借助Windows的cmd命令行,可通过fastboot flash bootloader D:\fastboot\X210V3S镜像\android4.0.4\uboot.bin 来烧录uboot到flash,通过fastboot flash kernel D:\fastboot\X210V3S镜像\android4.0.4\zImage-android 来烧录Linux kernel,通过fastboot flash system D:\fastboot\X210V3S镜像\android4.0.4\zImage-qt 来烧录rootfs。
tftp的方式是通过有线网络的。典型的方式就是通过网卡网线,fastboot是近些年才新发展的。
(2)tftp方式下载时实际上uboot扮演的是tftp客户端程序角色,主机windows或虚拟机ubuntu中必须有一个tftp服务器,然后将要下载的镜像文件放在服务器的下载目录中,再在开发板中使用uboot的tftp命令去下载即可。
(3)有些人习惯在windows中搭建tftp服务器,一般是用一些软件来搭建(譬如tftpd32,使用起来比较简单);有些人习惯在linux下搭建tftp服务器,我就是在ubuntu上搭建的tftp服务器。
(4)我的虚拟机搭建tftp服务器的时候设置的tftp下载目录是/tftpboot,把要被下载的镜像复制到这个目录下。
(5)检查开发板uboot的环境变量,注意serverip必须设置为虚拟机ubuntu的ip地址。(serverip这个环境变量的意义就是主机tftp服务器的ip地址)
(6)然后在开发板的uboot下先ping通虚拟机ubuntu,然后再尝试下载:tftp 0x30000000 zImage-qt(意思是将服务器上名为zImage-qt的文件下载到开发板内存的0x30000000地址处。)
(7)镜像下载到开发板的DDR中后,uboot就可以用movi指令进行镜像的烧写了。
注意:
1)如果你是用的windows下的tftp服务器,那uboot的serverip就要设置为和windwos下tftp服务器的ip地址一样(windows下的tftp服务器软件设置的时候就有个步骤是让你设置服务器的ip地址,这个ip地址和主机windows必须在一个网段)。
2)整个过程中间环节比较多,实际做的时候可能最后会下载不下来。(譬如:第一步应该先保证uboot和ubuntu可以ping通;第二步再保证ubuntu中tftp服务器搭建没错;第三步再实现tftp下载。如果第一步有问题参考网络设置部分,第二步有问题(tftp本地测试下载ok,但是开发板就是不行),有一个解决方案就是使用windows下的tftp服务器)

四、nfs启动内核命令:nfs
(1)uboot中也支持nfs命令,但是我基本没用过。

猜你喜欢

转载自blog.csdn.net/qslv_bhlt/article/details/87881705