GoDm@'s Blog

u-boot常见命令

版权信息

warning

本文章为博主原创文章。遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。


U-Boot(Universal Boot Loader)是嵌入式系统开发中一个非常重要的组件,它负责在操作系统启动之前,进行基本的硬件初始化,并提供一个交互式的命令行接口,以便用户进行系统配置、内核加载等操作。掌握 U-Boot 的常见命令是嵌入式工程师的基本功。

本文将为您介绍一些 U-Boot 中最常用和最关键的命令及其用途。

一、 环境与信息查看命令

这些命令用于查看和管理 U-Boot 的运行环境和系统信息。

命令 用途 示例 备注
help? 显示所有可用命令的列表或特定命令的帮助信息。 help / help setenv ?help 的别名。
printenv 显示所有的环境变量及其值。 printenv 环境变量通常保存在非易失性存储介质中。
bdinfo 显示板级信息(Board Info Structure),如内存地址、大小等。 bdinfo
version 显示 U-Boot 的版本信息。 version

二、 环境变量操作命令

环境变量是 U-Boot 配置系统行为的关键,例如定义启动参数、网络设置等。

命令 用途 示例 备注
setenv 设置或修改一个环境变量的值。 setenv ipaddr 192.168.1.100 更改是临时的,只在当前 U-Boot 会话中生效。
saveenv 将当前内存中的环境变量保存到非易失性存储(如 Flash 或 eMMC)中。 saveenv 使环境变量永久生效。
run 执行存储在一个环境变量中的命令序列。 run bootcmd bootcmd 是一个重要的环境变量,定义了自动启动时执行的命令。
bootargs (特殊变量) 设置传递给 Linux 内核的启动参数。 setenv bootargs 'root=/dev/mmcblk0p2 console=ttyS0,115200' 通常在启动前设置。
bootcmd (特殊变量) 设定 U-Boot 自动启动时执行的命令。 setenv bootcmd 'tftp 0x42000000 zImage; bootm 0x42000000' 启动时若不打断,则执行此变量中的命令。

三、 内存与存储操作命令

这些命令用于读写内存、从外部存储加载数据、以及操作 Flash 等。

命令 用途 示例 备注
mw 内存写入(Memory Write),向内存地址写入指定值。 mw.l 0x40000000 0xDEADBEEF 10 .b (字节), .w (字), .l (长字) 指定写入单位。10是一个十六进制数
md 内存显示(Memory Display),查看指定内存地址的内容。 md.l 0x40000000 10 10是一个十六进制数,表示显示 10 个单位。
cp 内存拷贝(Memory Copy),在内存或存储之间复制数据。 cp.b 0x40000000 0x40100000 0x100 可用于从 NAND/SD/eMMC 等到 RAM 的复制。
erase 擦除 Flash 或其他存储区域。 erase 0x50000000 +0x100000 慎用!会清除数据。
nand / mmc / spi / sata 针对不同存储介质的操作命令。 mmc rescan / nand read 0x40000000 kernel 0x800000 具体命令取决于 U-Boot 配置和硬件支持。
cmp 比较两段内存地址的指定单位长度数据是否相等 cmp.l 80000000 80000100 10 .b (字节), .w (字), .l (长字) 指定写入单位。10是一个十六进制数

四、 网络与文件传输命令

在嵌入式开发中,通常通过网络(如 TFTP)从主机下载内核或文件系统镜像。

命令 用途 示例 备注
ping 测试网络连接。 ping 192.168.1.1 需要设置 ipaddrserverip 环境变量。
tftp 使用 TFTP 协议从服务器下载文件到内存。 tftp 0x42000000 zImage 0x42000000 是内存地址,zImage 是服务器上的文件名。
dhcp 通过 DHCP 获取板子的 IP 地址等网络参数。 dhcp
setenv (网络相关变量) 设置网络参数。 setenv ipaddr 192.168.1.10 / setenv serverip 192.168.1.1

issue#1:无法ping通

第一,检查环境变量,配置好ipaddr、ethaddr、netmask,确保与主机处于同一网段。

环境变量 用途
ipaddr 开发板ip地址
ethaddr 开发板MAC地址
netmask 子网掩码
gatewayip 网关地址
serveip 服务器 IP 地址,也就是主机 IP 地址,用于调试代码。
setenv ipaddr 192.168.137.144
setenv ethaddr yourethaddr
setenv netmask 255.255.255.0
setenv serverip 192.168.137.1
saveenv

第二,检查无误后,使用网线连接主机(电脑),发现无法ping通。

五、 系统启动命令

这些命令用于加载并启动操作系统内核。

命令 用途 示例 备注
bootm 启动一个由 mkimage 工具制作的、带有 U-Boot 映像头信息的内核或操作系统映像。 bootm 0x42000000 地址是内核在 RAM 中的加载地址。
bootz 启动一个 Linux zImage 格式的内核。 bootz 0x42000000 通常用于启动未被 mkimage 打包的 zImage。
bootbootd 执行 bootcmd 环境变量中定义的命令,实现默认启动。 boot bootdboot 的别名。

总结

U-Boot 的命令众多,但上述这些是日常开发和调试中最常用的。通过这些命令,您可以实现:

  1. 查看和修改配置: 使用 printenvsetenvsaveenv 管理启动参数和网络设置。

  2. 加载映像文件: 使用 tftpmmc read 等将内核、设备树(DTB)和文件系统加载到 RAM 中。

  3. 启动系统: 使用 bootmbootz 引导操作系统。

  4. 调试和诊断: 使用 mdmwping 等进行内存和网络测试。

在实际操作中,您可以通过输入 help 命令来获取当前 U-Boot 版本所支持的完整命令列表。希望这篇文章能帮助您更好地理解和使用 U-Boot!



共计约1.5k字。于2025/10/22首次发布,最后更新于2025/10/31。

本文章为博主原创文章。遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

AI辅助创作:本文部分内容由 Gemini 2.5 Flash 生成,最终版本由作者审核与修改。了解该AI模型

#u-boot |
  1. 一、 环境与信息查看命令
  2. 二、 环境变量操作命令
  3. 三、 内存与存储操作命令
  4. 四、 网络与文件传输命令
    1. issue#1:无法ping通
  5. 五、 系统启动命令
  6. 总结