U-boot项目添加命令

本文介绍了U-Boot源码结构及命令实现方法。通过修改源码添加自定义命令,并展示了命令的数据结构定义与宏定义。此外,还讲解了如何通过配置文件启用所需命令。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、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里有了相应定义,就会把相应实现进行编译。
就可以获得相关命令的支持了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值