U-Boot 系统基础入门

第十章:交互式命令与内存操作

1. 常用环境变量命令

U-Boot提供了丰富的命令来管理系统环境变量,这些变量控制着系统的启动行为和各种配置参数。

1.1 printenv - 打印环境变量

printenv [name]

显示所有或指定的环境变量。

示例:

显示所有环境变量:

printenv

显示特定变量:

printenv bootcmd

1.2 setenv - 设置环境变量

setenv name value

设置或修改环境变量。

示例:

设置启动命令:

setenv bootcmd 'tftp 0x82000000 zImage; bootm 0x82000000'

删除变量(设置为空):

setenv myvar
注意: setenv命令只修改内存中的环境变量,要永久保存需要使用saveenv命令。

1.3 saveenv - 保存环境变量

saveenv

将当前环境变量保存到持久存储(通常是Flash或EEPROM)。

警告: 频繁使用saveenv可能会缩短Flash存储的寿命,因为Flash有有限的擦写次数。

2. 系统启动命令

2.1 bootm - 启动内核

bootm [address] [initrd_address] [fdt_address]

从指定地址启动内核镜像。

示例:

从内存地址0x82000000启动内核:

bootm 0x82000000

带initrd和设备树的启动:

bootm 0x82000000 0x83000000 0x84000000

2.2 tftp - 网络下载

tftp [address] [filename]

通过TFTP协议从网络服务器下载文件到指定内存地址。

示例:

下载内核镜像:

tftp 0x82000000 zImage
注意: 使用tftp前需要正确配置网络环境变量(ipaddr, serverip, netmask等)。

2.3 mmc - MMC/SD卡操作

mmc [read|write] device addr blk# cnt

对MMC/SD卡进行读写操作。

示例:

从MMC设备0的块100读取10个块到内存0x82000000:

mmc read 0 0x82000000 100 10

将内存数据写入MMC:

mmc write 0 0x82000000 100 10
警告: mmc write命令会覆盖存储设备上的数据,使用时务必小心。

3. 内存操作命令

U-Boot提供了一组强大的内存操作命令,用于调试和手动内存管理。

3.1 md - 内存显示

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

以字节(.b)、字(.w)或长字(.l)格式显示内存内容。

示例:

以字节格式显示内存:

md.b 0x82000000 10

以长字格式显示内存:

md.l 0x82000000 5

3.2 mm - 内存修改

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

交互式修改内存内容。

示例:

修改内存地址0x82000000处的值:

mm.w 0x82000000

然后按照提示输入新值。

3.3 mw - 内存填充

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

用指定值填充内存区域。

示例:

用0x12345678填充内存区域:

mw.l 0x82000000 0x12345678 10

内存操作技巧

  • 使用md检查数据是否正确写入
  • 在修改关键内存区域前先备份
  • 使用mw初始化内存区域
  • mm适合小范围精确修改

格式说明

  • .b - 字节 (8位)
  • .w - 字 (16位)
  • .l - 长字 (32位)

4. 命令参考表

命令 功能 常用选项
printenv 显示环境变量 [变量名]
setenv 设置环境变量 name value
saveenv 保存环境变量
bootm 启动内核 [addr] [initrd] [fdt]
tftp 网络下载 addr filename
mmc MMC/SD卡操作 read/write device addr blk# cnt
md 显示内存 .b/.w/.l addr [count]
mm 修改内存 .b/.w/.l addr
mw 填充内存 .b/.w/.l addr value [count]