0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

bootm命令的执行流程

麦辣鸡腿堡 来源:TrustZone 作者:Hcoco 2023-12-04 17:33 次阅读

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);
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 内核
    +关注

    关注

    3

    文章

    1362

    浏览量

    40216
  • Linux
    +关注

    关注

    87

    文章

    11219

    浏览量

    208872
  • 函数
    +关注

    关注

    3

    文章

    4303

    浏览量

    62409
  • Uboot
    +关注

    关注

    4

    文章

    125

    浏览量

    28157
收藏 人收藏

    评论

    相关推荐

    U-boot的执行流程

    本文主要讲述了U-boot的执行流程
    发表于 07-14 16:58 668次阅读
    U-boot的<b class='flag-5'>执行</b><b class='flag-5'>流程</b>

    Linux内核自解压过程分析

    uboot完成系统引导以后,执行环境变量bootm中的命令;即,将Linux内核调入内存中并调用do_bootm函数启动内核,跳转至kernel的起始位置。
    的头像 发表于 12-08 14:00 845次阅读
    Linux内核自解压过程分析

    Uboot的命令之间有什么区别?

    宏定义的喽。而启动内核我看视频里面是直接打一个boot 就OK了,而不是先执行nandread,再执行bootm,再执行bootargs??那么boot这个
    发表于 07-26 05:45

    CAD中如何快速重复执行命令

    快速重复执行命令主要是靠鼠标右键或者是键盘上的空格以及上下方向键。 输入OP命令打开选项对话框,点用户系统配置选项卡自定义右键单击按钮,默认模式下无论是否选定对象,单
    发表于 10-23 17:04 1612次阅读

    mfc程序执行流程小结,MFC程序的执行顺序

     摘要:本文章主要以MFC程序的执行流程执行顺序等执行过程的剖析做出的结论,下面一起来看看原文的具体介绍。
    发表于 12-08 15:48 9506次阅读
    mfc程序<b class='flag-5'>执行</b><b class='flag-5'>流程</b>小结,MFC程序的<b class='flag-5'>执行</b>顺序

    虚拟机:Bash Shell脚本打印出执行命令

    默认情况下,bash脚本不会打印执行的每个命令,这个有时候不太方面。
    的头像 发表于 06-22 14:44 4509次阅读

    linux技术:WAF运行命令执行方法

    如果命令执行的时候遇到拦截命令关键词的时候可以利用如下方法绕过: "和^是CMD命令中最常见的转义字符,还有成对的括号并不会影响命令
    发表于 11-07 20:27 963次阅读

    使用匿名管道技术获取CMD命令执行结果

    远程 CMD 是指恶意程序接收到控制端发送的 CMD 指令后,在本地执行 CMD 命令,并将执行结果回传至控制端。本文将演示使用匿名管道技术获取 CMD 命令
    的头像 发表于 04-03 18:04 3783次阅读

    LabVIEW中执行系统命令VI介绍

    LabVIEW自带一个执行系统命令VI(System Exec.vi),位于函数选板的“互连接口”>>“库与可执行程序”>>“执行系统命令
    的头像 发表于 04-25 11:47 8839次阅读
    LabVIEW中<b class='flag-5'>执行</b>系统<b class='flag-5'>命令</b>VI介绍

    Linux命令执行Bypass常见姿势介绍

    部署服务器端为Linux系统的http服务,留存get和post方式的一句话木马,用于命令执行测试。(测试思路可以对话Chatgpt)
    的头像 发表于 05-22 16:20 1949次阅读
    Linux<b class='flag-5'>命令</b><b class='flag-5'>执行</b>Bypass常见姿势介绍

    Linux命令执行Bypass常见姿势

    部署服务器端为Linux系统的http服务,留存get和post方式的一句话木马,用于命令执行测试。(测试思路可以对话Chatgpt)
    的头像 发表于 05-22 16:21 793次阅读
    Linux<b class='flag-5'>命令</b><b class='flag-5'>执行</b>Bypass常见姿势

    通过语音控制执行系统命令

    电子发烧友网站提供《通过语音控制执行系统命令.zip》资料免费下载
    发表于 06-20 09:39 0次下载
    通过语音控制<b class='flag-5'>执行</b>系统<b class='flag-5'>命令</b>

    Uboot命令实现大致流程

    传递给内核。 传递相关启动参数必须使用u-boot的bootm命令进行跳转,但是u-boot的bootm命令只能处理uImage镜像。 uImage相对于zImage在头部多了64个b
    的头像 发表于 12-04 17:09 391次阅读
    Uboot<b class='flag-5'>命令</b>实现大致<b class='flag-5'>流程</b>图

    uboot命令执行过程是什么

    U-boot是通过执行u-boot提供的命令来加载Linux内核的,其中 命令bootm的功能 即为从memory启动Linux内核映像文件。 在讲解
    的头像 发表于 12-04 17:31 754次阅读

    cmd_tbl_t结构体变量调用命令信息

    命令,海思hi3521a中默认参数是bootcmd=bootm 0x82000000 • 相当于执行bootm 0x82000000 命令
    的头像 发表于 12-04 17:37 582次阅读
    cmd_tbl_t结构体变量调用<b class='flag-5'>命令</b>信息