学习目标:

uboot命令使用学习(2)

学习内容:

学习使用了正点原子的I.MX6ULL教程及开发平台。
使用uboot的内存操作命令,直接对DRAM进行读写操作。
1、md
2、nm
3、mm
4、mw
5、cp
6、cmp

学习时间:

2022-05-29

学习产出:

一、md显示内存值

”md“命令用于显示内存值,格式如下:

md[.b,.w,.l] address [#of objects]

命令中的[.b,.w,.l]对应byte,word,long,也就是分别以1字节、2字节、4字节来显示内存值。address就是要查看的内存起始地址,[#of object]表示要查看的内存数据长度。这个数据长度的单位不是字节,而是跟所选择的显示格式有关。比如设置的产看数据长度为20(0x14),如果显示的格式为.b,那就表示20字节;如果显示的格式为.w,表示20个word,即20x2=40字节;如果显示的格式为.l,表示20个long,即20x4=80字节。另外uboot中的数字都是十六进制的,不是十进制的!

比如查看以0x80800000开始的16个数据,

md.b 80800000 10 (查看16字节数据)

md.w 80800000 10(查看16x2=32字节数据)

md.l 80800000 10(查看16x4=64字节数据)

如图:

uboot下测试sd卡和emmc uboot 读取内存数据_uboot下测试sd卡和emmc


二、nm命令修改内存值

nm名利给用于修改指定内存地址的值,命令格式如下:

nm[.b,.w,.l] address

nm命令同样可以用.b,.w,.l指定操作格式,比如现在以.l格式修改内存地址0x80000000的数据为12345678,在uboot命令行下输入:

nm.l 80000000

如图所示

uboot下测试sd卡和emmc uboot 读取内存数据_uboot下测试sd卡和emmc_02


80000000表示要修改的内存地址,ffffff7f表示内存地址80000000现在的值,?后面就可以输入要修改为的数据12345678,输入完毕后按下回车,在按下q推出即可。如图所示。

uboot下测试sd卡和emmc uboot 读取内存数据_内存地址_03


修改完后使用md命令查看是否修改成功

uboot下测试sd卡和emmc uboot 读取内存数据_uboot下测试sd卡和emmc_04


三、mm命令修改内存值

mm命令也是修改指定内存地址的值,使用mm命令修改内存地址的时候地址会自增。比如以.l格式修改从80000000内存地址开始的值,如图所示

uboot下测试sd卡和emmc uboot 读取内存数据_学习_05


四、mw命令

mw命令用于使用一个指定的数据填充一段内存,命令的内存格式如下:

mw[.b,.w,.l] address value [count]

mw命令同样可以以.b,.w,.l来指定操作格式,address表示要填充的内存起始地址,value为要填充的数据,count是填充的长度。比如使用.l格式将以80000000为起始地址的0x10个内存块(16x4=64字节)填充为0x12345678,然后使用md命令查看,如图所示。

uboot下测试sd卡和emmc uboot 读取内存数据_字节数_06


五、cp命令

cp是数据拷贝命令,用于将DRAM中的数据从一段内存地址拷贝到另一段内存地址,或者把NorFlash中的数据拷贝到DRAM中。命令格式如下:

cp[.b,.w,.l] source target count

cp命令同样可以以.b,.w,.l来指定操作格式,source为源地址,target为目的地址,count为拷贝的长度。例如使用.l格式将80000000处的数据拷贝到地址80000100处,长度为0x10个内存块(416=64字节),如图所示。

uboot下测试sd卡和emmc uboot 读取内存数据_uboot下测试sd卡和emmc_07


先使用命令md查看80000000和80000100处的数据,然后使用命令cp.l将从80000000开始的16个内存块拷贝到80000100内粗地址处,最后使用命令md查看80000100内存地址的数据。
六、cmp命令
cmp是比较命令,用于比较两段内存的数据是否相等,命令格式如下:
cmp[.b,.w,.l] addr1 addr2 count
cmp命令同样可以以.b,.w,.l来指定操作格式,addr1为第一段内存首地址,addr2为第二段内存首地址,count为要比较的长度。例如使用.l格式来比较80000000和80000100这两个内存地址中的数据是否相等,比较的长度为0x10(4
16=64字节),如图所示。

uboot下测试sd卡和emmc uboot 读取内存数据_内存地址_08


两个内存地址中的数据相等。再来比较80000200和80000400为首地址的内存数据是否相等。如图所示。

uboot下测试sd卡和emmc uboot 读取内存数据_uboot下测试sd卡和emmc_09


可以看出以这两个内存地址为首地址中的内存数据并不相等。