0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

bootm命令的執(zhí)行流程

麥辣雞腿堡 ? 來源:TrustZone ? 作者:Hcoco ? 2023-12-04 17:33 ? 次閱讀

Bootm命令用來從memory啟動(dòng)內(nèi)核,bootm命令的執(zhí)行流程如下圖所示。

在串口終端輸入bootm命令后,執(zhí)行do_bootm函數(shù)來完成相應(yīng)的功能。Do_bootm函數(shù)首先調(diào)用bootm_start函數(shù)。(如果不輸入,應(yīng)該也有。)

圖片

Bootm_start函數(shù)的主要作用是獲取內(nèi)核映像文件的相關(guān)信息,并保存到全局變量images中,image是struct bootm_headers結(jié)構(gòu)類型,用來保存可執(zhí)行內(nèi)核映像的相關(guān)信息,主要包括內(nèi)核映像的加載地址、起始地址、可執(zhí)行入口地址等。

獲取內(nèi)核映像的相關(guān)信息是為后面的加載內(nèi)核做準(zhǔn)備;

內(nèi)核可執(zhí)行映像文件頭包含了這些信息,這是通過工具mkimage加上去的。接下來執(zhí)行bootm_load_os函數(shù)。

if (load !=image_start) {
                              memmove_wd ((void *)load,
                                      (void *)image_start, image_len, CHUNKSZ);
                          }

Image_start是不包括內(nèi)核映像文件頭的內(nèi)核起始位置,也就是zImage的起始位置。

內(nèi)核加載完成后,下面開始執(zhí)行內(nèi)核映像,這是通過調(diào)用函數(shù)do_bootm_linux來實(shí)現(xiàn)的,下面來看do_bootm_linux的執(zhí)行過程。

Do_bootm_linux首先驅(qū)動(dòng)內(nèi)核的入口地址,代碼如下所示。

theKernel=(void (*)(int, int, uint))images- >ep;

Images.ep為內(nèi)核可執(zhí)行映像文件的入口地址及zImage的起始地址,它是從內(nèi)核映像文件頭獲取的,在前面的bootm_start函數(shù)中已經(jīng)為它賦值,代碼如下所示。

images.ep=image_get_ep (&images.legacy_hdr_os_copy);

如果需要,準(zhǔn)備給內(nèi)核傳遞的啟動(dòng)參數(shù),然后獲取啟動(dòng)內(nèi)核需要的兩個(gè)參數(shù):machid和傳遞給內(nèi)核參數(shù)的位置,這兩個(gè)參數(shù)都保存在全局?jǐn)?shù)據(jù)結(jié)構(gòu)體變量bd的成員變量中,如下所示。

bd- >bi_boot_params
              machid=bd- >bi_arch_number;

最后調(diào)用內(nèi)核映像的第一個(gè)可執(zhí)行函數(shù),把控制權(quán)移交給內(nèi)核,代碼如下所示。

theKernel (0, machid, bd- >bi_boot_params);
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 內(nèi)核
    +關(guān)注

    關(guān)注

    3

    文章

    1346

    瀏覽量

    40152
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11161

    瀏覽量

    208460
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4256

    瀏覽量

    62223
  • Uboot
    +關(guān)注

    關(guān)注

    4

    文章

    125

    瀏覽量

    28099
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    U-boot的執(zhí)行流程

    發(fā)表于 07-14 16:58 ?621次閱讀
    U-boot的<b class='flag-5'>執(zhí)行</b><b class='flag-5'>流程</b>

    Linux內(nèi)核自解壓過程分析

    uboot完成系統(tǒng)引導(dǎo)以后,執(zhí)行環(huán)境變量bootm中的命令;即,將Linux內(nèi)核調(diào)入內(nèi)存中并調(diào)用do_bootm函數(shù)啟動(dòng)內(nèi)核,跳轉(zhuǎn)至kernel的起始位置。
    的頭像 發(fā)表于 12-08 14:00 ?776次閱讀
    Linux內(nèi)核自解壓過程分析

    Uboot的命令之間有什么區(qū)別?

    宏定義的嘍。而啟動(dòng)內(nèi)核我看視頻里面是直接打一個(gè)boot 就OK了,而不是先執(zhí)行nandread,再執(zhí)行bootm,再執(zhí)行bootargs??那么boot這個(gè)
    發(fā)表于 07-26 05:45

    CAD中如何快速重復(fù)執(zhí)行命令?

    快速重復(fù)執(zhí)行命令主要是靠鼠標(biāo)右鍵或者是鍵盤上的空格以及上下方向鍵。 輸入OP命令打開選項(xiàng)對(duì)話框,點(diǎn)用戶系統(tǒng)配置選項(xiàng)卡自定義右鍵單擊按鈕,默認(rèn)模式下無論是否選定對(duì)象,單
    發(fā)表于 10-23 17:04 ?1605次閱讀

    mfc程序執(zhí)行流程小結(jié),MFC程序的執(zhí)行順序

     摘要:本文章主要以MFC程序的執(zhí)行流程執(zhí)行順序等執(zhí)行過程的剖析做出的結(jié)論,下面一起來看看原文的具體介紹。
    發(fā)表于 12-08 15:48 ?9464次閱讀
    mfc程序<b class='flag-5'>執(zhí)行</b><b class='flag-5'>流程</b>小結(jié),MFC程序的<b class='flag-5'>執(zhí)行</b>順序

    虛擬機(jī):Bash Shell腳本打印出執(zhí)行命令

    默認(rèn)情況下,bash腳本不會(huì)打印執(zhí)行的每個(gè)命令,這個(gè)有時(shí)候不太方面。
    的頭像 發(fā)表于 06-22 14:44 ?4455次閱讀

    linux技術(shù):WAF運(yùn)行命令執(zhí)行方法

    如果命令執(zhí)行的時(shí)候遇到攔截命令關(guān)鍵詞的時(shí)候可以利用如下方法繞過: "和^是CMD命令中最常見的轉(zhuǎn)義字符,還有成對(duì)的括號(hào)并不會(huì)影響命令
    發(fā)表于 11-07 20:27 ?930次閱讀

    使用匿名管道技術(shù)獲取CMD命令執(zhí)行結(jié)果

    遠(yuǎn)程 CMD 是指惡意程序接收到控制端發(fā)送的 CMD 指令后,在本地執(zhí)行 CMD 命令,并將執(zhí)行結(jié)果回傳至控制端。本文將演示使用匿名管道技術(shù)獲取 CMD 命令
    的頭像 發(fā)表于 04-03 18:04 ?3631次閱讀

    LabVIEW中執(zhí)行系統(tǒng)命令VI介紹

    LabVIEW自帶一個(gè)執(zhí)行系統(tǒng)命令VI(System Exec.vi),位于函數(shù)選板的“互連接口”>>“庫與可執(zhí)行程序”>>“執(zhí)行系統(tǒng)命令
    的頭像 發(fā)表于 04-25 11:47 ?8510次閱讀
    LabVIEW中<b class='flag-5'>執(zhí)行</b>系統(tǒng)<b class='flag-5'>命令</b>VI介紹

    Linux命令執(zhí)行Bypass常見姿勢(shì)介紹

    部署服務(wù)器端為L(zhǎng)inux系統(tǒng)的http服務(wù),留存get和post方式的一句話木馬,用于命令執(zhí)行測(cè)試。(測(cè)試思路可以對(duì)話Chatgpt)
    的頭像 發(fā)表于 05-22 16:20 ?1912次閱讀
    Linux<b class='flag-5'>命令</b><b class='flag-5'>執(zhí)行</b>Bypass常見姿勢(shì)介紹

    Linux命令執(zhí)行Bypass常見姿勢(shì)

    部署服務(wù)器端為L(zhǎng)inux系統(tǒng)的http服務(wù),留存get和post方式的一句話木馬,用于命令執(zhí)行測(cè)試。(測(cè)試思路可以對(duì)話Chatgpt)
    的頭像 發(fā)表于 05-22 16:21 ?766次閱讀
    Linux<b class='flag-5'>命令</b><b class='flag-5'>執(zhí)行</b>Bypass常見姿勢(shì)

    通過語音控制執(zhí)行系統(tǒng)命令

    電子發(fā)燒友網(wǎng)站提供《通過語音控制執(zhí)行系統(tǒng)命令.zip》資料免費(fèi)下載
    發(fā)表于 06-20 09:39 ?0次下載
    通過語音控制<b class='flag-5'>執(zhí)行</b>系統(tǒng)<b class='flag-5'>命令</b>

    Uboot命令實(shí)現(xiàn)大致流程

    傳遞給內(nèi)核。 傳遞相關(guān)啟動(dòng)參數(shù)必須使用u-boot的bootm命令進(jìn)行跳轉(zhuǎn),但是u-boot的bootm命令只能處理uImage鏡像。 uImage相對(duì)于zImage在頭部多了64個(gè)b
    的頭像 發(fā)表于 12-04 17:09 ?351次閱讀
    Uboot<b class='flag-5'>命令</b>實(shí)現(xiàn)大致<b class='flag-5'>流程</b>圖

    uboot命令執(zhí)行過程是什么

    U-boot是通過執(zhí)行u-boot提供的命令來加載Linux內(nèi)核的,其中 命令bootm的功能 即為從memory啟動(dòng)Linux內(nèi)核映像文件。 在講解
    的頭像 發(fā)表于 12-04 17:31 ?664次閱讀

    cmd_tbl_t結(jié)構(gòu)體變量調(diào)用命令信息

    命令,海思hi3521a中默認(rèn)參數(shù)是bootcmd=bootm 0x82000000 ? 相當(dāng)于執(zhí)行bootm 0x82000000 命令
    的頭像 發(fā)表于 12-04 17:37 ?529次閱讀
    cmd_tbl_t結(jié)構(gòu)體變量調(diào)用<b class='flag-5'>命令</b>信息