在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

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

3天內不再提示

Linux內核中Uboot命令處理

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

命令處理

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

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

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

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

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

增加了一個命令,它的名稱為bdinfo,最大參數數目為1,可重復,響應函數是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}

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

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

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

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

cmd_process函數首先調用find_cmd函數根據傳入的參數,在.u_boot_cmd段區域查找命令,如果沒有找到對應的命令,打印出提示信息并返回。

如果找到則返回命令結構體 cmdtp,再檢查傳入參數的合法性,最后通過cmd_call函數調用命令響應函數(cmdtp->cmd)(cmdtp, flag, argc, argv)。

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

    關注

    3

    文章

    1402

    瀏覽量

    40905
  • Linux
    +關注

    關注

    87

    文章

    11414

    瀏覽量

    212248
  • 函數
    +關注

    關注

    3

    文章

    4363

    瀏覽量

    63778
  • Uboot
    +關注

    關注

    4

    文章

    126

    瀏覽量

    28728
收藏 人收藏

    評論

    相關推薦

    Linux內核自解壓過程分析

    uboot完成系統引導以后,執行環境變量bootm命令;即,將Linux內核調入內存并調用
    的頭像 發表于 12-08 14:00 ?1204次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>內核</b>自解壓過程分析

    uboot啟動怎么停在uboot命令

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

    編譯IMX6ULL開發板的UbootLinux內核

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

    ubootlinux內核進行適配

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

    ubootlinux內核構建的環境設置是否相同?

    ubootlinux 內核構建的環境設置是否相同,使用以下命令?來源/opt/fsl-imx-xwayland/5.15-kirkstone/environment-setup-
    發表于 03-21 06:42

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

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

    UBOOT命令總結

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

    基于ARM9和NANDFlash對ubootLinux內核進行修改

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

    英創信息技術嵌入式Linux工控主板uboot命令簡介

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

    【嵌入式】構建嵌入式Linux系統(uboot內核、文件系統)

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

    2021-07-28-uboot-CC2640

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

    uboot自定義命令

    U-Boot本質是一個裸機程序,是一種普遍用于嵌入式系統的開源的Bootloader,作用是用來引導操作系統,以及給開發人員提供測試調試工具。主要負責基本硬件初始化,導啟動內核啟動
    的頭像 發表于 09-17 09:59 ?1458次閱讀

    Uboot命令實現大致流程圖

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

    uboot命令的執行過程是什么

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

    Linux系統shell命令解析

    shell是Linux系統的用戶界面,提供了用戶與內核交互的一種接口,它接收用戶輸入的命令并到送到內核去執行,因此也被稱為Linux
    的頭像 發表于 11-05 15:40 ?656次閱讀
    主站蜘蛛池模板: 高清性色生活片欧美在线 | 亚洲三级在线免费观看 | h视频在线观看免费网站 | 四虎国产精品免费入口 | 无遮挡一级毛片视频 | 亚洲一区 在线播放 | 国产精品国产三级国快看 | 亚洲男人天堂2020 | 黄黄的网站 | 激情欧美一区二区三区中文字幕 | 中文字幕天天干 | 精品国产柚木在线观看 | 中日韩一级片 | 夜夜操夜夜爱 | 天天干天天射天天 | 大看蕉a在线观看 | 特级毛片aaaa免费观看 | eeuss秋霞成人影院 | 久久免费视频99 | 国产午夜精品久久久久免费视小说 | aika中文字幕永久在线 | 性做久久久久久久 | 色婷婷网 | 伊人狼人综合 | 性刺激的欧美三级视频 | 国产久视频 | 欧美成人天天综合天天在线 | 天堂综合网 | 国产人人澡 | 性做久久久久久久免费观看 | 国产亚洲综合一区 柠檬导航 | 天天在线天天看成人免费视频 | 午夜影院观看 | 天堂资源最新版在线官网 | 国产欧美日韩综合精品一区二区 | 一区二区三区免费精品视频 | 成人免费视频一区二区三区 | 日韩欧美不卡片 | 成人黄色免费观看 | 午夜高清免费观看视频 | 午夜国产高清精品一区免费 |