U-boot分析と移植(4)----U-boot追加コマンド
U-Bootの実行プロセスを初歩的に理解した後、
U-Bootの各コマンドはU_を通りますBOOT_CMDマクロ定義.このマクロはinclude/command.hヘッダファイルで定義し、コマンドごとにcmd_を定義するtbl_t構造体.
各コマンドマクロU_BOOT_CMD用cmd_tbl_t構造体記述コマンド
パラメータの意味は次のとおりです.
name
これはコマンド名です.二重引用符で囲む必要はありません.
maxargs
最大パラメータの数
rep
命令を繰り返すことができるかどうかは、次の車を押すときに実行します.
cmd
対応する関数ポインタ
usage
文字列表示の簡単な説明
help
文字列表示の詳細
ソースコードにコマンドがcmd_にあることがわかりますxxx.cで実現した
簡単なテストコマンドを追加します
1、commonディレクトリの下にhelloを追加する.cファイル
do_xxx関数は、次のように定義する必要があります.
int do_hello(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
パラメータの個数を記入するときは、CONFIG_に注意してください.SYS_MAXARGSはinclude/configs/smdk 2140である.hで定義されている、デフォルト16 2、common/Makefileの#commandには以下の内容が追加されています.
COBJS-$(CONFIG_CMD_TEST) += cmd_hello.o
3、include/configs/smdk 2410.h(このファイル名は実際の操作に基づいて、smdk 2410.hなどの自分のプラットフォームファイルに対して変更する)は以下の内容を追加する.
にある
#include後に追加:
#define CONFIG_CMD_HELLO
または
include/config_cmd_default.hファイルに、このコマンドのマクロ定義を追加します.
4、コンパイルしてからボードに降りる
U-Bootの各コマンドはU_を通りますBOOT_CMDマクロ定義.このマクロはinclude/command.hヘッダファイルで定義し、コマンドごとにcmd_を定義するtbl_t構造体.
/* U_BOOT_CMD*/
#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用cmd_tbl_t構造体記述コマンド
struct cmd_tbl_s {
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) */
#ifdef CFG_LONGHELP
char *help; /* Help message (long) */
#endif
#ifdef CONFIG_AUTO_COMPLETE
/* do auto completion on the arguments */
int (*complete)(int argc, char *argv[], char last_char, int maxv, char *cmdv[]);
#endif
};
パラメータの意味は次のとおりです.
name
これはコマンド名です.二重引用符で囲む必要はありません.
maxargs
最大パラメータの数
rep
命令を繰り返すことができるかどうかは、次の車を押すときに実行します.
cmd
対応する関数ポインタ
usage
文字列表示の簡単な説明
help
文字列表示の詳細
ソースコードにコマンドがcmd_にあることがわかりますxxx.cで実現した
簡単なテストコマンドを追加します
1、commonディレクトリの下にhelloを追加する.cファイル
#include <common.h>
#include <command.h>
#ifdef CONFIG_CMD_HELLO
int do_hello(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
{
int i;
printf("argc = %d
",argc);
for(i = 0; i < argc; i++)
printf("i = %d, %s
",i,argv[i]);
return 0;
}
U_BOOT_CMD(hello,CONFIG_SYS_MAXARGS,0,do_h
do_xxx関数は、次のように定義する必要があります.
cmd_tbl_s int (*cmd)(struct cmd_tbl_s *, int, int, char *[]);
int do_hello(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
パラメータの個数を記入するときは、CONFIG_に注意してください.SYS_MAXARGSはinclude/configs/smdk 2140である.hで定義されている、デフォルト16 2、common/Makefileの#commandには以下の内容が追加されています.
COBJS-$(CONFIG_CMD_TEST) += cmd_hello.o
3、include/configs/smdk 2410.h(このファイル名は実際の操作に基づいて、smdk 2410.hなどの自分のプラットフォームファイルに対して変更する)は以下の内容を追加する.
にある
#include
#define CONFIG_CMD_HELLO
または
include/config_cmd_default.hファイルに、このコマンドのマクロ定義を追加します.
4、コンパイルしてからボードに降りる
U-Boot 2009.11 (12 ?14 2011 - 00:44:00)
DRAM: 64 MB
Flash: 512 kB
NAND: NAND_ECC_NONE selected by board driver. This is not recommended !!
64 MiB
In: serial
Out: serial
Err: serial
Net: dm9000
Hit any key to stop autoboot: 0
BAI2011/12/13 # hello
argc = 1
i = 0, hello
BAI2011/12/13 # hello this is my test!
argc = 5
i = 0, hello
i = 1, this
i = 2, is
i = 3, my
i = 4, test!
BAI2011/12/13 #