U BOOT CMD原始碼 分析

2021-06-08 16:29:24 字數 1641 閱讀 4294

u_boot_cmd 分析

start_armboot

main_loop

} run_command

find_cmd(argv[0])

找到命令後,呼叫cmd_tbl_t->cmd呼叫函式 }

} 1.

u_boot_cmd(

mtdparts,  

6,  

0,  

do_jffs2_mtdparts,

"mtdparts- define flash/nand partitions\n",

"\n"

);cmd_tbl_t __u_boot_cmd_mtdparts struct_section = ;

以下從doc/readme.command 翻譯

要想在u-boot中新增命令,必須新建乙個command structure。要想建立乙個command structure,則首先包含 "command.h" 標頭檔案,然後用u_boot_cmd巨集填充 cmd_tbl_t struct。

經過巨集展開後新建立的這個結構體的名字會__u_boot_cmd開頭,然後聯結器會把這個結構體連線到指定的section上。

這樣link才能從**中提取所有的命令,生成乙個靜態的array。這樣就可以通過遍歷乙個以__u_boot_cmd_starty開頭的陣列找到所要的命令。

1.struct cmd_tbl_s ;

#define struct_section  

__attribute__ ((unused,section (".u_boot_cmd")))

#define u_boot_cmd(name,maxargs,rep,cmd,usage,help) \

cmd_tbl_t __u_boot_cmd_##name struct_section =

typedef struct cmd_tbl_s  

cmd_tbl_t;

extern cmd_tbl_t  

__u_boot_cmd_start;

extern cmd_tbl_t  

__u_boot_cmd_end;

這裡要看的是##name和#name這兩個操作.##name將字元直接跟在後面, #name會將name這個字元中以"..."的形式放置。

1. u_boot_cmd(

tftpboot,  

3,  

1,  

do_tftpb,

"tftpboot- boot image via network using tftp protocol\n",

"[loadaddress] [bootfilename]\n"

);usage=  

"tftpboot- boot image via network using tftp protocol\n";

help=  

"[loadaddress] [bootfilename]\n";

cmd_tbl_t __u_boot_cmd_tftpboot __attribute__ ((unused,section (".u_boot_cmd"))) = ;

int do_tftpb (cmd_tbl_t *cmdtp, int flag, int argc, char *argv)

Uboot命令U BOOT CMD分析

u boot cmd name,maxargs,repeatable,command,usage help 各個引數的意義如下 name 命令名,非字串,但在u boot cmd中用 符號轉化為字串 maxargs 命令的最大引數個數 repeatable 是否自動重複 按enter鍵是否會重複執行...

spring原始碼分析 spring原始碼分析

1.spring 執行原理 spring 啟動時讀取應用程式提供的 bean 配置資訊,並在 spring 容器中生成乙份相應的 bean 配置登錄檔,然後根據這張登錄檔例項化 bean,裝配好 bean 之間的依賴關係,為上 層應用提供準備就緒的執行環境。二 spring 原始碼分析 1.1spr...

思科VPP原始碼分析(dpo機制原始碼分析)

vpp的dpo機制跟路由緊密結合在一起。路由表查詢 ip4 lookup 的最後結果是乙個load balance t結構。該結構可以看做是乙個hash表,裡面包含了很多dpo,指向為下一步處理動作。每個dpo都是新增路由時的乙個path的結果。dpo標準型別有 dpo drop,dpo ip nu...