u-boot的bootz命令详解

问:bootz命令在启动Linux内核时,如果不加任何参数,它从哪里启动内核?

在 U-Boot 中,bootz 命令用于启动 zImage 格式的 Linux 内核。如果 不加任何参数,它的默认行为是:

1. bootz 命令的基本语法

bootz [kernel_addr] [ramdisk_addr] [fdt_addr]

其中:

  • kernel_addr:内核镜像(zImage)的内存地址。
  • ramdisk_addr:可选,initrd(初始 RAM 盘)的地址,通常用于无根文件系统启动。
  • fdt_addr:可选,设备树文件(DTB)的地址,用于设备树架构(如 ARM)。

如果 不加任何参数

bootz

那么 U-Boot 默认会从环境变量中获取 loadaddr 作为内核地址


2. bootz 默认使用的内存地址

在 U-Boot 的环境变量中,通常有一个 loadaddr 变量,指向默认的内核加载地址:

loadaddr=0x80800000

因此,如果执行:

bootz

U-Boot 默认会尝试从 0x80800000 这个地址启动内核,等效于:

bootz 0x80800000

3. bootz 默认启动失败的情况

如果 该地址没有正确加载内核(zImage),那么 bootz 会报错:

Wrong Image Format for bootm command
ERROR: can't get kernel image!

这说明 U-Boot 在 loadaddr 指定的地址没有找到正确的 zImage


4. 典型的 bootz 启动流程

通常,U-Boot 在启动时会先 加载内核到 loadaddr 位置,再执行 bootz

fatload mmc 1:1 ${loadaddr} zImage   # 从 u-boot中的编号为1MMC设备的boot1(Boot Partition 1)加载内核到内存
bootz                                  # 使用默认地址 (${loadaddr}) 启动

或者:

bootz ${loadaddr} - ${fdt_addr} # 注意:符号-不是减的意思,而是代表不使用第2个参数。

这样 bootz 会:

  1. loadaddr 加载 zImage(即 0x80800000)。
  2. - 表示 不使用 ramdisk
  3. fdt_addr 加载设备树(DTB)。

5. 结论

如果不加参数执行 bootz

  • U-Boot 默认使用 loadaddr 变量作为内核地址(通常是 0x80800000)。
  • 如果该地址没有加载 zImage,则会报错
  • 建议在 bootz 之前,确保正确加载了内核(fatload、tftp 等)

如果你的系统报错,检查:

printenv loadaddr
printenv fdt_addr
md.l ${loadaddr} 10  # 查看内核数据是否存在

如果 loadaddr 处没有正确的 zImage,需要先加载它再执行 bootz

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值