Uboot移植添加启动菜单

原创 2015年11月19日 10:54:13

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


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











版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

2017.1.7 _u-boot的初步认识

今天结束了C语言部分和裸机部分,现在开始学习UBOOT,学习完毕UBOOT后以后就是在操作系统的基础上来进行操作裸机了。UBOOT是用来启动操作系统的。 当我们学习前面的简单的知识的时候可能觉得学不清...

U-boot中怎么添加配置菜单选项

在command.h中分析命令结构 /* 这是定义一个结构的属性,将其放在.u_boot_cmd这个段当中,相当于.data/.bss这些段 */ #define Struct_Section  __...

uboot中的快捷菜单的制作说明

新建一个名为:cmd_menu.c的文件,放到common目录下,修改同目录下的Makefile文件,加入编译选项: COBJS-$(CONFIG_CMD_MENU) += cmd_menu.o 编...

uboot菜单实现全过程

这个菜单其实就是一个uboot中的命令,uboot启动时,如果进入下载模式,就先运行这个命令。 命令的执行内容就是通过串口打印出一个菜单,等待用户输入,再执行相应的动作。 先自己写一个cmd_menu...

2014.4新版uboot启动流程分析

2014.4最新版本uboot启动过程详解 在网上搜索讲uboot启动过程的文章,大多都是比较老的版本,于是决定将新版uboot启动过程记录下来,以备后用。 2014.4版本uboot启动至命令行几个...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

uboot

我认为学习和应用u-boot对于刚接触的人来说最大的困难在于其功能比较全,文件(.S .c .h makefile文件)非常多,结构也比较复杂,难以理清各方面的关系。熟悉了一段时间之后,发现还是有很多...

uboot向kernel的传参机制——bootm与tags

uboot如何启动kernel以及uboot与kernel之间的传参机制详解

UBOOT 学习心得(UBOOT流程分析)

网上找到的UBOOT研究文章,结合自己这几天看的。目前是明白了UBOOT主干程序流程了。开始分析细节部分了。下面是别人写的UBOOT分析。 参考了fzb和赵春江两位大牛的,研究了2010.06版...

uboot中main_loop分析

============================================ 作者:yuanlulu http://blog.csdn.net/yuanlulu 版权没有,但是转...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Uboot移植添加启动菜单
举报原因:
原因补充:

(最多只允许输入30个字)