uboot常用命令汇总

目录

前言

1、信息查询命令(bdinfo、printenv、versionn)

2、环境变量操作命令(setenv、saveenv)

3、内存操作指令(md、nm、mm、mw、cp、cmp)

4、网络操作命令(ping、dhcp、nfs、tftp)

5、EMMC和SD卡操作命令

6、FAT格式文件系统操作命令(fatinfo、fatls、fstype、fatload、fatwrite)

7、EXT格式文件系统操作命令

8、NAND操作命令

9、BOOT操作命令

10、其他一些常用命令(reset、go、run)

参考资料


前言

以下内容为学习正点原子阿尔法开发板(I.MAX6ULL Linux开发板)U-BOOT使用章节的备忘总结。

1、信息查询命令(bdinfo、printenv、versionn)

bdinfo

printenv

version

2、环境变量操作命令(setenv、saveenv)

setenv 用于设置和修改环境变量的值当设置的内容为空时setenv用于删除环境;saveenv用于保存修改后的环境变量;一般环境变量是存放在外部 flash中的,uboot启动的时候会将环境变量从 flash读取到 DRAM中。所以使用命令 setenv修改的是 DRAM中的环境变量值,修改以后要使用 saveenv命令将修改后的环境变量 保存到 flash中,否则的话uboot下一次重启会继续使用以前的环境变量值。

3、内存操作指令(md、nm、mm、mw、cp、cmp)

1、.b .w .l分别表示以byte、word、long显示

2、address就是要查看的内存起始地址

3、数据长度单位不是字节,而是跟你所选择的显示格式有关。比如你设置要查看的内存长度 为20(十六进制为 0x14),如果显示格式为 .b的话那就表示 20个字节;如果显示格式为 .w的话就表示 20个 word,也就是 20*2=40个字节;如果显示格式为 .l的话就表示 20个 long,也就是20*4=80个字节。

4、uboot命令中的数字都是十六进制的!不是十进制的!

(1)显示内存值:md[.b, .w, .l] address [# of objects]

(2)修改指定地址的内存值,修改后地址不自增:nm [.b, .w, .l] address

(3)修改指定地址的内存值,修改后地址会自增:mm [.b, .w, .l] address

(4)用指定的数据填充内存:mw [.b, .w, .l] address value [count]

(5)数据拷贝:cp [.b, .w, .l] source target count

将 DRAM中的数据从一段内存拷贝到另一段内存中,或者把 Nor Flash中的数据拷贝到 DRAM

(6)数据比较:cmp [.b, .w, .l] addr1 addr2 count

4、网络操作命令(ping、dhcp、nfs、tftp)

使用网络操作命令前,先设置好环境变量

环境变量

描述

ipaddr

开发板ip地址,可以不设置,使用 dhcp命令来从路由器获取 IP地址。

ethaddr

开发板的MAC地址,一定要设置。

gatewayip

网关地址。

netmask

子网掩码。

serverip

服务器IP地址,也就是 Ubuntu主机 IP地址,用于调试代码。

(1)查看网络连接状态:ping

(2)自动获取IP地址:dhcp

(3)从ubuntu主机中下载文件:nfs [loadAddress] [[hostIPaddr:]bootfilename]

loadAddress是要保存的DRAM地址,[[hostIPaddr:]bootfilename]是要下载的文件地址

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中。虽然半导体厂商一般都会提供一个烧写固件的软件,但是这个软 件使用起来比较复杂,这个烧写软件一般用于量产的。

(4)从ubuntu主机中下载文件:tftp [loadAddress] [[hostIPaddr:]bootfilename]

loadAddress是要保存的DRAM地址,[[hostIPaddr:]bootfilename]是要下载的文件地址(使用TFTP时可以不用指定全名称,前提是在ubuntu主机上开启了tftpd服务并将该文件放置在了tftp服务器文件夹下)

5、EMMC和SD卡操作命令

(1)切换当前的mmc设备:mmc dev [dev] [part]

[dev]:用来设置要切换的MMC设备设备号(0是SD卡、1是eMMC),

[part]:是分区号。如果不写分区号的话默认为分区 0。

使用如下命令切换到 SD卡:
mmc dev 0 //切换到 SD卡, 0为 SD卡, 1为 eMMC

(2)查看分区:mmc part

比如查看 EMMC的分区情况,输入如下命令: 
mmc dev 1 //切换到 EMMC 
mmc part //查看 EMMC分区

图中可以看出,此时 EMMC有两个分区,扇区 20480~1024000为第一个分区,扇区 1228800~6504448为第二个分区。如果 EMMC里面烧写了 Linux系统的话, EMMC是有3个分区的,第 0个分区存放 uboot,第 1个分区存放 Linux镜像文件和设备树,第 2个分区存放根文件系统。但是在图中只有两个分区,那是因为第 0个分区没有格式化,所以识别不出来,实际上第 0个 分区是存在的。

(3)读取指令: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 //读取数据

(4)写指令: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设备中。

比如更新EMMC中的uboot: 
mmc dev 1 0 //切换到 EMMC分区 0 
tftp 80800000 u-boot.imx //下载 u-boot.imx到 DRAM 
mmc write 80800000 2 32E //烧写 u-boot.imx到 EMMC中 
mmc partconf 1 1 0 0 //分区配置, EMMC需要这一步!

6、FAT格式文件系统操作命令(fatinfo、fatls、fstype、fatload、fatwrite)

(1)查询指定分区的文件系统信息:fatinfo <interface> [<dev[:part]>]

interface:表示接口,比如 mmc

dev:是查询的设备号,0为SD卡、1为EMMC

part:是要查询的分区 

(2)查询FAT格式设备的目录和文件信息:fatls <interface> [<dev[:part]>] [directory]

interface:表示接口,比如 mmc

dev:是查询的设备号,0为SD卡、1为EMMC

part:是要查询的分区

directory:是要查询的目录 

(3)查询MMC设备某个分区的文件系统格式:fstype <interface> <dev>:<part>

interface:表示接口,比如 mmc

dev:是查询的设备号,0为SD卡、1为EMMC

part:是要查询的分区

fstype mmc 1:0 //查看EMMC分区0的文件系统格式 
fstype mmc 1:1 //查看EMMC分区1的文件系统格式 
fstype mmc 1:2 //查看EMMC分区2的文件系统格式

(4)将指定的文件读取到DRAM中:fatload <interface> [<dev[:part]> [<addr> [<filename> [bytes [pos]]]]]

interface:表示接口,比如 mmc

dev:是查询的设备号,0为SD卡、1为EMMC

part:是要查询的分区

addr:保存在DRAM中的起始地址

filename:要读取的文件名字

bytes:表示要读取多少字节的数据,为0或省略表示读取整个文件

pos:要读取的数据相对于文件首地址的偏移,为0或省略表示从文件首地址开始读取

fatload mmc 1:1 80800000 zImage //将EMMC分区1中的zImage文件读取到DRAM中的80800000地址处

(5)将DRAM中的数据写入到MMC设备中:

fatwrite <interface> <dev[:part]> <addr> <filename> <bytes>

interface:表示接口,比如 mmc

dev:是查询的设备号,0为SD卡、1为EMMC

part:是要查询的分区

addr:要写入的数据在DRAM中的起始地址

filename:要写入的文件名字

bytes:表示要写入多少字节的数据,为0或省略表示写入整个文件

7、EXT格式文件系统操作命令

这两种格式的文件系统的操作命令,常用的就四个命令,分别为:ext2load、 ext2ls、 ext4load、 ext4ls、ext4write。这些命令的含义和使用与 fatload、 fatls和 fatwrit一样,只是 ext2和 ext4都是针对 ext文件系统的。

 

8、NAND操作命令

 

9、BOOT操作命令

(1)启动Linux:bootz [addr [initrd[:size]] [fdt]]

addr:是 Linux镜像文件在 DRAM中的位置,

initrd:是 initrd文件在DRAM中的地址,如果不使用 initrd的话使用‘ ‘-’代替即可

fdt:就是设备树文件在 DRAM中的地址。

示例:通过tftp网络将zImage和设备树从ubuntu主机下载到DDR中:

tftp 80800000 zImage 
tftp 83000000 imx6ull-14x14-emmc-4.3-800x480-c.dtb 
bootz 80800000 - 83000000

示例:通过fatload将zImage和设备树从EMMC的分区1中拷贝到DDR中:

fatload mmc 1:1 80800000 zImage 
fatload mmc 1:1 83000000 imx6ull-14x14-emmc-4.3-800x480-c.dtb 
bootz 80800000 - 83000000

(2)启动Linux:boot

boot 命令也是用于启动Linux;boot命令是会读取bootcmd环境变量来启动Linux,bootcmd环境变量保存着引导命令也就是启动命令的集合,具体的引导命令内容是可以修改的。

示例:通过tftp网络将zImage和设备树从ubuntu主机下载到DDR中:

setenv bootcmd ' 
tftp 80800000 zImage; 
tftp 83000000 imx6ull-14x14-emmc-4.3-800x480-c.dtb; 
bootz 80800000 - 83000000;' //设置bootcmd环境变量 
saveenv //保存环境变量 

boot //启动Linux

示例:通过fatload将zImage和设备树从EMMC的分区1中拷贝到DDR中:

setenv bootcmd '
fatload mmc 1:1 80800000 zImage; 
fatload mmc 1:1 83000000 imx6ull-14x14-emmc-4.3-800x480-c.dtb; 
bootz 80800000 - 83000000;' //设置bootcmd环境变量 
saveenv //保存环境变量 

boot //启动Linux

10、其他一些常用命令(reset、go、run)

(1)重启:reset

(2)跳转到指定地址处执行应用:go addr [arg ...];多用于调试裸机程序

addr:应用在DRAM中的首地址

(3)运行环境变量中定义的命令:run 环境变量;多用于运行自定义环境变量

 

参考资料

《【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.3》

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值