- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
uboot ping代码学习笔记
/luoqindong/article/details/6196444
luoqindong的专栏uboot :v1.1.6start_armboot
??? uboot从start.s启动后会跳转到lib_arm/board.c里的start_armboot函数,从这以后都
???????? 是C语言代码。start_armboot做了一些初始化化然后在死循环里调用main_loop函数 :
???? /* main_loop() can return to retry autoboot, if so just run it again. */
???? for (;;) {
???? main_loop ();
???? }main_loop
main_loop是在;common/main.c中定义的,下面是从串中读取命令然后执行的一部分代码:
for (;;) {
len = readline (CFG_PROMPT); //从串口读入命令
flag = 0; /* assume no special flags for now */
if (len 0)
strcpy (lastcommand, console_buffer);
else if (len == 0)
flag |= CMD_FLAG_REPEAT;
}
if (len == -1)
puts (INTERRUPT\n);
else
rc = run_command (lastcommand, flag); // 执行命令
if (rc = 0) {
/* invalid command or not repeatable, forget it */
lastcommand[0] = 0;
}
}
find_command
run_command首先调用find_command在命令列表里查找到输入的命令:
/* Look up command in command table */
if ((cmdtp = find_cmd(argv[0])) == NULL) {
printf (Unknown command %s - try help\n, argv[0]);
rc = -1; /* give up after bad command */
continue;
}
find_cmd返回的是cmd_tbl_t类型,cmd_tbl_t里有命令对应的执行函数,再调用具体的cmd_tbl_t
????????? 执行函数来执行命令具体的操作:?? /* OK - call function to do the command */
?? if ((cmdtp-cmd) (cmdtp, flag, argc, argv) != 0) {
?? rc = -1;
?? }
uboot所有的命令都定义在commom目录下,ping命令在cmd_net.c文件里定义,定义如下:??? ??? U_BOOT_CMD(
???? ping, 2, 1, do_ping,
???? ping\t- send ICMP ECHO_REQUEST to network host\n,
???? pingAddress\n
??? );?
5 U_BOOT_CMD
U_BOOT_CMD定义如下:
/*
* Monitor Command
*
* All commands use a common argument format:
*
* void function (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]);
*/
?
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
文档评论(0)