bd; char *s; int machid = bd- >bi_arch_number; void (*theKernel)( int zero, int arch, uint" />

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

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

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

3天內不再提示

cmd_tbl_t結構體變量調用命令信息

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

一個cmd_tbl_t結構體變量包含了調用一條命令的所需要的信息

  • ? 對于環境變量bootcmd,執行run_command(bootcmd, flag)之后,最終是將bootcmd中的參數解析為命令,海思hi3521a中默認參數是bootcmd=bootm 0x82000000
  • ? 相當于執行bootm 0x82000000 命令
  • ? 最終將調用do_bootm函數,do_bootm函數在cmd_bootm.c中實現

圖片

在這個里面有一個函數:

int do_bootm_linux(int flag, int argc, char *argv[], bootm_headers_t *images)
{
    bd_t *bd = gd- >bd;
    char *s;
    int machid = bd- >bi_arch_number;
    void (*theKernel)(int zero, int arch, uint params);
 
#ifdef CONFIG_CMDLINE_TAG
#ifdef CONFIG_HI3536_A7
    char *commandline = getenv("slave_bootargs");
#else
    char *commandline = getenv("bootargs");   //(1)
 
#endif
#endif
 
    if ((flag != 0) && (flag != BOOTM_STATE_OS_GO))
        return 1;
 
    theKernel = (void (*)(int, int, uint))images- >ep; //(2)
 
    s = getenv ("machid");       //(3)
    if (s) {
        machid = simple_strtoul (s, NULL, 16);
        printf ("Using machid 0x%x from environmentn", machid);
    }
 
    show_boot_progress (15);
 
    debug ("## Transferring control to Linux (at address %08lx) ...n",
           (ulong) theKernel);
 
 
    setup_start_tag (bd);     //(4)
 
    setup_memory_tags (bd);     
    setup_commandline_tag (bd, commandline); //(5)
 
    if (images- >rd_start && images- >rd_end)  
        setup_initrd_tag (bd, images- >rd_start, images- >rd_end);
 
    setup_eth_use_mdio_tag(bd, getenv("use_mdio"));
    setup_eth_mdiointf_tag(bd, getenv("mdio_intf"));
    setup_ethaddr_tag(bd, getenv("ethaddr"));   
 
    setup_end_tag (bd);      //(6)
 
 
    /* we assume that the kernel is in place */
    printf ("nStarting kernel ...nn");
 
#ifdef CONFIG_USB_DEVICE
    {
        extern void udc_disconnect (void);
        udc_disconnect ();
    }
#endif
 
    cleanup_before_linux ();   //(7)
 
    theKernel (0, machid, bd- >bi_boot_params); //(8)
    /* does not return */
 
    return 1;
}
  • ? (1)獲取環境變量bootargs中的值,該環境變量用來傳遞參數給kernel
  • ? (2)images->ep的地址是kernel的程序的入口地址,也就是將函數指針theKernel指向kernel最先執行的地方。
  • ? (3)獲取環境變量machid,這個應該是機器碼,海思設備沒有定義在環境變量中
  • ? (4)這里是建立一個鏈表用來存放傳遞給內核的參數,在board_init函數中有賦值 gd->bd->bi_boot_params = CFG_BOOT_PARAMS; CFG_BOOT_PARAMS = 0x80000000 + 0x0100 = 0x80000100
  • ? (5)將commandline的值添加到鏈表中
  • ? (6)結束參數的填充
  • ? (7)啟動linux內核前的一個清除操作,主要是關閉中斷,關閉緩存等操作
  • ? (8)由前面我們知道theKernel實際指向的是kernel的入口地址,執行這一句之后,uboot就結束了運行,kernel正式運行就從這里開始。
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Linux
    +關注

    關注

    87

    文章

    11306

    瀏覽量

    209571
  • 函數
    +關注

    關注

    3

    文章

    4332

    瀏覽量

    62640
  • Uboot
    +關注

    關注

    4

    文章

    125

    瀏覽量

    28241
  • 結構體
    +關注

    關注

    1

    文章

    130

    瀏覽量

    10844
收藏 人收藏

    評論

    相關推薦

    瀚海微SD NAND存儲功能描述(8)專用命令CMD55 56

    應用專用命令app_cmd (CMD55) 當卡接收到這個命令時,會使卡將下面的命令解釋為一個特定于應用程序的
    的頭像 發表于 08-08 10:39 ?1172次閱讀
    瀚海微SD NAND存儲功能描述(8)專<b class='flag-5'>用命令</b><b class='flag-5'>CMD</b>55  56

    cmd用命令大全 cmd運行命令

    cmd用命令大全 cmd運行命令
    發表于 08-15 20:25

    【ok210試用體驗】如何添加一個簡單的U-boot命令

    、屬性、是否可重復、名稱、短幫助信息,長幫助信息。 因此,我們可以建立一個簡單的命令: #include #include intdo_hello (cmd_tbl_t *cmdt
    發表于 09-23 18:11

    嵌入式Linux學習引導-Uboot移植之添加自定義命令

    cmd_tbl_t結構。然后run_command函數使用返回的cmd_tbl_t結構中的函數指針調用hello
    發表于 02-16 17:19

    U_BOOT_CMD宏將cmd_tbl_t結構放在u_boot_cmd段中的過程是以下這樣的嗎?

    最近在著手移植UBOOT,對于U_BOOT_CMD宏將cmd_tbl_t結構放在u_boot_cmd段中的過程不是很確定,請教下各位。對于
    發表于 09-02 05:45

    常見的CMD命令CMD命令調用步驟

    Java基礎——調用CMD命令
    發表于 11-08 08:43

    批處理常用命令大全

    批處理常用命令大全: 批處理文件是無格式的文本文件,它包含一條或多條命令。它的文件擴展名為 .bat 或 .cmd。在命令提示下鍵入批處理文件的名稱,或者雙擊該批處理文件,系
    發表于 12-08 10:20 ?0次下載
    批處理常<b class='flag-5'>用命令</b>大全

    cmd用命令大全 cmd運行命令

    cmd用命令大全 2K和XP下的CMD命令 accwiz.exe > 輔助工具向導
    發表于 01-08 09:12 ?3.1w次閱讀

    TMS320F28335_CMD命令

    TMS320F28335_CMD命令TI的TMS320F28335_CMD命令
    發表于 06-22 15:01 ?16次下載

    CMD命令行高級教程

    CMD命令行高級教程
    發表于 10-24 08:31 ?30次下載
    <b class='flag-5'>CMD</b>的<b class='flag-5'>命令</b>行高級教程

    cmd用命令大全

    Windows系統,還是離不開DOS命令的操作。學習DOS系統操作,首先了解命令提示符。先了解每個命令提示符的作用,然后才能夠靈活運用。下面將詳細的為大家介紹cmd
    的頭像 發表于 02-07 10:55 ?2.5w次閱讀
    <b class='flag-5'>cmd</b>常<b class='flag-5'>用命令</b>大全

    C語言常用命令設計的實驗程序資料說明

    本文檔的主要內容詳細介紹的是C語言常用命令設計的實驗程序資料說明 1. 熟悉和掌握包括順序結構、選擇結構、循環結構、函數、數組、結構
    發表于 11-02 17:18 ?7次下載
    C語言常<b class='flag-5'>用命令</b>設計的實驗程序資料說明

    Uboot之命令行框架

    1 #include 2 #include 3 4 int do_cmdusr(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) 5 { 6
    發表于 05-15 15:18 ?1693次閱讀
    Uboot之<b class='flag-5'>命令</b>行框架

    Linux內核中Uboot命令處理

    完成。U-Boot在include/command.h中定義了一個非常重要的cmd_tbl_s結構,它在命令的實現方面起著至關重要的作用。 struct
    的頭像 發表于 12-04 17:23 ?493次閱讀

    Linux實用命令大全

    Linux實用命令大全
    的頭像 發表于 10-23 13:50 ?231次閱讀
    Linux實<b class='flag-5'>用命令</b>大全
    主站蜘蛛池模板: 免费一日本一级裸片在线观看| 国产拍拍视频| 亚洲第一区二区快射影院| 九九精品免费观看在线| 日本三区四区免费高清不卡| 男男污肉高h坐便器调教| 久久国产免费观看精品1| 国产免费久久| 婷婷丁香视频| 日本高清色视频www| 男人的天堂在线视频| 国产怡红院| 亚洲午夜日韩高清一区| 欧美福利专区| 日本高清在线3344www| 欧美无遮挡一区二区三区| 中文字幕成人乱码在线电影| 午夜免费福利片观看| 人与牲动交xxxxbbbb高清| 精品爱爱| 亚洲综合五月天婷| 国产午夜视频在线观看| 91男女视频| 亚洲入口无毒网址你懂的| 日本特黄在线观看免费| 狠狠色噜噜狠狠色综合久| 亚洲精品视频在线看| 国产理论在线| 男生女生靠逼视频| 四虎影视院| 国产主播精品在线| 色老头成人免费视频天天综合| 午夜 dy888理论久久| www亚洲成人| 欧美三级在线免费观看| www.欧美色图| 国产片18在线观看| 久久水蜜桃网| 欧美一级特黄aaa大片| 成人99国产精品一级毛片| 国产午夜影院|