bootm命令的执行流程

bootm命令用来从memory启动内核,bootm命令的执行流程如下图所示。
在串口终端输入bootm命令后,执行do_bootm函数来完成相应的功能。do_bootm函数首先调用bootm_start函数。(如果不输入,应该也有。)
bootm_start函数的主要作用是获取内核映像文件的相关信息,并保存到全局变量images中,image是struct bootm_headers结构类型,用来保存可执行内核映像的相关信息,主要包括内核映像的加载地址、起始地址、可执行入口地址等。
获取内核映像的相关信息是为后面的加载内核做准备;
内核可执行映像文件头包含了这些信息,这是通过工具mkimage加上去的。接下来执行bootm_load_os函数。
if (load !=image_start) { memmove_wd ((void *)load, (void *)image_start, image_len, chunksz); }image_start是不包括内核映像文件头的内核起始位置,也就是zimage的起始位置。
内核加载完成后,下面开始执行内核映像,这是通过调用函数do_bootm_linux来实现的,下面来看do_bootm_linux的执行过程。
do_bootm_linux首先驱动内核的入口地址,代码如下所示。
thekernel=(void (*)(int, int, uint))images- >ep;images.ep为内核可执行映像文件的入口地址及zimage的起始地址,它是从内核映像文件头获取的,在前面的bootm_start函数中已经为它赋值,代码如下所示。
images.ep=image_get_ep (&images.legacy_hdr_os_copy);如果需要,准备给内核传递的启动参数,然后获取启动内核需要的两个参数:machid和传递给内核参数的位置,这两个参数都保存在全局数据结构体变量bd的成员变量中,如下所示。
bd- >bi_boot_params machid=bd- >bi_arch_number;最后调用内核映像的第一个可执行函数,把控制权移交给内核,代码如下所示。
thekernel (0, machid, bd- >bi_boot_params);

iPhone7拆解 内部结构如何
机器视觉对于医疗有什么帮助
PCB电路设计中磁珠的选用技巧分享
调谐射频接收器电路分享
旷视科技重启IPO计划 赴港谋求“同股不同权”架构上市
bootm命令的执行流程
Excelitas 推出全新PYD 2592探测器,具有极宽的视场角(FOV)
中移动2016年营收达7084亿 明年投资5G核心网
输电线路分布式故障定位监测装置:守护电力安全的“千里眼”
华为p10/p10plus售价敢这么高不是没有道理的!怼上三星苹果不落下风
联电产能供不应求,今年资本支出大增五成至15亿美元
反无人机系统都有哪些
谷歌Gboard手机后反复死机,不能输入Pin码解锁手机
电脑怎么知道自己的IP地址的?
可穿戴电子设备利用体温发电新材料
博世集团销售额和整体业绩继续保持历史高位
红旗最新车型H5终于要正式推出市场了
无线充电手机使用了什么原理
IC观察:如何复制展讯的高增长
中信证券:自动驾驶、和医药疫苗研发等带领 新AI的“黄金时代”