u-boot命令2

网络操作命令
uboot是支持网络的,我们在移植uboot的时候一般都要调通网络功能,因为在移植linux kernel的时候需要使用到uboot的网络功能做调试。uboot支持大量的网络相关命令,比如dhcp、ping、nfs和tftpboot,我们接下来依次学习一下这几个和网络有关的命令。
在使用uboot的网络功能之前先用网线将开发板的ENET2接口和电脑或者路由器连接起来,I.MX6U-ALPHA开发板有两个网口:ENET1和ENET2,一定要连接ENET2,不能连接错了,ENET2接口如图所示。

在这里插入图片描述

建议开发板和主机PC都连接到同一个路由器上!最后设置表中所示的几个环境变量。
环境变量 描述
ipaddr 开发板ip地址,可以不设置,使用dhcp命令来从路由器获取IP地址。
ethaddr 开发板的MAC地址,一定要设置。
gatewayip 网关地址。
netmask 子网掩码。
serverip 服务器IP地址,也就是Ubuntu主机IP地址,用于调试代码。
表30.4.4.1 网络相关环境变量
表30.4.4.1中环境变量设置命令如下所示:
setenv ipaddr 192.168.1.50
setenv ethaddr b8:ae:1d:01:00:00
setenv gatewayip 192.168.1.1
setenv netmask 255.255.255.0
setenv serverip 192.168.1.253
saveenv
注意,网络地址环境变量的设置要根据自己的实际情况,确保Ubuntu主机和开发板的IP地址在同一个网段内,比如我现在的开发板和电脑都在192.168.1.0这个网段内,所以设置开发板的IP地址为192.168.1.50。ethaddr为网络MAC地址,是一个48bit的地址,如果在同一个网段内有多个开发板的话一定要保证每个开发板的ethaddr是不同的,否则通信会有问题!设置好网络相关的环境变量以后就可以使用网络相关命令了。

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

在这里插入图片描述

192.168.1.253这个主机存在,说明ping成功,uboot的网络工作正常。
注意!只能在uboot中ping其他的机器,其他机器不能ping uboot,因为uboot没有对ping命令做处理,如果用其他的机器ping uboot的话会失败!

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

在这里插入图片描述 

开发板通过dhcp获取到的IP地址为192.168.1.137。同时在图中可以看到“warning:no boot file name;”、“TFTP from server 192.168.1.1”这样的字样。这是因为DHCP不单单是获取IP地址,其还会通过TFTP来启动linux内核,输入“? dhcp”即可查看dhcp命令详细的信息,

3、nfs命令
nfs(Network File System)网络文件系统,通过nfs可以在计算机之间通过网络来分享资源,比如我们将linux 镜像和设备树文件放到Ubuntu中,然后在uboot中使用nfs命令将Ubuntu中的linux 镜像和设备树下载到开发板的DRAM中。这样做的目的是为了方便调试linux镜像和设备树,也就是网络调试,通过网络调试是Linux开发中最常用的调试方法。原因是嵌入式linux开发不像单片机开发,可以直接通过JLINK或STLink等仿真器将代码直接烧写到单片机内部的flash中,嵌入式Linux通常是烧写到EMMC、NAND Flash、SPI Flash等外置flash中,但是嵌入式Linux开发也没有MDK,IAR这样的IDE,更没有烧写算法,因此不可能通过点击一个“download”按钮就将固件烧写到外部flash中。虽然半导体厂商一般都会提供一个烧写固件的软件,但是这个软件使用起来比较复杂,这个烧写软件一般用于量产的。其远没有MDK、IAR的一键下载方便,在Linux内核调试阶段,如果用这个烧写软件的话将会非常浪费时间,而这个时候网络调试的优势就显现出来了,可以通过网络将编译好的linux镜像和设备树文件下载到DRAM中,然后就可以直接运行。
我们一般使用uboot中的nfs命令将Ubuntu中的文件下载到开发板的DRAM中,在使用之前需要开启Ubuntu主机的NFS服务,并且要新建一个NFS使用的目录,以后所有要通过NFS访问的文件都需要放到这个NFS目录中。
uboot中的nfs命令格式如下所示:
nfs [loadAddress] [[hostIPaddr:]bootfilename]
loadAddress是要保存的DRAM地址,[[hostIPaddr:]bootfilename]是要下载的文件地址。

4、tftp命令
tftp命令的作用和nfs命令一样,都是用于通过网络下载东西到DRAM中,只是tftp命令使用的TFTP协议,Ubuntu主机作为TFTP服务器。因此需要在Ubuntu上搭建TFTP服务器,需要安装tftp-hpa和tftpd-hpa,命令如下:
sudo apt-get install tftp-hpa tftpd-hpa
sudo apt-get install xinetd
和NFS一样,TFTP也需要一个文件夹来存放文件,在用户目录下新建一个目录,命令如下:
mkdir /home/zuozhongkai/linux/tftpboot
chmod 777 /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

3 TFTP_USERNAME="tftp"
4 TFTP_DIRECTORY="/home/zuozhongkai/linux/tftpboot" 
5 TFTP_ADDRESS=":69"                                
6 TFTP_OPTIONS="-l -c -s" 
将zImage镜像文件拷贝到tftpboot文件夹中,并且给予zImage相应的权限,命令如下:
cp zImage /home/zuozhongkai/linux/tftpboot/
cd /home/zuozhongkai/linux/tftpboot/
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、EMMC和SD卡操作命令

mmc命令
从图30.4.5.1可以看出,mmc后面跟不同的参数可以实现不同的功能,如表30.4.5.1所示:
命令 描述
mmc info 输出MMC设备信息
mmc read 读取MMC中的数据。
mmc wirte 向MMC设备写入数据。
mmc rescan 扫描MMC设备。
mmc part 列出MMC设备的分区。
mmc dev 切换MMC设备。
mmc list 列出当前有效的所有MMC设备。
mmc hwpartition 设置MMC设备的分区。
mmc bootbus…… 设置指定MMC设备的BOOT_BUS_WIDTH域的值。
mmc bootpart…… 设置指定MMC设备的boot和RPMB分区的大小。
mmc partconf…… 设置指定MMC设备的PARTITION_CONFG域的值。
mmc rst 复位MMC设备
mmc setdsr 设置DSR寄存器的值
1、mmc info命令
mmc info命令用于输出当前选中的mmc info设备的信息,输入命令“mmc info”即可

在这里插入图片描述

2、mmc rescan命令
mmc rescan命令用于扫描当前开发板上所有的MMC设备,包括EMMC和SD卡,输入“mmc rescan”即可。
3、mmc list命令
mmc list命令用于来查看当前开发板一共有几个MMC设备,输入“mmc list”

4.mmc dev命令
mmc dev命令用于切换当前MMC设备,命令格式如下:
mmc dev [dev] [part]
[dev]用来设置要切换的MMC设备号,[part]是分区号。如果不写分区号的话默认为分区0。使用如下命令切换到SD卡:
mmc dev 0 //切换到SD卡,0为SD卡,1为eMMC

5、mmc part命令
有时候SD卡或者EMMC会有多个分区,可以使用命令“mmc part”来查看其分区,比如查看EMMC的分区情况,输入如下命令:
mmc dev 1 //切换到EMMC
mmc part //查看EMMC分区

mmc read命令
mmc read命令用于读取mmc设备的数据,命令格式如下:
mmc read addr blk# cnt
addr是数据读取到DRAM中的地址,blk是要读取的块起始地址(十六进制),一个块是512字节,这里的块和扇区是一个意思,在MMC设备中我们通常说扇区,cnt是要读取的块数量(十六进制)。比如从EMMC的第1536(0x600)个块开始,读取16(0x10)个块的数据到DRAM的0X80800000地址处,命令如下:
mmc dev 1 0 //切换到MMC分区0
mmc read 80800000 600 10 //读取数据
mmc write命令
要将数据写到MMC设备里面,可以使用命令“mmc write”,格式如下:
mmc write addr blk# cnt
addr是要写入MMC中的数据在DRAM中的起始地址,blk是要写入MMC的块起始地址(十六进制),cnt是要写入的块大小,一个块为512字节。我们可以使用命令“mmc write”来升级uboot,也就是在uboot中更新uboot。这里要用到nfs或者tftp命令,通过nfs或者tftp命令将新的u-boot.bin下载到开发板的DRAM中,然后再使用命令“mmc write”将其写入到MMC设备中。我们就来更新一下SD中的uboot,先查看一下SD卡中的uboot版本号,注意编译时间,输入命令:
mmc dev 0 //切换到SD卡
version //查看版本号


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值