365beat-beat365官方网站手机版-365账号无法登陆

Uboot 多种方式 (booti、bootm、bootz、bootefi) 引导不同的内核镜像【全】

文章目录 1、Uboot 引导内核命令归纳2、Uboot 引导流程归纳3、bootm 命令4、booti 命令5、bootz 命令6、boot 命令7、Uboot如何运行Image.gz8、bootefi 命令 1、

Uboot 多种方式 (booti、bootm、bootz、bootefi) 引导不同的内核镜像【全】

文章目录

1、Uboot 引导内核命令归纳2、Uboot 引导流程归纳3、bootm 命令4、booti 命令5、bootz 命令6、boot 命令7、Uboot如何运行Image.gz8、bootefi 命令

1、Uboot 引导内核命令归纳

Uboot 的本质工作是引导 Linux内核,针对不同的内核镜像,Uboot 提供了不同的 boot 指令,如下:

命令描述内核镜像boot读取环境变量 bootcmd 来引导内核镜像booti引导 ARM64 内核镜像Imagebootm引导 u-boot自定义的内核镜像uImagebootz引导 ARM 内核镜像zImagebootefi引导 ARM64 压缩内核镜像Image.gz

2、Uboot 引导流程归纳

要启动 Linux内核,需要先将 Linux 内核镜像文件拷贝到 DRAM 中,如果使用到设备树的话也需要将设备树拷贝到 DRAM 中。可以从 EMMC 、 NAND 、U盘和硬盘等存储设备中将 Linux 镜像和设备树文件拷贝到 DRAM,也可以通过网络 nfs 或者 tftp 将 Linux 镜像文件和设备树文件下载到 DRAM 中。不管用那种方法,只要能将 Linux 内核镜像和设备树文件存到 DRAM 中就行,然后使用 Uboot 命令用于启动镜像文件。

3、bootm 命令

我们以 bootm 命令为例,引导 Uboot 自定义的内核镜像 (uImage)。

bootm addr [initrd[:size]] [fdt]

其中:

参数描述addrkernel Image文件所在的memory地址,必选[initrd[:size]]initrd文件在memory中的地址位置和大小size,可以不指定,使用“-”代替即可fdt设备树dtb文件在memory中的地址,在ARM64中,必选

执行 bootm 命令(三个参数依次是kernel地址、initrd地址、dtb地址),举例从EMMC中读取文件如下:

load mmc 0:1 $kernel_addr $kern_name

load mmc 0:1 $fdt_addr $fdt_name

bootm $kernel_addr - $fdt_addr

或者

load mmc 0:1 $kernel_addr $kern_name

load mmc 0:1 $fdt_addr $fdt_name

load mmc 0:1 $initrd_addr ramdisk.cpio.gz

bootm $kernel_addr $initrd_addr:$filesize $fdt_addr

4、booti 命令

booti 是 bootm 命令的一个子集,可用于执行位于内存中的ARM64 kernel Image(Image),其格式如下:

booti addr [initrd[:size]] [fdt]

booti 命令类似 bootm 命令 (三个参数依次是kernel地址、initrd地址、dtb地址),举例从USB中读取文件如下:

load usb 0:1 $kernel_addr $kern_name

load usb 0:1 $fdt_addr $fdt_name

booti $kernel_addr - $fdt_addr

或者

load usb 0:1 $kernel_addr $kern_name

load usb 0:1 $fdt_addr $fdt_name

load usb 0:1 $initrd_addr ramdisk.cpio.gz

booti $kernel_addr $initrd_addr:$filesize $fdt_addr

5、bootz 命令

bootz 命令用于启动 zImage 镜像文件, bootz 命令格式如下:

bootz addr [initrd[:size]] [fdt]

bootz 命令类似 bootm 命令 (三个参数依次是kernel地址、initrd地址、dtb地址),举例通过网络工具tftp传输文件如下:

tftpboot $kernel_addr $kern_name

tftpboot $fdt_addr $fdt_name

bootz $kernel_addr - $fdt_addr

或者

tftpboot $kernel_addr $kern_name

tftpboot $fdt_addr $fdt_name

tftpboot $initrd_addr ramdisk.cpio.gz

bootz $kernel_addr $initrd_addr:$filesize $fdt_addr

6、boot 命令

boot 命令也是用来启动 Linux 系统的,只是 boot 会读取环境变量 bootcmd 来启动 Linux 系统. bootcmd 是一个很重要的环境变量!比如我们要想使用 tftp 命令从网络启动 Linux 那么就可以设置 bootcmd 如下,然后使用 saveenv 将 bootcmd 保存起来。然后直接输入 boot 命令即可从网络启动 Linux 系统。 命令举例如下:

setenv bootcmd 'load mmc 0:1 $kernel_addr Image; load mmc 0:1 $fdt_addr xxx.dtb; booti $kernel_addr - $fdt_addr'

saveenv

boot

前面说过,uboot 倒计时结束以后就会启动 Linux 系统,其实就是执行的 bootcmd 中的启动命令。只要不修改 bootcmd 中的内容,以后每次开机 uboot 倒计时结束以后都会存储设备拷贝 内核 和 dtb文件,然后启动 Linux。

7、Uboot如何运行Image.gz

在 UBoot 中,有两种方式会用到 Image.gz 文件,一是通过 bootefi 命令引导系统时,使用的内核镜像格式;二是通过 booti/bootm 命令引导系统时,使用 gzip 压缩的内核镜像,则需要使用 gunzip 命令进行解压缩。 以下是在 UBoot 中启动 gzip 压缩的内核镜像的示例命令:

tftp $kernel_gz_addr Image.gz

gunzip $kernel_gz_addr

bootm $kernel_addr

这些命令的作用分别是:

命令作用tftp从 TFTP 服务器下载内核镜像到内存地址 0x91000000gunzip将内存地址 0x91000000 处的压缩文件解压缩到内存中bootm启动解压缩后的内核镜像,内核的起始地址为 0x90008000

需要注意的是: 在使用 gunzip 命令解压缩内核镜像时,需要确保解压后的内存地址不会与其他代码或数据冲突。否则可能会导致系统崩溃或无法正常启动。

8、bootefi 命令

然后使用 bootefi 命令来启动, bootefi 命令用于启动 Image.gz 镜像文件, bootefi 命令格式如下:

booti addr [initrd[:size]] [fdt]

执行 bootm 命令(三个参数依次是kernel地址、initrd地址、dtb地址),举例通过网络工具tftp传输文件如下:

load mmc 0:1 $kernel_addr EFI/BOOT/bootaa64.efi

load mmc 0:1 $fdt_addr xxx.dtb

bootefi $kernel_addr $fdt_addr

谢谢点赞关注哈!

← 上一篇: 机顶盒锁定了怎么解锁
下一篇: 如何查询app账户余额?app账户余额查询方法 →

相关推荐

茹萍电视剧作品

茹萍电视剧作品

本站部分文字及图片(包括剧照,海报,人物图片等)均来自于网络用户上传,不用于商业活动,个人或单位如认为电视猫网站上存在侵犯自身

前埃及主帅称萨拉赫在国家队贡献不够:他没任何成就

前埃及主帅称萨拉赫在国家队贡献不够:他没任何成就

萨拉赫可能是埃及最伟大的足球偶像,但前国家队主教练哈桑·谢哈塔表示,他在自己的国家队一无所获,这位利物浦球星在为国家队出场时必

欧路词典|英汉-汉英词典 pen是什么意思

欧路词典|英汉-汉英词典 pen是什么意思

I penned a few lines to him. 略写几行给他。 I penned a few words to father today. 今天给父亲写了一封短信。 She feels penned by her life as a housewife. 她觉得做家庭

马德兴:无“内治”无“外交”,国足凭什么进世界杯

马德兴:无“内治”无“外交”,国足凭什么进世界杯

体坛周报全媒体记者马德兴重庆报道 中国男足国家队6月10日晚在重庆进行的2026年美加墨世界杯预选赛亚洲区第三阶段18强赛小组赛最后一轮比赛

会计总分类账和手工账怎么登记

会计总分类账和手工账怎么登记

会计总账怎么登记呢?有许多的会计人员对于会计总账登记内容不太熟悉,这部分内容是许多会计人员所关注的问题,下面小编整理了关于会计总

Java 集合 遍历ArrayList

Java 集合 遍历ArrayList

之前我们分享了ArrayList示例和如何在 Java 中初始化ArrayList。 在这篇文章中,我们将分享如何在 Java 中迭代(循环)ArrayList。 循环ArrayList有四种