一、U-BOOT源碼樹結構:
board 針對各個主板的原始碼
common 公用部分
net 網路相關
include/configs 針對各個主板的設定檔
二、增加命令
1.修改common/cmd_net.c
聲明一個命令:
U_BOOT_CMD(
exit, 2, 1, do_exit,
"exit - exit script/n",
" - exit functionality/n"
);
命令的具體實現:
int
do_exit (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
{
int r;
r = 0;
if (argc > 1)
r = simple_strtoul(argv[1], NULL, 10);
return -r - 2;
}
2.在對主板的標頭檔申明宏。
如:include/configs/awg2440.h增加
#define CONFIG_CMD_TESTEXPERT
然後重新make即可。
注釋:因為我沒有新加檔案,所以不用更改Makefile。更詳細的文章已經貼上來了,在下面。
詳細文章:
u-boot啟動後,進入命令模式,通過輸入uboot提供的命令來進行互動操作。一些相關命令的用法已經在前面文章介紹,這裡介紹一下uboot命令內部結構,並瞭解如何配置uboot的命令,以及可以自己添加一些命令。
如何?一個命令,看下面一個簡單的例子,就明白了。
uboot命令的資料結構定義:
struct cmd_tbl_t {
char *name; /* Command Name */
int maxargs; /* maximum number of arguments */
int repeatable; /* autorepeat allowed? */
/* Implementation function */
int (*cmd)(struct cmd_tbl_s *, int, int, char *[]);
char *usage; /* Usage message (short) */
char *help; /* Help message (long) */
};
聲明命令的宏定義:
#define U_BOOT_CMD(name,maxargs,rep,cmd,usage,help) /
cmd_tbl_t __u_boot_cmd_##name Struct_Section = {#name, maxargs, rep, cmd, usage, help}
聲明一個命令:
U_BOOT_CMD(
exit, 2, 1, do_exit,
"exit - exit script/n",
" - exit functionality/n"
);
命令的具體實現:
int
do_exit (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
{
int r;
r = 0;
if (argc > 1)
r = simple_strtoul(argv[1], NULL, 10);
return -r - 2;
}
下面,我們介紹一下命令的配置方式。注意:最新的uboot命令配置方法發生變化,與以前不同。
首先,在標頭檔 smdk2410.h (該檔案前面文章有介紹) 包含了所需的命令標頭檔
#include <config_cmd_default.h>
在 config_cmd_default.h 中定義了,所需要用到的命令,如:
#define CONFIG_CMD_MEMORY /* md mm nm mw cp cmp crc base loop mtest */
(所以,autoconf.mk裡,就會有 CONFIG_CMD_MEMORY=y )
而在common/Makefile 下,有這樣的定義:
COBJS-$(CONFIG_CMD_MEMORY) += cmd_mem.o
這樣,當config_cmd_default.h裡有了相應定義,就會把相應實現進行編譯。
就可以獲得相關命令的支援了。