uboot启动内核命令:bootz、bootm、boot

文章介绍了Linux系统如何将镜像文件拷贝到DRAM中,包括从EMMC、NAND等存储设备以及通过nfs、tftp的方式。此外,详细阐述了UBoot中bootz、bootm命令的使用,以及它们在启动内核过程中的作用。同时提到了Image、zImage、uImage的区别。

目录

一、linux镜像拷贝到DRAM的方式

二、uboot启动内核可以有三个命令:bootz、bootm、boot

三、其它知识点


一、linux镜像拷贝到DRAM的方式

       要启动 Linux,需要先将 Linux 镜像文件拷贝到 DRAM 中,如果使用到设备树的话也需要
将设备树拷贝到 DRAM 中。

1、从 EMMC 、NAND 等存储设备中将 Linux 镜像和设备树文件拷贝到 DRAM

       从 EMMC 中启动 Linux 系统的话只需要使用命令 fatload 将 zImage 和 imx6ull-14x14-emmc-7-1024x600-c.dtb 从EMMC 的分区 1 中拷贝到 DRAM 中,然后使用命令 bootz 启动:
 

2、通过 nfs 或者 tftp 将 Linux 镜像文件和设备树文件下载到 DRAM 中

      使用 tftp 命令将 zImage下载到 DRAM的 0X80800000地址处,然后将设备树 imx6ull-14x14-emmc-7-1024x600-c.dtb 下载到 DRAM 中的 0X83000000 地址处,最后之后命令 bootz 启动,命令如下:

二、uboot启动内核可以有三个命令:bootz、bootm、boot

1、bootz

bootz 命令用于启动 zImage 镜像文件, bootz 命令格式如下:
          bootz [addr [initrd[:size]] [fdt]]

addr: Linux 镜像文件在 DRAM 中的地址;
[initrd[:size]]:initrd 是 initrd 文件在DRAM 中的地址,如果不使用 initrd 的话使用 ‘-’ 代替即可;
[fdt]]:fdt 就是设备树文件在 DRAM 中的地址。

2、bootm

bootm 用于启动 uImage 镜像文件,用法和bootz一样:
         bootm [addr [initrd[:size]] [fdt]]
 

3、boot

(1) boot 会读取环境变量 bootcmd 来启动 Linux 系统,具体的引导命令内容是可以修改的。

(2) 比如我们要想使用 tftp 命令从网络启动 Linux 镜像,所使用的命令如下:

(3) 如果想从 EMMC 启动Linux 镜像,所使用的命令如下:

        只要不修改 bootcmd 中的内容,以后每次开机 uboot 倒计时结束以后使用 bootcmd 设置好的方式启动内核。

4、这三个命令的实现函数在uboot源码的位置:cmd/bootm.c

三、其它知识点

1、Image、zImage、uImage的区别

(1) Image为内核映像文件,而zImage为内核的一种映像压缩文件,Image大约为4M,而zImage不到2M。

(2) uImage:它是uboot专用的映像文件,它是在zImage之前加上一个长度为64字节的“头”,说明这个内核的版本、加载位置、生成时间、大小等信息;其0x40之后与zImage没区别。
 

在U-Boot中,`bootz` 和 `bootm` 指令都是用于启动操作系统的命令,但是它们分别针对不同类型的内核镜像设计。 ### bootm `bootm` 命令主要用于启动压缩或未压缩的Linux Kernel镜像(通常是`.bin` 或 `.uImage` 格式)。它支持多种架构,并能够处理各种情况下的内核加载过程,例如解压、设置ATAG等。对于老版本的ARM Linux系统来说,使用的是ATAG机制传递启动参数给Kernel,此时我们会选择使用`bootm`。 语法示例: ``` bootm [addr [arg ...]] ``` 其中 addr 表示存放kernel映像的位置地址(一般位于RAM);如果需要传参,则可以继续添加后面的args部分表示额外附加信息如initrd位置及根文件系统所在等等内容。 ### bootz 而随着设备树(Device Tree Blob, DTB) 的引入,在较新的ARM平台下更倾向于采用device tree替代传统atags的方式描述硬件配置细节。于是有了专门适用于这种场景需求的新指令——即`bootz` 。该命令专为未经压缩的纯文本形式(zImage/xImage)以及与其关联联立使用的dtb文件准备而成。 语法结构类似于下面这样: ``` bootz zimage_addr [initrd_addr:initrd_size] [fdt_blob_addr] ``` 可以看到这里除了指定核心映象外还可以同时指明初始化ramdisk(initrd) 及其大小还有最终实际运行环境所依赖的具体板级描述符(devicetree blob). 总结起来说就是:`bootm` 更加通用一些, 它能适应更多种情形包括旧式的基于tags的数据交流模式; 而当面对现代化依靠devicetrees来表达全部必要属性设定值之时则应优先考虑运用`bootz`.
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值