关闭

Uboot移植添加启动菜单

标签: u-boot移植linux
854人阅读 评论(0) 收藏 举报
分类:

        当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启动时的选择菜单已经添加结束(这里只实现了简单的功能,具体的内容根据需要添加即可)。


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











0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:65892次
    • 积分:884
    • 等级:
    • 排名:千里之外
    • 原创:20篇
    • 转载:8篇
    • 译文:0篇
    • 评论:29条
    文章分类
    最新评论