相關(guān)cmd分析以前在u-boot中添加自定命令時(shí)非常驚訝中添_第1頁(yè)
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、u-boot 命令處理機(jī)制以前在 u-boot 中添加自定命令時(shí),非常驚訝在 u-boot 中添加自定義命令是如此的簡(jiǎn)單。只需要使用 u-boot 提供的一個(gè)宏定義,就可以將自己寫(xiě)好令添加到 u-boot 中。對(duì)于一些高級(jí)語(yǔ)言,比如說(shuō) java 可能通過(guò)反射的機(jī)制很容易實(shí)現(xiàn)。但是對(duì)于 C 這種語(yǔ)言,要達(dá)到如此高的靈活度,實(shí)在是無(wú)法想象。由于當(dāng)時(shí)比較忙,對(duì)于細(xì)節(jié)也沒(méi)有深入研究。趁如今比較閑,深入了解一下。如何在 u-boot 中添加命令在u-boot 的common 下,建立令文件,如cmd_test.c。do_test(cmd_tbl_t *cmdtp,只需要將自己定義的要實(shí)現(xiàn)的功能flag,

2、argc, char *argv)用改格式封裝好(至于問(wèn)什么要如此封裝,與cmd_tbl_t 的結(jié)構(gòu)有關(guān)),并使用定義 U_BOOT_CMD 宏將 do_test 方法封裝一下就好了。當(dāng)然還需要修改 common 下的 Makefile 文件,將cmd_test.c 加入編譯方可。實(shí)現(xiàn)分析先看一下 U_BOOT_CMD 的定義,在common.h 中。U_BOOT_CMD#include #include do_test(cmd_tbl_t *cmdtp,flag,argc, char *argv)prf(jusest n); return 0; U_BOOT_CMD(dfu, 1 ,1,do

3、_test, enter the dfu mode.,nenter the dfu mode . );的定義如下:其中 Struct_Secion 的定義如下:由此可見(jiàn),被 U_BOOT_CMD 定義過(guò)的結(jié)構(gòu)體,最終回被放到一個(gè)u_boot_cmd 段中??梢酝ㄟ^(guò) readef 工具進(jìn)行驗(yàn)證,會(huì)發(fā)現(xiàn)在生成的目標(biāo)文件中,確實(shí)多了一個(gè).u_boot_mcd 段。再看一下u-boot 的,其中有這么一段:將所有的.u_boot_cmd 放在了一起。而起還定義了兩可以發(fā)現(xiàn)該個(gè)常量u_boot_cmd_start 和u_boot_cmd_end 還表示所有命令的起始位置和結(jié)束位置。最后只需對(duì)該段進(jìn)行遍歷

4、就可以得到所有令了。最后生成的u-boot 可執(zhí)行文件中會(huì)包含如下的一段:.u_boot_cmd : u_boot_cmd_start = .;*(.u_boot_cmd)u_boot_cmd_end = .;uboot_end_data = .;#define Struct_Sectionattribute (unused,section (.u_boot_cmd)#define U_BOOT_CMD(name,maxargs,rep,cmd,usage,help) cmd_tbl_t u_boot_cmd_Struct_Section = , maxargs, rep, cmd, usag

5、e, help_ _ U_B O O T_CM D _ST A R T_ _ U_B O O T_CM D _ST A R T獲取所有 U_BOOT_CMD令如下:cmd_tbl_t *find_cmd (const char *cmd)len = & u_boot_cmd_end - & u_boot_cmd_start; return find_cmd_tbl(cmd, & u_boot_cmd_start, len);cmd_tbl_t *find_cmd_tbl (const char *cmd, cmd_tbl_t *table,table_len)cmd_tbl_t *cmdtp_temp = table; /*Init value */fo

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論