一般情况bootm命令对应do_bootm函数。如果在do前加下划线_do_xxx表示为内部调用函数 (1)命令名前加do_即可构成这个命令对应的函数,因此当我们bootm命令执行时,uboot实际执行的函数叫do_bootm函数,在cmd_bootm.c。 (2)do_bootm刚开始定义了一些变量,然后用宏来条件编译执行了secureboot的一些代码(主要进行签名认证...
U-boot (Unified Bootloader)是一种流行的开源引导加载程序,主要用于嵌入式系统的引导启动。在开发嵌入式系统时,通常需要将Linux内核加载到内存中,并启动Linux操作系统。在U-boot中,有一个非常重要的命令是“do_bootm_linux”,它用于加载并启动Linux内核。 在U-boot中,执行“do_bootm_linux”命令会先从存储器中加...
代码执行。 do_bootm_linux中: void (*theKernel)(int zero, int arch, uintparams); …… theKernel = (void (*)(int, int, uint))images->ep; …… theKernel (0, machid, bd->bi_boot_params); int do_bootm_linux(intflag, int argc, char * const argv[], bootm_headers_t *images...
以下为其主要执行流程: 以上流程最终会调用特定os的启动函数,例如需要启动armv8架构的linux,则其调用的接口为arch/arm/lib/bootm.c中的do_bootm_linux。以下为其执行流程: 上面的流程都比较直观,有兴趣的同学可以对照代码自行分析一下
uboot启动内核时实际是用\common\cmd_bootm.c中的do_bootm函数来实现的。 do_bootm函数中通过使用条件编译控制CONFIG_ZIMAGE_BOOT宏开关来实现uboot对于zImage压缩镜像的支持与取消支持。 1、do_bootm对zImage的解析 通过读取zImage的头部的第36字节开始的四个字节与LINUX_ZIMAGE_MAGIC(0x016f2818)标志位对比,...
Uboot-1.1.2 之bootm命令定义 bootm命令宏定义如下: U_BOOT_CMD( bootm, CFG_MAXARGS, 1, do_bootm, "bootm - boot application image from memoryn", "[addr [arg ...]]n - boot application image stored in memoryn" "tpassing arguments 'arg ...'; when booting a Linux kernel,n"...
(do_bootm_linux)*/ /*内核也位于加载地址了,是不是就可以在入口地址启动内核了?不是!PC机启动时BIOS会检测内存,flash告诉内核*/ /*同样uboot也要告诉内核一些启动参数;之后才会跳到入口地址启动内核*/ theKernel = (void (*)(int, int, uint))addr; /*hdr->ih_ep头部入口地址*/ theKernel = (void...
uboot在接受到启动命令后,要做的主要是: 【1】读取内核头部, 【2】移动内核到合适的加载地址, 【3】启动内核,执行do_bootm_linux do_bootm_linux主要做的为: (1)设置启动参数,在特定的地址,保存启动参数,函数分别为setup_start_tag,setup_memory_tag,setup_commandline_tag,setup_end_tag,根据名字我们就知道...
一:do_bootm函数 (1)内核启动的时候通过bootm 30008000来启动内核,bootm这个命令对应的函数就是do_bootm。 (2) 1 #define LINUX_ZIMAGE_MAGIC 0x016f2818 LINUX_ZIMAGE_MAGIC是一个魔数,其值等于0x016f2818。在zImage的头信息中,有特定的位存放了一个魔数,这个魔数就是用来表示该镜像是zImage,在启动过程中...
uImage方式是uboot本身发明的支持linux启动的镜像格式,但是后来这种方式被一种新的方式替代,这个新的方式就是设备树方式启动(在do_bootm中叫FIT)。 1.uImage启动方式 boot_get_kernel函数(common/cmd_bootm.c)寻找镜像的头信息,并校验,得到真正的kernel的起始位置去启动。