一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

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

Linux內(nèi)核中Uboot命令處理

麥辣雞腿堡 ? 來源:TrustZone ? 作者:Hcoco ? 2023-12-04 17:23 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

命令處理

main.c中的代碼實現(xiàn)了將一個命令的所有參數(shù)分離存放在argv數(shù)組中,參數(shù)的數(shù)目為argc,完成了讀取命令行和解析命令行的工作。命令的處理由common/command.c文件中的函數(shù)完成。U-Boot在include/command.h中定義了一個非常重要的cmd_tbl_s結(jié)構(gòu)體,它在命令的實現(xiàn)方面起著至關(guān)重要的作用。

struct cmd_tbl_s {
            char    *name;       /* 命令名稱            */
            int     maxargs; /* 命令的最大參數(shù)   */
            int     repeatable;  /* 是否可重復(fù)(按回車鍵是否會重復(fù)執(zhí)行)
            */
            int     (*cmd)(struct cmd_tbl_s *, int, int, char * const []);  /* 命令響應(yīng)函數(shù)*/
            char    *usage;      /* 簡短的用法說明   */
        #ifdef   CONFIG_SYS_LONGHELP
            char    *help;       /* 較詳細的幫助*/
        #endif
        #ifdef CONFIG_AUTO_COMPLETE
            /* 響應(yīng)自動補全參數(shù)*/
            int     (*complete)(int argc,char*const argv[],char last_char,int maxv,char*cmdv[]);
        #endif
        };

cmd_tbl_s結(jié)構(gòu)體包含的成員變量:命令名稱、最大參數(shù)個數(shù)、可重復(fù)性、命令響應(yīng)函數(shù)、用法、幫助和命令補全函數(shù),每個命令都由這個結(jié)構(gòu)體來描述。當輸入“help”或者“?”會打印出所有的命令和它的usage,輸入“help”或者“?”和命令名稱時,會打印出help信息。

添加一個命令時,利用宏U_BOOT_CMD定義一個新的cmd_tbl_s結(jié)構(gòu)體,并對這個結(jié)構(gòu)體初始化和定義結(jié)構(gòu)體的屬性。例如,在文件common/cmd_bdinfo.c中:

U_BOOT_CMD(
            bdinfo,  1,  1,  do_bdinfo,
            "print Board Info structure",
            ""
        );

增加了一個命令,它的名稱為bdinfo,最大參數(shù)數(shù)目為1,可重復(fù),響應(yīng)函數(shù)是do_bdinfo, usage為“print Board Info structure”,沒有幫助信息。U_BOOT_CMD宏在include/command.h中定義,當不配置命令補全時,它最終被展開為:

#define U_BOOT_CMD(name,maxargs,rep,cmd,usage,help) 
        cmd_tbl_t __u_boot_cmd_##name __attribute__((unused, section(".u_boot_cmd"), aligned( 4))) = {#name, maxargs, rep, cmd, usage, help}

其中,“##”與“#”是預(yù)編譯操作符,“##”表示字符串連接,“#”表示后面緊接著的是一個字符串。cmd_tbl_t就是struct cmd_tbl_s,用于__u_boot_cmd_##name結(jié)構(gòu)體。

__attribute__定義了結(jié)構(gòu)體的屬性,將結(jié)構(gòu)體放在.u_boot_cmd段中。簡單的說,就是利用U_BOOT_CMD定義struct cmd_tbl_s結(jié)構(gòu)體變量,并把類變量都放在一個段中。

在鏈接腳本中指定了.u_boot_cmd段的起始地址和結(jié)束地址,又已知每個struct cmd_tbl_s結(jié)構(gòu)體占用內(nèi)存空間的大小,這樣就很方便地遍歷所有的struct cmd_tbl_s結(jié)構(gòu)體。這種巧妙的方式充分利用了鏈接器的功能特點,避免了花費大量的精力,去維護和更新命令結(jié)構(gòu)體表。

cmdtp = find_cmd(argv[0]);
            if (cmdtp == NULL) {
                  printf("Unknown command '%s' - try 'help'n", argv[0]);
                  return 1;
            }

cmd_process函數(shù)首先調(diào)用find_cmd函數(shù)根據(jù)傳入的參數(shù),在.u_boot_cmd段區(qū)域查找命令,如果沒有找到對應(yīng)的命令,打印出提示信息并返回。

如果找到則返回命令結(jié)構(gòu)體 cmdtp,再檢查傳入?yún)?shù)的合法性,最后通過cmd_call函數(shù)調(diào)用命令響應(yīng)函數(shù)(cmdtp->cmd)(cmdtp, flag, argc, argv)。

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

    關(guān)注

    3

    文章

    1416

    瀏覽量

    41433
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11511

    瀏覽量

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

    關(guān)注

    3

    文章

    4381

    瀏覽量

    64876
  • Uboot
    +關(guān)注

    關(guān)注

    4

    文章

    129

    瀏覽量

    29098
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

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

    uboot完成系統(tǒng)引導(dǎo)以后,執(zhí)行環(huán)境變量bootm命令;即,將Linux內(nèi)核調(diào)入內(nèi)存并調(diào)用
    的頭像 發(fā)表于 12-08 14:00 ?1398次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>內(nèi)核</b>自解壓過程分析

    uboot啟動怎么停在uboot命令

    256M的nandflash已經(jīng)裝入了uboot1.1.6和linux2.6.22. 在啟動的時候,我想讓板子啟動時停在uboot命令行,但是停不下來,直接就去啟動
    發(fā)表于 06-17 05:45

    編譯IMX6ULL開發(fā)板的UbootLinux內(nèi)核

    圖所示:上圖生成的“u-boot.imx”文件就是Uboot的景象文件,我們可以把它拷貝到Windows系統(tǒng)下然后使用MFGTools燒寫工具燒寫到開發(fā)板運行。 29.3 編譯終結(jié)者開發(fā)板Linux內(nèi)核
    發(fā)表于 07-15 10:47

    ubootlinux內(nèi)核進行適配

    在嵌入式開發(fā)過程Linux認為每一個硬件都是定制化的,所以都需要一個唯一的編碼,就是機器碼,機器碼的主要工作就是為了ubootlinux內(nèi)核
    發(fā)表于 12-20 07:51

    ubootlinux內(nèi)核構(gòu)建的環(huán)境設(shè)置是否相同?

    ubootlinux 內(nèi)核構(gòu)建的環(huán)境設(shè)置是否相同,使用以下命令?來源/opt/fsl-imx-xwayland/5.15-kirkstone/environment-setup-
    發(fā)表于 03-21 06:42

    在github上下載Xilinx提供的Opensource linuxuboot內(nèi)核gz格式壓縮包的方法

    Xilinx提供的linuxuboot內(nèi)核版本會不斷地維護升級和更新,有些時候,我們碰到的問題可能換一個別的內(nèi)核版本就能解決。在此,總結(jié)一下內(nèi)核
    發(fā)表于 02-08 08:34 ?1576次閱讀
    在github上下載Xilinx提供的Opensource <b class='flag-5'>linux</b>和<b class='flag-5'>uboot</b><b class='flag-5'>內(nèi)核</b>gz格式壓縮包的方法

    UBOOT命令總結(jié)

    分享到: 很好的UBOOT命令總結(jié),起步時就是看的這篇東西,熟悉了以后就用?看自帶幫助就行:) Printenv 打印環(huán)境變量。 Uboot》 printenv baudrate=115200
    發(fā)表于 11-08 10:24 ?18次下載

    基于ARM9和NANDFlash對ubootLinux內(nèi)核進行修改

    本文針對嵌入式Linux操作系統(tǒng)提出了一種新的更新機制,并且基于ARM9微處理器和NANDFlash存儲器,對ubootLinux內(nèi)核進行
    發(fā)表于 04-07 11:00 ?3031次閱讀
    基于ARM9和NANDFlash對<b class='flag-5'>uboot</b>和<b class='flag-5'>Linux</b><b class='flag-5'>內(nèi)核</b>進行修改

    英創(chuàng)信息技術(shù)嵌入式Linux工控主板uboot命令簡介

    成都英利公司提供的EM9X60系列嵌入式Linux工控主板,均預(yù)裝了Linux2.6.30內(nèi)核操作系統(tǒng)及根文件系統(tǒng),包括bootstrap、uboot、uImage及根文件系統(tǒng),用戶可
    的頭像 發(fā)表于 01-15 14:01 ?1624次閱讀
    英創(chuàng)信息技術(shù)嵌入式<b class='flag-5'>Linux</b>工控主板<b class='flag-5'>uboot</b><b class='flag-5'>命令</b>簡介

    【嵌入式】構(gòu)建嵌入式Linux系統(tǒng)(uboot、內(nèi)核、文件系統(tǒng))

    嵌入式Linux系統(tǒng)知識架構(gòu)及層次嵌入式Linux系統(tǒng)構(gòu)成及啟動略析嵌入式Linux三劍客之uboot技術(shù)嵌入式Linux三劍客之
    發(fā)表于 10-20 18:20 ?42次下載
    【嵌入式】構(gòu)建嵌入式<b class='flag-5'>Linux</b>系統(tǒng)(<b class='flag-5'>uboot</b>、<b class='flag-5'>內(nèi)核</b>、文件系統(tǒng))

    2021-07-28-uboot-CC2640

    uboot命令開發(fā)指南:30.4 uboot命令一、uboot啟動log簡析需要調(diào)試性質(zhì)的開發(fā) ,ub
    發(fā)表于 11-30 09:51 ?11次下載
    2021-07-28-<b class='flag-5'>uboot</b>-CC2640

    uboot自定義命令

    U-Boot本質(zhì)是一個裸機程序,是一種普遍用于嵌入式系統(tǒng)的開源的Bootloader,作用是用來引導(dǎo)操作系統(tǒng),以及給開發(fā)人員提供測試調(diào)試工具。主要負責基本硬件初始化,導(dǎo)啟動內(nèi)核啟動
    的頭像 發(fā)表于 09-17 09:59 ?1687次閱讀

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

    zImage內(nèi)核鏡像下載到開發(fā)板之后,可以使用u-boot的go命令進行直接跳轉(zhuǎn),這個時候內(nèi)核直接解壓啟動。 但是此時的內(nèi)核無法掛載文件系統(tǒng),因為go
    的頭像 發(fā)表于 12-04 17:09 ?678次閱讀
    <b class='flag-5'>Uboot</b><b class='flag-5'>命令</b>實現(xiàn)大致流程圖

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

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

    Linux系統(tǒng)shell命令解析

    shell是Linux系統(tǒng)的用戶界面,提供了用戶與內(nèi)核交互的一種接口,它接收用戶輸入的命令并到送到內(nèi)核去執(zhí)行,因此也被稱為Linux
    的頭像 發(fā)表于 11-05 15:40 ?935次閱讀