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


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











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

uboot菜单实现全过程

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

uboot启动后在内存中运行裸机程序hello

如题,实现过程中发现3额问题,先写下来,待解答: 1、uboot启动后再dnw上打印许多信息,我想改变其中的打印信息或加上自己的打印信息以证明程序运行到何处。修改完后重新编译uboot.bin。 ...
  • xiangzi10
  • xiangzi10
  • 2012年11月23日 14:34
  • 5227

第二十期 U-Boot添加web failsafe功能《路由器就是开发板》

这一期我们在U-Boot上搭建一个简易的web serbver,实现http方式的更新功能,web server是基于uIP实现,已经有前辈在这方面完成了需求,所以我这里向大家推荐两个github的r...
  • aggresss
  • aggresss
  • 2016年10月06日 13:30
  • 2442

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

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

(1)uboot详解——板子刚上电时都干了些什么

电子产品如果没有了电,就跟废品没什么区别,是电赋予了他们生命,然而程序则是他们的灵魂。 小时候一直很好奇,一个个死板的电子产品为什么一上电以后就能够工作了呢?为什么一个小小芯片就能够运行我们编写的程序...
  • lee244868149
  • lee244868149
  • 2015年11月07日 12:29
  • 4353

[uboot] (第四章)uboot流程——uboot编译流程

uboot编译流程简单介绍
  • ooonebook
  • ooonebook
  • 2016年11月01日 21:23
  • 2283

回味经典——uboot1.1.6 之 第二阶段 第三阶段

第一阶段:http://blog.csdn.net/lizuobin2/article/details/52054293     上篇文章说到,再清 BSS 段之后,CPU 跳转到 sdram 里...
  • lizuobin2
  • lizuobin2
  • 2016年07月29日 14:10
  • 1337

[uboot] (番外篇)uboot 驱动模型

uboot引入了驱动模型(driver model),这种驱动模型为驱动的定义和访问接口提供了统一的方法。提高了驱动之间的兼容性以及访问的标准型。 uboot驱动模型和kernel中的设备驱动模型类似...
  • ooonebook
  • ooonebook
  • 2016年11月19日 20:19
  • 4164

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

uboot如何启动kernel以及uboot与kernel之间的传参机制详解
  • skyflying2012
  • skyflying2012
  • 2014年07月04日 15:27
  • 21086

2014.4新版uboot启动流程分析

2014.4最新版本uboot启动过程详解 在网上搜索讲uboot启动过程的文章,大多都是比较老的版本,于是决定将新版uboot启动过程记录下来,以备后用。 2014.4版本uboot启动至命令行几个...
  • skyflying2012
  • skyflying2012
  • 2014年05月14日 16:10
  • 71909
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Uboot移植添加启动菜单
举报原因:
原因补充:

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