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

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

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

創(chuàng)建自定義的u-boot命令

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


開篇

為什么會(huì)有這篇文章,因?yàn)樾∩籾-boot源碼的設(shè)計(jì)所吸引了(源碼對(duì)命令的處理過(guò)程)。自定義u-boot命令屬于u-boot源碼的開發(fā)技術(shù)啦,可能u-boot官方開發(fā)人員、芯片原廠或者硬件板卡BSP開發(fā)人員會(huì)接觸到這一塊。

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

對(duì)于u-boot來(lái)說(shuō),其核心功能是使用命令來(lái)執(zhí)行對(duì)應(yīng)的操作。在u-boot源碼/cmd目錄下則放置了關(guān)于u-boot所支持的所有命令,如下圖所示:

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

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

一、基礎(chǔ)

(1-1)命令定義

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

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

(1-2)命令函數(shù)

命令函數(shù)指針聲明如下:

int(*cmd)(structcmd_tbl*cmdtp,intflag,intargc,constchar*argv[]);
  • cmdtp:描述該命令的表?xiàng)l目。
  • flag:可以包含以下幾種選項(xiàng):CMD_FLAG_REPEAT - 重復(fù)執(zhí)行最后一條命令;CMD_FLAG_BOOTD - 該命令由bootd命令調(diào)用;CMD_FLAG_ENV - 該命令由run命令調(diào)用。
  • argc:包括命令在內(nèi)的參數(shù)的數(shù)目。
  • argv:參數(shù)。允許的返回值為:CMD_RET_SUCCESS - 標(biāo)志命令執(zhí)行成功;CMD_RET_FAILURE - 命令執(zhí)行失?。籆MD_RET_USAGE - 使用無(wú)效參數(shù)調(diào)用命令。這個(gè)值將顯示用法字符串。

二、創(chuàng)建自定義的u-boot命令

在第一小節(jié)中,已經(jīng)描述了關(guān)于u-boot命令的基礎(chǔ)知識(shí),本小節(jié)將來(lái)實(shí)現(xiàn)一個(gè)具體的u-boot命令。

這里假設(shè)這個(gè)命令命名為:showIriczhaoInfo。當(dāng)我們?cè)趗-boot的命令行下輸入這個(gè)命令后,將打印出“[iriczhao]:u-boot hello world!!!”。

(2-1)命令創(chuàng)建過(guò)程

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

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

#include
#include

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

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

return0;
}

(4)使用U_BOOT_CMD關(guān)聯(lián)命令和命令處理函數(shù)

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源碼(注:也可以編譯其他架構(gòu)下的u-boot)

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

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

從上圖可見,當(dāng)我們?cè)趗-boot的命令行上輸入showIriczhaoInfo后,按下回車鍵,輸出了[iriczhao]:u-boot hello world!!!信息,結(jié)果與預(yù)期效果一樣。

三、總結(jié)

在u-boot的命令描述文件中,是按照模塊來(lái)進(jìn)行文件劃分的。例如對(duì)于ext4文件系統(tǒng)的命令操作就會(huì)放到ext4.c文件中,在該文件中放置操作ext4的所有命令。在分析u-boot的命令源碼時(shí)候,可根據(jù)該種思路來(lái)尋找具體的命令處理過(guò)程。

本文描述了u-boot命令行的定義過(guò)程,描述如何實(shí)現(xiàn)一個(gè)自定義命令并將其添加到u-boot中。

在u-boot源碼中,其命令與命令處理函數(shù)的綁定過(guò)程是一個(gè)非常精彩的技術(shù)點(diǎn),先留著點(diǎn),下回分析啦!

審核編輯:湯梓紅


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

    關(guān)注

    0

    文章

    119

    瀏覽量

    38136
  • 命令
    +關(guān)注

    關(guān)注

    5

    文章

    658

    瀏覽量

    21927

原文標(biāo)題:自定義u-boot命令,有意思!

文章出處:【微信號(hào):嵌入式小生,微信公眾號(hào):嵌入式小生】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

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

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

    U-boot的基本介紹

    從本文開始,將陸續(xù)推送“手把手教你移植U-boot”系列文章,目標(biāo)是由淺入深地講解U-boot的工作流程、原理、配置方法和移植方法,手把手教你完成U-boot的移植工作,默認(rèn)硬件開發(fā)平臺(tái)為ARM,操作系統(tǒng)為L(zhǎng)inux。
    發(fā)表于 07-14 16:52 ?2496次閱讀
    <b class='flag-5'>U-boot</b>的基本介紹

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

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

    【OK210試用體驗(yàn)】u-boot篇 -- u-boot初體驗(yàn)(續(xù))

    u-boot版本切記是要相對(duì)較新的,早時(shí)候的u-boot是不支持S5PV210相關(guān)型號(hào)的,當(dāng)然可以體驗(yàn)一下基于其他型號(hào)CPU的u-boot編譯。 將下載好后的u-boot放到喜好的
    發(fā)表于 08-22 01:44

    【OK210試用體驗(yàn)】u-boot篇 -- 自定義單板

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

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

    嗨,我使用的是基于 LS1046ARDB 的定制板,在我的自定義板 iam 使用不同的 phy (Marvell 88e1512),現(xiàn)在當(dāng)我構(gòu)建和創(chuàng)建固件映像時(shí),我在 u-boot 日志中收到以下
    發(fā)表于 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
    發(fā)表于 01-25 15:45 ?13次下載

    u-boot簡(jiǎn)介

    U-Boot,全稱 Universal Boot Loader,是遵循GPL條款的開放源碼項(xiàng)目。U-Boot的作用是系統(tǒng)引導(dǎo)。U-Boot從FADSROM、8xxROM、PPCBOOT
    發(fā)表于 10-14 11:17 ?3487次閱讀

    U-Boot命令介紹

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

    詳解U-Boot引導(dǎo)內(nèi)核分析

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

    u-boot常用的命令合集

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

    uboot自定義命令

    。 U-Boot命令眾多,通過(guò)uboot命令可完成系統(tǒng)環(huán)境變量設(shè)置。U-Boot本質(zhì)就是一份裸機(jī)程序,這樣可以在U-Boot
    的頭像 發(fā)表于 09-17 09:59 ?1106次閱讀

    Linux U-Boot開發(fā)指南

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

    教程 2:添加特征-自定義配置文件創(chuàng)建

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

    u-boot armv8鏈接腳本

    /u-boot-spl.lds進(jìn)行鏈接,因?yàn)槊總€(gè)board的情況可能不同,所以u-boot可以通過(guò)Kconfig來(lái)自定義u-boot-spl.lds和
    的頭像 發(fā)表于 12-07 11:19 ?450次閱讀