小言_互联网的博客

正点原子-Linux资料学习笔记-系统移植篇-U-Boot使用实验-

493人阅读  评论(0)

1.U-Boot使用实验

    1)网络操作命令

          uboot是支持网络的,我们在移植uboot的时候一般都要调通网络功能,因为在移植linux kernel的时候需要使用到uboot的网络功能做调试。uboot支持大量的网络相关命令,比如dhcp、ping、nfs和tftpboot,

          我们接下来依次学习一下这几个和网络有关的命令。

          在使用uboot的网络功能之前先用网线将开发板的ENET2接口和电脑或者路由器连接起来,I.MX6U-ALPHA开发板有两个网口:ENET1和ENET2,一定要连接ENET2,不能连接错了。

          建议开发板和主机PC都连接到同一个路由器上!最后设置图1中所示的几个环境变量。

                                                                               图1 网络相关环境变量 

          图1中环境变量设置命令如下所示:


  
  1. setenv ipaddr 192.168 .1 .50
  2. setenv ethaddr 00: 04: 9f: 04:d2: 35
  3. setenv gatewayip 192.168 .1 .1
  4. setenv netmask 255.255 .255 .0
  5. setenv serverip 192.168 .1 .250
  6. saveenv

          注意,网络地址环境变量的设置要根据自己的实际情况,确保Ubuntu主机和开发板的IP地址在同一个网段内,比如我现在的开发板和电脑都在192.168.1.0这个网段内,所以设置开发板的IP地址为192.168.1.50,

          我的Ubuntu主机的地址为192.168.1.250,因此serverip就是192.168.1.250。ethaddr为网络MAC地址,是一个48bit的地址,如果在同一个网段内有多个开发板的话一定要保证每个开发板的ethaddr是不同的,

          否则通信会有问题!设置好网络相关的环境变量以后就可以使用网络相关命令了。

          1、ping命令

                开发板的网络能否使用,是否可以和服务器(Ubuntu主机)进行通信,通过ping命令就可以验证,直接ping服务器的IP地址即可,比如我的服务器IP地址为192.168.1.250,命令如下:

ping 192.168.1.250

                结果如图2所示:

                                                                图2 ping命令

                注意!只能在uboot中ping其他的机器,其他机器不能ping uboot,因为uboot没有对ping命令做处理,如果用其他的机器pinguboot的话会失败!

          2、dhcp命令

                dhcp用于从路由器获取IP地址,前提是开发板连接到路由器上的,如果开发板是和电脑直连的,那么dhcp命令就会失效。直接输入dhcp命令即可通过路由器获取到IP地址,如图3所示:

                                                            图3 dhcp命令

                从图3可以看出,开发板通过dhcp获取到的IP地址为192.168.1.50,和我们手动设置的一样,这很正常。同时在图3中可以看到“warning:nobootfilename;”、“TFTP from server192.168.1.1”这样的字样。

                这是因为DHCP不单单是获取IP地址,其还会通过TFTP来启动linux内核

            3、nfs命令

                nfs(NetworkFileSystem)网络文件系统,通过nfs可以在计算机之间通过网络来分享资源,比如我们将linux镜像和设备树文件放到Ubuntu中然后在uboot中使用nfs命令将Ubuntu中的linux镜像和设备树下载到开发板的DRAM中

                这样做的目的是为了方便调试linux镜像和设备树,也就是网络调试,通过网络调试是Linux开发中最常用的调试方法。

                原因是嵌入式linux开发不像单片机开发,可以直接通过JLINK或STLink等仿真器将代码直接烧写到单片机内部的flash中,嵌入式Linux通常是烧写到EMMC、NANDFlash、SPIFlash等外置flash中,但是嵌入式Linux开发也没有

                MDK,IAR这样的IDE,更没有烧写算法,因此不可能通过点击一个“download”按钮就将固件烧写到外部flash中。虽然半导体厂商一般都会提供一个烧写固件的软件,但是这个软件使用起来比较复杂,这个烧写软件一般用于量产的。

                其远没有MDK、IAR的一键下载方便.

                在Linux内核调试阶段,如果用这个烧写软件的话将会非常浪费时间,而这个时候网络调试的优势就显现出来了,可以通过网络将编译好的linux镜像和设备树文件下载到DRAM中,然后就可以直接运行。 

                uboot中的nfs命令格式如下所示:

nfs [loadAddress] [[hostIPaddr:]bootfilename]

                loadAddress是要保存的DRAM地址,[[hostIPaddr:]bootfilename]是要下载的文件地址。这里我们将正点原子官方编译出来的Linux镜像文件zImage下载到开发板DRAM的0x80800000这个地址处。

                准备好以后就可以使用nfs命令来将zImage下载到开发板DRAM的0X80800000地址处,命令如下:

nfs 80800000 192.168.1.250:/home/zuozhongkai/linux/nfs/zImage

                命令中的“80800000”表示zImage保存地址,“192.168.1.250:/home/zuozhongkai/linux/nfs/zImage”表示zImage在192.168.1.250这个主机中,路径为/home/zuozhongkai/linux/nfs/zImage。下载过程如图4所示:

                                                               图4 nfs命令下载zImage过程

                在图4中会以“#”提示下载过程,下载完成以后会提示下载的数据大小,这里下载的6071136字节,而zImage的大小就是6071136字节。

          4、tftp命令

                tftp命令的作用和nfs命令一样,都是用于通过网络下载东西到DRAM中,只是tftp命令使用的TFTP协议,Ubuntu主机作为TFTP服务器。因此需要在Ubuntu上搭建TFTP服务器,需要安装tftp-hpa和tftpd-hpa,命令如下:


  
  1. sudo apt-get install tftp-hpa tftpd-hpa
  2. sudo apt-get install xinetd

                和NFS一样,TFTP也需要一个文件夹来存放文件,在用户目录下新建一个目录,命令如下:


  
  1. mkdir /home/zuozhongkai/linux/tftpboot
  2. chmod 777 /home/zuozhongkai/linux/tftpboot

                这样我就在我的电脑上创建了一个名为tftpboot的目录(文件夹),路径为/home/zuozhongkai/linux/tftpboot。注意!我们要给tftpboot文件夹权限,否则的话uboot不能从tftpboot文件夹里面下载文件。

                最后配置tftp,安装完成以后新建文件/etc/xinetd.d/tftp,如果没有/etc/xinetd.d目录的话自行创建,然后在里面输入如下内容:


  
  1. server tftp
  2. {
  3. socket_type = dgram
  4. protocol = udp
  5. wait = yes
  6. user = root
  7. server = /usr/sbin/in.tftpd
  8. server_args = -s /home/zuozhongkai/linux/tftpboot/
  9. disable = no
  10. per_source = 11
  11. cps = 100 2
  12. flags = IPv4
  13. }

                 完了以后启动tftp服务,命令如下:

sudo service tftpd-hpa start

                 打开/etc/default/tftpd-hpa文件,将其修改为如下所示内容:


  
  1. # /etc/default/tftpd-hpa
  2. TFTP_USERNAME= "tftp"
  3. TFTP_DIRECTORY= "/home/zuozhongkai/linux/tftpboot"
  4. TFTP_ADDRESS= ":69"
  5. TFTP_OPTIONS= "-l -c -s"

                TFTP_DIRECTORY就是我们上面创建的tftp文件夹目录,以后我们就将所有需要通过TFTP传输的文件都放到这个文件夹里面,并且要给予这些文件相应的权限。

                最后输入如下命令,重启tftp服务器:

sudo service tftpd-hpa restart

                tftp服务器已经搭建好了,接下来就是使用了。将zImage镜像文件拷贝到tftpboot文件夹中,并且给予zImage相应的权限,命令如下:


  
  1. cp zImage /home/zuozhongkai/linux/tftpboot/
  2. cd /home/zuozhongkai/linux/tftpboot/
  3. chmod 777 zImage

                万事俱备,只剩验证了,uboot中的tftp命令格式如下:

tftpboot [loadAddress] [[hostIPaddr:]bootfilename]

                看起来和nfs命令格式一样的,loadAddress是文件在DRAM中的存放地址,[[hostIPaddr:]bootfilename]是要从Ubuntu中下载的文件。但是和nfs命令的区别在于,tftp命令不需要输入文件在Ubuntu中的完整路径只需要输入文件名即可

                比如我们现在将tftpboot文件夹里面的zImage文件下载到开发板DRAM的0X80800000地址处,命令如下:

tftp 80800000 zImage

                下载过程如图5所示:

                                                                               图5 tftp命令下载过程

                从图5可以看出,zImage下载成功了,网速为1.4MibB/s,文件大小为6071136字节。同样的,可以使用md.b命令来查看前100个字节的数据是否和图5中的相等。

                有时候使用tftp命令从Ubuntu中下载文件的时候会出现如图6所示的错误提示:

                                                                               图6 tftp下载出错

                在图6中可以看到“TFTPerror:'Permission denied'(0)”这样的错误提示,提示没有权限,出现这个错误一般有两个原因:

                1、在Ubuntu中创建tftpboot目录的时候没有给予tftboot相应的权限;

                2、tftpboot目录中要下载的文件没有给予相应的权限。

               针对上述两个问题,使用命令“chmod 777 xxx”来给予权限,其中“xxx”就是要给予权限的文件或文件夹。

    2)EMMC和和SD卡操作命令

          1、

 

 

 

 

 

 

 


转载:https://blog.csdn.net/qq_17639223/article/details/117386281
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场