色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

Uboot啟動延時和讀取命令行輸入

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

1.啟動延時

如果配置了啟動延遲功能,U-Boot等待用戶從控制臺(一般為串口)輸入字符,等待的時間由頂層配置文件中的宏定義 CONFIG_BOOTDELAY 決定 。在此期間,只要用戶按下任意按鍵就會中斷等待,進入命令行輸入模式。

如果沒有配置啟動延時功能或者啟動延時超過了設置的時間, U-Boot 運行啟動命令行參數,啟動命令參數在頂層配置文件中,由 CONFIG_BOOTCOMMAND宏定義。

2.讀取命令行輸入

命令行輸入模式實際上是一個死循環,循環體簡化后如下所示:

for (;;) {
                len = readline (CONFIG_SYS_PROMPT);
                flag = 0;    /* assume no special flags for now */
                if (len > 0)
                    strcpy (lastcommand, console_buffer);
                else if (len == 0)
                    flag |= CMD_FLAG_REPEAT;
                if (len == -1)
                    puts ("< INTERRUPT >n");
                else
                    rc = run_command(lastcommand, flag);
                if (rc <= 0) {
                    /* invalid command or not repeatable, forget it */
                    lastcommand[0] = 0;
                }
            }

每次循環調用readline函數從控制臺讀取命令行,并且讀取到的字符存儲在console_buffer緩沖區中。

console_buffer緩沖區的長度在頂層文件中通過CONFIG_SYS_CBSIZE宏定義。

當該函數在接收到一個回車鍵時認定為命令行輸入結束,返回命令行長度len。

如果len大于0,將存儲在緩沖區的命令行拷貝至靜態數組lastcommand中,flag設置為0。

如果len等于0,即readline函數僅僅接收到一個回車鍵,即直接返回,flag設置為CMD_FLAG_REPEAT,lastcommand數組存放的數據不變。

flag用于標志是否重復上次操作,每個命令都有一個 repeatable標志,當命令的該標志為1時,此時,命令能夠重復操作。

把lastcommand和flag作為run_command函數的參數,進而調用run_command函數。

從 run_command 函數是否會返回的角度看,U-Boot 的命令分為兩類。

一類是函數返回數值rc,rc小于等于0 ,則傳入的命令行參數有誤,命令無效,此時把lastcommand數組清零,不再執行重復操作。

另外一類是不再返回,一去不再復返 ,例如bootm、go等命令,這類用于啟動內核,將CPU的管理權從U-Boot交付給內核,完成自己啟動內核的終極使命。

3.解析命令行

傳入的 lastcommand 參數僅僅是 readline 函數讀取到用戶輸入的字符,接下來最主要的工作是解析命令行。

首先判斷傳入的lastcommand參數是否為空,如果是返回?1,否則繼續往下解析。截取函數的關鍵代碼如下,str指針指向 lastcommand區域

while (*str) {
                  for (inquotes = 0, sep = str; *sep; sep++) {
                    if ((*sep==''') &&
                        (*(sep-1) != ''))
                        inquotes=!inquotes;
                    if (!inquotes &&
                        (*sep == ';') &&   /* separator     */
                        ( sep != str) &&  /* past string start  */
                        (*(sep-1) != ''))    /* and NOT escaped    */
                        break;
                  }

U-Boot允許命令行存在多個命令,命令間用“;”或者“;”字符分割。

token = str;
                  if (*sep) {
                    str = sep + 1;   /* start of command for next pass */
                    *sep = '?';
                  }
                  else
                    str = sep;   /* no more commands for next pass */
                  /* Extract arguments */
                  if ((argc = parse_line (finaltoken, argv)) == 0) {
                    rc = -1; /* no command at all */
                    continue;
                  }
                  if (cmd_process(flag, argc, argv, &repeatable, NULL))
                    rc = -1;

首先解析一個命令,token指向待解析命令的地址。

parse_line函數分離出命令的各個參數,分別存放在argv中,參數的數目為argc,接著調用common/command.c文件中的cmd_process函數處理解析得到的命令。

值得注意的是, 命令的第一個參數是命令的名稱 。當前命令處理完畢后, token指向命令行中的下一個命令,直到所有的命令都處理完畢。

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

    關注

    87

    文章

    11319

    瀏覽量

    209830
  • 控制臺
    +關注

    關注

    0

    文章

    85

    瀏覽量

    10378
  • 函數
    +關注

    關注

    3

    文章

    4338

    瀏覽量

    62739
  • Uboot
    +關注

    關注

    4

    文章

    125

    瀏覽量

    28256
收藏 人收藏

    評論

    相關推薦

    uboot啟動怎么停在uboot命令行

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

    為什么uboot啟動命令行之后一直重復內容?

    最近遇到一個問題,uboot啟動命令行之后,用md 命令顯示內存 但是每隔16M都會重復flash的內容。比如 md 0x1c000000 和0x1d000000以及0x1e0000
    發表于 08-19 05:01

    如何通過uboot命令行去更新內核呢

    如何通過uboot命令行去更新內核、dtb、uboot文件?
    發表于 01-11 07:07

    cmd網絡經典命令行

    cmd網絡經典命令行:
    發表于 06-11 15:17 ?36次下載
    cmd網絡經典<b class='flag-5'>命令行</b>

    caxa命令行中的應用

    caxa命令行中的應用 命令行對于大多用戶來說往往只是輸入數據的作用,但是其中的奧妙還有很多,下面就給大家
    發表于 10-18 18:18 ?2305次閱讀

    博達環網配置命令行

    博達工業交換要環網配置命令行
    發表于 12-27 16:24 ?0次下載

    CMD的命令行高級教程

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

    通過命令行操控電腦的命令大全匯總

    下面提供多種方法和各種參數,你可以使用這些參數通過命令行重新啟動本地和遠程計算機。
    發表于 05-05 17:29 ?3911次閱讀

    Linux命令行與shell腳本編寫

    Linux命令行與shell腳本編寫
    發表于 01-11 16:50 ?4次下載

    linux命令行與shell編程實戰

    Linux命令行與Shell編程實戰主要涉及以下內容: Linux命令行基礎:學習Linux命令行的基本操作,如文件管理、進程管理、網絡配置等。熟悉使用命令行能夠提高工作效率,提升自己
    的頭像 發表于 11-08 10:57 ?794次閱讀

    linux虛擬機怎么調出命令行

    在Linux虛擬機中調出命令行界面,可以通過以下步驟實現: 打開虛擬機,進入到Linux系統。 在桌面或應用菜單中找到終端或命令行圖標,點擊打開。 輸入命令行指令,執行相應的操作。 另
    的頭像 發表于 11-08 11:28 ?3146次閱讀

    linux切換到命令行模式

    在Linux中,可以通過以下步驟切換到命令行模式: 打開終端。可以在應用菜單中找到終端或命令行終端。 在終端中輸入命令“exit”或“logout”,然后按回車鍵。 系統會提示您
    的頭像 發表于 11-13 16:47 ?1803次閱讀

    linux命令行運行步驟

    現光標右邊出現了一個類似于“ ”或“#”的字符,這就是命令行提示符。在大多數Linux發行版中,普通用戶的提示符是“ ”,而管理員或root用戶的提示符是“#”。 查找可用的命令 Linux系統有許多命令可供使用,可以通過
    的頭像 發表于 11-17 10:18 ?811次閱讀

    eclipse怎么使用命令行

    命令行中使用Eclipse來完成一些特定的任務。本文將詳細介紹如何在命令行中使用Eclipse。 首先,我們需要確保已經正確安裝了JDK(Java Development Kit)和Eclipse
    的頭像 發表于 12-06 11:26 ?2728次閱讀

    idea如何輸入命令行參數

    在許多軟件開發和系統管理的任務中,我們經常需要向應用程序傳遞命令行參數。命令行參數是在運行時傳遞給程序的值,用于指定程序的行為和配置選項。本文將詳細介紹如何在不同的編程語言和操作系統中輸入命令
    的頭像 發表于 12-06 15:01 ?1186次閱讀
    主站蜘蛛池模板: 无限资源在线看影院免费观看| 有人有片的观看免费视频| abp-146| 暖暖 日本 视频 在线观看免费| BL文高H强交| 四虎永久在线精品国产免费| 好想被狂躁A片免费久99| 在线免费中文字幕| 琪琪的色原网站| 国精产品一区一区三区M| 91黄色大片| 胸太大被男同桌吃好爽| 美女被抽插到哭内射视频免费| 大迪克黑人异族| 伊人久久大香线蕉avapp下载| 欧美eee114| 国语自产二区高清国语自产拍| 97色伦图片7778久久| 午夜亚洲精品不卡在线| 美女露100%全身无遮挡| 国产乱码二卡3卡四卡| 45分钟做受片免费观看| 午夜亚洲WWW湿好大| 蜜桃成熟时2电影免费观看d| 国产精品一区二区三区免费| 边摸边吃奶边做激情叫床视| 亚洲精品一二三| 青青青青草| 撅高 自己扒开 调教| 国产精品JIZZ在线观看A片| 中文字幕在线观看亚洲| 无人区乱码区1卡2卡三卡在线| 伦 乱真实故事| 国内极度色诱视频网站| YELLOW日本动漫免费动漫| 亚洲一区二区女搞男| 色婷婷综合久久久中文字幕 | 男女亲吻摸下面吃奶视频| 国产免费内射又粗又爽密桃视频| 97在线看视频福利免费| 亚洲熟妇色自偷自拍另类|