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

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

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

3天內不再提示

創建自定義的u-boot命令

電子工程師 ? 來源:嵌入式小生 ? 作者: iriczhao ? 2022-08-08 14:46 ? 次閱讀


開篇

為什么會有這篇文章,因為小生被u-boot源碼的設計所吸引了(源碼對命令的處理過程)。自定義u-boot命令屬于u-boot源碼的開發技術啦,可能u-boot官方開發人員、芯片原廠或者硬件板卡BSP開發人員會接觸到這一塊。

既然被我碰著了,那就皺眉一笑輕提筆,在此一文奉上。

對于u-boot來說,其核心功能是使用命令來執行對應的操作。在u-boot源碼/cmd目錄下則放置了關于u-boot所支持的所有命令,如下圖所示:

a6eaa4a0-16bf-11ed-ba43-dac502259ad0.png

(.o文件是編譯后生成的)

一、基礎

(1-1)命令定義

在實際開發中,我們可以創建新的命令結構,然后將命令添加到U-Boot中。步驟大致如下:首先在命令描述文件中包含command.h,然后再使用U_BOOT_CMD()U_BOOT_CMD_COMPLETE宏來填充struct cmd_tbl結構:

U_BOOT_CMD(name,maxargs,repeatable,command,"usage","help")
U_BOOT_CMD_COMPLETE(name,maxargs,repeatable,command,"usage,"help",comp)
  • name:命令名稱。注意:這不是一個字符串。
  • maxargs:此函數接受的最大參數值,包括命令本身。
  • repeatable:0 - 不允許自動重復;1 - 允許自動重復。
  • command:指向命令函數的指針。這是在u-boot命令行下發出命令時調用的函數。
  • usage:用于描述命令的提示信息。是一個字符串。
  • help:長描述。這是一個字符串。只有定義了CONFIG_SYS_LONGHELP時,長描述才可用。
  • comp:指向補全函數的指針。可能是NULL。如果在輸入命令參數以完成輸入時按下TAB鍵,則調用此函數。命令補全僅在定義了CONFIG_AUTO_COMPLETE時可用。

(1-2)命令函數

命令函數指針聲明如下:

int(*cmd)(structcmd_tbl*cmdtp,intflag,intargc,constchar*argv[]);
  • cmdtp:描述該命令的表條目。
  • flag:可以包含以下幾種選項:CMD_FLAG_REPEAT - 重復執行最后一條命令;CMD_FLAG_BOOTD - 該命令由bootd命令調用;CMD_FLAG_ENV - 該命令由run命令調用。
  • argc:包括命令在內的參數的數目。
  • argv:參數。允許的返回值為:CMD_RET_SUCCESS - 標志命令執行成功;CMD_RET_FAILURE - 命令執行失敗;CMD_RET_USAGE - 使用無效參數調用命令。這個值將顯示用法字符串。

二、創建自定義的u-boot命令

在第一小節中,已經描述了關于u-boot命令的基礎知識,本小節將來實現一個具體的u-boot命令。

這里假設這個命令命名為:showIriczhaoInfo。當我們在u-boot的命令行下輸入這個命令后,將打印出“[iriczhao]:u-boot hello world!!!”。

(2-1)命令創建過程

(1)在u-boot的/cmd目錄下創建一個文件,命名為command_test.c。

(2)添加頭文件。在command_test.c文件中添加如下的頭文件信息:

#include
#include

(3)定義showIriczhaoInfo的命令處理函數

staticintdo_showIriczhaoInfo(structcmd_tbl*cmdtp,intflag,intargc,char*constargv[])
{
printf("[iriczha]:u-boothelloworld!!!");

return0;
}

(4)使用U_BOOT_CMD關聯命令和命令處理函數

U_BOOT_CMD(showIriczhaoInfo,CONFIG_SYS_MAXARGS,0,do_showIriczhaoInfo,"do_showIriczhaoInfo","command
");

(5)將command_test.c文件添加到makefile文件中,如下圖所示:

a7144e04-16bf-11ed-ba43-dac502259ad0.png

(6)以Snadbox方式編譯u-boot源碼(注:也可以編譯其他架構下的u-boot)

(7)在宿主機終端中運行u-boot snadbox,效果如下:

a7296f8c-16bf-11ed-ba43-dac502259ad0.png

從上圖可見,當我們在u-boot的命令行上輸入showIriczhaoInfo后,按下回車鍵,輸出了[iriczhao]:u-boot hello world!!!信息,結果與預期效果一樣。

三、總結

在u-boot的命令描述文件中,是按照模塊來進行文件劃分的。例如對于ext4文件系統的命令操作就會放到ext4.c文件中,在該文件中放置操作ext4的所有命令。在分析u-boot的命令源碼時候,可根據該種思路來尋找具體的命令處理過程。

本文描述了u-boot命令行的定義過程,描述如何實現一個自定義命令并將其添加到u-boot中。

在u-boot源碼中,其命令與命令處理函數的綁定過程是一個非常精彩的技術點,先留著點,下回分析啦!

審核編輯:湯梓紅


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

    關注

    0

    文章

    122

    瀏覽量

    38703
  • 命令
    +關注

    關注

    5

    文章

    729

    瀏覽量

    22673

原文標題:自定義u-boot命令,有意思!

文章出處:【微信號:嵌入式小生,微信公眾號:嵌入式小生】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦
    熱點推薦

    u-boot命令之EMMC和SD卡操作命令詳解

    今天給大家詳細的介紹一下u-boot命令之EMMC和SD卡操作的mmc命令使用。希望這篇文章對大家有所幫助。
    發表于 07-12 15:19 ?5022次閱讀

    U-boot的基本介紹

    從本文開始,將陸續推送“手把手教你移植U-boot”系列文章,目標是由淺入深地講解U-boot的工作流程、原理、配置方法和移植方法,手把手教你完成U-boot的移植工作,默認硬件開發平臺為ARM,操作系統為Linux。
    發表于 07-14 16:52 ?3519次閱讀
    <b class='flag-5'>U-boot</b>的基本介紹

    飛凌全志T527開發板U-Boot添加自定義菜單

    , -1, 0); } #endif /* CONFIG_MENUKEY */ } 四、U-Boot添加自定義命令 難道通過 run_command() 執行menu命令后,菜單就
    發表于 07-15 09:42

    【OK210試用體驗】u-boot篇 -- u-boot初體驗(續)

    u-boot版本切記是要相對較新的,早時候的u-boot是不支持S5PV210相關型號的,當然可以體驗一下基于其他型號CPU的u-boot編譯。 將下載好后的u-boot放到喜好的
    發表于 08-22 01:44

    【OK210試用體驗】u-boot篇 -- 自定義單板

    ,還是有些差距,所以為了自定義自己的單板,就來學習一下如何定制。創建自己的板子信息 在u-boot的頂層README中,有講到如何定制單板。 1. 首先,在u-boot頂層目錄下的b
    發表于 08-25 19:54

    具有自定義phy的自定義板的u-boot錯誤怎么解決?

    嗨,我使用的是基于 LS1046ARDB 的定制板,在我的自定義板 iam 使用不同的 phy (Marvell 88e1512),現在當我構建和創建固件映像時,我在 u-boot 日志中收到以下
    發表于 03-29 07:25

    Porting U-Boot to the Control

    In this paper, the way of porting U-Boot to Control Computer Based MPC8349 will beintroduced
    發表于 01-25 15:45 ?13次下載

    u-boot簡介

    U-Boot,全稱 Universal Boot Loader,是遵循GPL條款的開放源碼項目。U-Boot的作用是系統引導。U-Boot從FADSROM、8xxROM、PPCBOOT
    發表于 10-14 11:17 ?3695次閱讀

    U-Boot命令介紹

    U-Boot命令介紹 Printenv 打印環境變量。 Uboot》 printenv baudrate=115200 ipaddr=192.168.1.1 ethaddr=12:34:56:78
    發表于 11-07 15:44 ?0次下載

    詳解U-Boot引導內核分析

    bootm命令是用來引導經過U-Boot的工具mkimage打包后的kernel image的。U-Boot源代碼的tools/目錄下有mkimage工具,這個工具可以用來制作不壓縮或者壓縮的多種可啟動映象文件。
    的頭像 發表于 04-13 15:22 ?5446次閱讀
    詳解<b class='flag-5'>U-Boot</b>引導內核分析

    u-boot常用的命令合集

    u-boot常用的命令合集
    發表于 02-11 09:50 ?2次下載

    uboot自定義命令

    U-Boot命令眾多,通過uboot命令可完成系統環境變量設置。U-Boot本質就是一份裸機程序,這樣可以在U-Boot
    的頭像 發表于 09-17 09:59 ?1553次閱讀

    Linux U-Boot開發指南

    介紹 U-Boot 的編譯打包、基本配置、常用命令的使用、基本調試方法等, 為 U-BOOT 的移植及應用開發提供了基礎。
    的頭像 發表于 03-06 10:28 ?1658次閱讀
    Linux <b class='flag-5'>U-Boot</b>開發指南

    教程 2:添加特征-自定義配置文件創建

    教程 2:添加特征 - 自定義配置文件創建
    發表于 07-06 18:50 ?0次下載
    教程 2:添加特征-<b class='flag-5'>自定義</b>配置文件<b class='flag-5'>創建</b>

    u-boot armv8鏈接腳本

    /u-boot-spl.lds進行鏈接,因為每個board的情況可能不同,所以u-boot可以通過Kconfig來自定義u-boot-spl.lds和
    的頭像 發表于 12-07 11:19 ?931次閱讀
    主站蜘蛛池模板: 美女视频黄视大全视频免费网址 | 天天干天天射天天爽 | 亚洲一区二区三区网站 | 公开免费视频 | 久久亚洲精品玖玖玖玖 | 五月天色婷婷丁香 | 1300部小u女视频免费 | 国产五月婷婷 | 又色又爽又黄视频 | 国产叼嘿网站免费观看不用充会员 | 亚洲一区欧美一区 | 色婷婷精品 | 九色综合伊人久久富二代 | 中国china体内裑精亚洲毛片 | 黄视频网站在线看 | 日本69sex护士 | 国产精品成人一区二区三区 | 欧美一级视频高清片 | 五月婷婷丁香在线观看 | 男人免费看片 | 国产免费一区二区三区最新 | 午夜久久久久久亚洲国产精品 | 9久久99久久久精品齐齐综合色圆 | 国产成人毛片亚洲精品不卡 | q2002在线观看免费 | 中文字幕色综合久久 | a久久| 男男浪荡双性受hplay | 亚洲乱淫| 色多多视频网站 | 又黄又视频 | 国产一区二区三区欧美精品 | 99久久国产免费中文无字幕 | 激情五月激情综合 | 色六月婷婷 | 天天天天做夜夜夜夜做 | 亚洲视频在线一区二区三区 | 狂捣猛撞侍卫攻双性王爷受 | 痴女在线播放免费视频 | 国产成人综合亚洲怡春院 | 日本三级电影在线观看 |