Menu Close

U-Boot 内存操作命令

此文章介绍了 U-Boot 中有关内存的操作命令。

相关参考文章:SOC 教学教案

 

md

md 指令用于显示当前的 RAM 内存值。命令格式如下:

md[.b, .w, .l] address [Number of Objects]

其中 [.b, .w, .l] 表示了 byte,word,以及 long 三种变量格式;大小分别为 1 字节,2 字节,以及 4 字节。您可以选择如何显示 RAM 值。address 是您想看的 RAM 的起始地址。最后的 [Number of Objects] 指您想查询的数据长度。注意这个跟 RAM 显示值有关联。如果您选择使用长度为 20 的 RAM,并且选择用 .w,总长度就会是 20 * 2 = 40 字节。

如果您想看从 0x80000000 开始的前 20 字节的内存值,并且您选择显示为 .b,您可以使用以下命令:

md.b 8000000 14

为了显示出他们直接的差别,我们将运行以下三行命令:

md.b 8000000 10
md.w 8000000 10
md.l 8000000 10

其中第一个拥有 .b 格式且长度为 0x10,因此总共拥有 16 * 1 = 16 字节。

其中第二个拥有 .w 格式且长度为 0x10,因此总共拥有 16 * 2 = 32 字节。

其中第三个拥有 .l 格式且长度为 0x10,因此总共拥有 16 * 4 = 64 字节。

%title插图%num

 

nm

nm 命令用于更改指定地址的内存值。命令格式如下:

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

作为示范,我们将使用 .l 格式把 0x80000000 改成 0x12345678。

首先我们将执行以下命令:

80000000 代表当前的内存地址,3245101a 代表那个地址当前存储的信息。我们可以在 “?” 后输入您想修改的信息值。修改完后请键入 “q” 退出。

最后我们可以再次使用 md 命令查看修改是否成功。

%title插图%num

 

mw

mw 指令可以用于把一个指定的内存部分填充为您指定的值。命令格式如下:

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

其中 address 是将填充的内存起始地址,value 是将填充的内容,并 count 是填充长度。如果我们想使用 .l 把 0x10 个内存块使用 0x0A0A0A0A 填充,并且从 0x80000000 开始,我们将使用以下命令:

mw.l 8000000 0A0A0A0A 10

接下来我们可以使用 md 验证。

%title插图%num

 

cp

cp 命令用于把 DRAM 里的信息从一部分内存复制到另一部分。命令格式如下:

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

其中 source 是起始地址,target 是指定地址,且 count 是拷贝的长度。如果我们使用 .l 把 0x80000000 的信息复制到 0x80000100,并使用 0x10 的长度(0x10 * 4 = 64 字节),那么我们要使用的命令如下:

cp.l 8000000 8000100 10

首先我们看一下 0x80000000 和 0x80000100 存储的信息是什么。

%title插图%num

接下来我们将把 0x80000000 的信息复制到 0x80000100,并检查是否成功。

%title插图%num

 

cmp

cmp指令用于比较两段内存存储的信息是否一样。命令格式如下:

cmp[.b, .w, .l] [address 1] [address 2] [count]

其中 address 1 是第一部分内存的起始地址,address 2 是第二部分内存的起始地址,并 count 是比较的长度。如果我们要使用 .l 比较起始于 0x80000000 和 0x80000100 的信息是否一样,并设比较长度为 0x10(0x10 * 4 = 64 字节),命令如下。可以看到两段内存值相等。修改段位后,会发现不再有任何相等。

cmp.l 8000000 8000100 10

%title插图%num

Posted in 教材与教案

发表评论

相关链接