Uboot移植添加启动菜单

        当uboot启动过程中可以按任意键中断uboot的启动,进入uboot命令行模式,这里是添加进入命令行之前的菜单,实现简易的菜单选择。启动菜单的设置所有文件都在uboot/common目录下。

第一步,在uboot/common目录下创建名为cmd_menu.c的文件,并添加如下代码:

/*
 * add uboot cmd_menu by sn02241
 */

#include <common.h>
#include <command.h>

#ifdef CONFIG_CMD_MENU


void menu_shell(void)
{
	char keyselect;
	do
	{
		printf("\r\n\n\n------Boot Main Menu ('q' to quit)------\r\n");
		printf("[0] boot menu test\n");
		printf("Enter your selection: ");
		keyselect = getc();
		printf("%c\n", keyselect);
		switch (keyselect)
		{
			case '0':
				printf("'0' pressed, enter 'q' to quit");
			break;
			case 'q':
				printf("'q' pressed, quit...\n\n");
			break;
			default :
				printf("error pressed");
			break;

		}

	}
	while ((keyselect != 'q') && (keyselect != 'Q'));
}

int do_menu (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
{
	menu_shell();
	return 0;
}

U_BOOT_CMD(
    menu,   3,  0,  do_menu,
    "显示菜单用于启动设置\n",
    "\t显示菜单用于启动设置"
);

#endif

其中U_BOOT_CMD是一个宏定义,作用是将一个名为menu的命令与do_menu函数绑定,方便在其他文件(函数)中调用menu时直接关联do_menu函数。其他的函数就是实现基础的输出功能和bootArgs的赋值。说明一下U_BOOT_CMD的几个参数含义

#define U_BOOT_CMD(_name, _maxargs, _rep, _cmd, _usage, _help)        \
    U_BOOT_CMD_COMPLETE(_name, _maxargs, _rep, _cmd, _usage, _help, NULL)

name          命令名字(不需要双引号)
maxargs     最大参数的个数
rep              命令是否可重复,下一次按回车时是否需要再执行,为1时可重复
cmd             绑定的函数指针
usage          字符串,简要说明
help             字符串,详细说明


第二步,在uboot/common目录下的Makefile文件添加如下语句,功能是在编译内核时将刚刚新建的cmd_menu文件编译进内核。

########## szd add ##################
obj-$(CONFIG_CMD_MENU) += cmd_menu.o
#####################################

CONFIG_CMD_MENU是一个宏定义,当实现该宏定义时,就可以将cmd_menu.c编译进内核了。截图显示如下:



第三步,在uboot/common/main.cmain_loop函数中添加如下语句,以实现对menu命令的调用:

/****************************************************/
// szd add
#ifdef CONFIG_CMD_MENU
	run_command("menu", 0);
#endif

/***************************************************/

其中,run_command函数可以实现,调用声明的命令menu。截图效果如下:



第四步,万事俱备,只差声明CONFIG_CMD_MENU宏了,我把它添加在板子对应的头文件中,即uboot/include/configs/mx6dl_sabreauto.h文件中。如下:

/******************* szd add ***************/
#define CONFIG_CMD_MENU
/*******************************************/

截图如下:



OK!至此uboot启动时的选择菜单已经添加结束(这里只实现了简单的功能,具体的内容根据需要添加即可)。


编译测试一下吧,显示如下图所示说明编译成功:











评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值