Exynos4412 Uboot 移植(三)—— Uboot添加自定义命令
?Uboot添加自定義命令:uboot中的命令使用U_BOOT_CMD這個宏聲明來注冊進系統,鏈接腳本會把所有的cmd_tbl_t結構體放在相鄰的地方。
UBoot版本:u-boot-2013.01?
一、U-Boot命令的格式
? 即使是內核的啟動,也是通過U-Boot命令來實現的。U-Boot中每個命令都是通過 U_BOOT_CMD 宏來定義的,格式如下:
?U_BOOT_CMD(name,maxargs,repeatable,command,"usage","help")
各項參數的意義如下:
1) -- name:命令的名字,注意,它不是一個字符串(不要用雙引號括起來);
2)-- maxargs:最大的參數個數;
3)-- repeatable:命令是否可以重復,可重復是指運行一個命令后,下次敲回車即可再次運行;
4)-- command:對應的函數指針,類型為(*cmd)(struct cmd_tbl_s *, int, int, char *[]);
5) -- usage:簡單的使用說明,這是個字符串;
6)-- help:較詳細的使用說明,這是個字符串。
宏U_BOOT_CMD 在include/command.h中定義,如下所示
而U_BOOT_CMD 是用一個struct cmd_tbl_s 結構體定義,這個結構體仍是在include/command.h中實現:
? ? ? 可以看出,對于每個使用U_BOOT_CMD 宏來定義的命令,就是宏 U_BOOT_CMD(name,maxargs,rep,cmd,usage,help)將struct cmd_tbl_s這樣的一個命令結構體放到U-BOOT連接腳本 board/xxx/u-boot.lds中定義的".u-boot_cmd"段所在的內存區域,即在".u_boot_list.cmd"段中定義一個 cmd_tbl_t 結構。
連接腳本U-Boot.lds中有如下代碼:
??當用戶在u-boot的shell中輸入命令時,就會在".u_boot_list.cmd"這個內存區域中查找( _u_boot_list_cmd__start -?_u_boot_list_cmd__end),當該區域中某一個cmd_tbl_s命令結構體的cmd_tbl_s.name和輸入的命令字符串相符時,就調用該命令結構體的cmd_tbl_s.cmd()函數。
二、添加自定義命令
自定義命令設為"myubootcmd",不可與u-boot命令重名,
1、添加命令行配置信息
?在u-boot-2013.01/include/configs/fs4412.h(由具體開發板來配置,這里使用fs4412)中添加 #define CONFIG_CMD_MYUBOOT,如下:
2、編寫命令行對應的源程序
??在u-boot-2013.01/common/目錄下,建立相應的命令執行文件cmd_hello.c?
? 注意命名的規范,必須是cmd_xxx.c才行。里面的內容也是有格式要求的,如函數的格式,必須指定參數的;還有相應結尾部分的U_BOOT_CMD定義部分,使不能缺省的。如果命令不需要跟參數,則把maxargs設置為1即可了。內容如下所示:
[cpp]?view plaincopy
? 在common/Makefile中增加一項.
4、編譯
5、測試
總結
以上是生活随笔為你收集整理的Exynos4412 Uboot 移植(三)—— Uboot添加自定义命令的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 逻辑推理题
- 下一篇: 埃及金字塔之谜最完美的解释