简介
U-Boot的store命令用于向内存读写数据。语法如下:
store <operation> <address> <width> <count> store [byte|halfword|word] <address> <value>
operation可以是:
read: 读取内存数据
write: 写入内存数据
md: 显示内存数据(等同于 dump memory)
mm: 修改内存数据
cp: 内存块复制
mw: 写字符串到内存
mh: 修改内存数据(16进制)
width表示访问宽度,可以是:
0: 字节(8位)
1: 半字(16位)
2: 字(32位)
count表示要访问的个数。
举例
例子:
store write 0x1fc0000 0 8 :在地址0x1fc0000处写入8字节数据 store read 0x1fc0000 1 4 : 从0x1fc0000读取4个16位数据 store md 0x1fc0000 10 : 显示从0x1fc0000开始的10个32位内存数据 store mh 0x1fc0000 12 0x5678 :在0x1fc0000写入16进制数0x5678 store cp 0x1fc0000 0x2000000 0 8 : 将0x1fc0000处的8个字节拷贝到0x2000000 store mw 0x1fc0000 "hello" : 在0x1fc0000写入字符串"hello"
store命令给U-Boot提供了对内存进行方便操作的能力,是U-Boot中比较实用的命令之一.
store 操作其他设备
store命令主要用于操作内存,但是不仅仅只能操作内存。它还可以:
1.操作SDRAM - store命令可以读写U-Boot管理的SDRAM内存。
2.操作内部SRAM - store命令可以访问U-Boot自身所在的内部SRAM内存。
3.操作外部存储器 - store命令可以访问U-Boot外部连接的存储器,如NOR Flash、NAND Flash、SD卡等。这需要在U-Boot中先初始化这些外部存储器才能使用store访问。
4.访问MMIO区域 - store命令可以访问内存映射IO区域,从而实现对一些外设的访问。这同样需要U-Boot先设置好这些MMIO区域才能使用。
在store命令中,可以通过几个方面来区分它是在操作内存还是其他外设:
1.地址范围 - U-Boot中不同的存储资源有不同的地址范围,所以可以根据store指定的地址范围来判断。例如:
SDRAM 一般从0x80000000开始
内部SRAM 一般从0x00000000开始
NOR Flash 一般从0xBC000000开始
NAND Flash 一般从0x1000000开始
MMIO 区域地址由具体外设决定
所以根据store命令指定的地址就可以判断它在访问哪种存储资源。
2.初始化情况 - store命令只有在U-Boot初始化了对应的存储器后才能访问。所以如果某个存储器没有在U-Boot启动过程中初始化,store访问时会报错。这也是一个判断依据。
3.宽度选择 - 不同的存储器支持的访问宽度是不同的。SDRAM可以字节访问,也可以字访问,但是NOR Flash只支持字访问。所以store指定的width参数也是一个判断依据。
4.效果判断 - 在一些情况下,通过观察store命令的效果也能判断。例如向一个MMIO区域写入数据后,如果外设的状态或值发生了改变,就可以判断刚才访问的是MMIO区域。
所以,通过地址范围、初始化情况、宽度支持和最终效果等手段,我们可以判断在不同情况下store命令是在访问内存还是其他外设。需要对各存储器的信息有一定了解,然后结合store命令指定的参数来综合判断。
举例
将2个byte的数据写到emmc的certdata分区的起始位置
store write certdata 0x1080000 0 2