Uboot中的快捷菜单的制作说明
2016-02-03 17:22
302 查看
这个菜单其实就是一个uboot中的命令,uboot启动时,如果进入下载模式,就先运行这个命令。命令的执行内容就是通过串口打印出一个菜单,等待输入数字,再执行相应的动作。
新建一个名为:cmd_menu.c的文件,放到common目录下,修改同目录下的Makefile文件,加入编译选项:
COBJS-$(CONFIG_CMD_MENU) += cmd_menu.o
编写cmd_menu.c的内容:
定义一个uboot cmd:
U_BOOT_CMD(
menu, 3, 0, do_menu,
"menu - display a menu, to select the items to do something\n",
" - display a menu, to select the items to do something"
);
cmd的名为 menu 执行的动作是do_menu函数
实现do_menu
int do_menu (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
{
menu_shell();
return 0;
}
这里调用menu_shell函数
void menu_shell(void)
{
char cmd_buf[200];
while (1)
{
main_menu_usage(); //打印菜单
c = awaitkey(-1, NULL);
printf("%c\n", c);
switch (c)
{
case '1': //输入‘1’执行的动作
{
.....
break;
}
case '2': //输入‘2’执行的动作
{
.....
break;
}
case '3': //输入‘3’执行的动作
{
.....
break;
}
.....
....
}
}
}
menu_shell就是一个while循环,调用main_menu_usage打印菜单,然后awaitkey,再switch输入的键值,
执行相应的case
我的main_menu_usage如下:
void main_menu_usage(void)
{
printf("[1] 烧写bootloader到nandflash\r\n");
printf("[2] 烧写Linux Kernel到nandflash\r\n");
printf("[3] 烧写yaffs2文件系统到nandflash\r\n");
printf("[4] 下载程序在SDRAM中运行\r\n");
printf("[5] 设置uboot参数\r\n");
printf("[6] 格式化Nandflash\r\n");
printf("[7] 启动Linux系统\r\n");
printf("[8] 进入Shell模式\r\n");
printf("[9] 重启uboot\r\n");
if (bBootFrmNORFlash == 1)
printf("[0] 下载bootloader到NorFlash\r\n");
printf("Enter your selection: ");
}
以烧写uboot到nandflash为例,case 1:中的内容为:
strcpy(cmd_buf, "usbslave
1 0x30000000; nand erase bios; nand write.jffs2 0x30000000 bios 0x100000");
run_command(cmd_buf, 0);
break;
按照这个依次写每个case
再main.c中调用menu命令:
main_loop函数中在abortboot (bootdelay) 结束后加入:
#ifdef CONFIG_CMD_MENU
run_command("menu", 0);
#endif
编译uboot下载到FLASH中就能看到菜单了
http://blog.chinaunix.net/uid-22030783-id-366971.html
新建一个名为:cmd_menu.c的文件,放到common目录下,修改同目录下的Makefile文件,加入编译选项:
COBJS-$(CONFIG_CMD_MENU) += cmd_menu.o
编写cmd_menu.c的内容:
定义一个uboot cmd:
U_BOOT_CMD(
menu, 3, 0, do_menu,
"menu - display a menu, to select the items to do something\n",
" - display a menu, to select the items to do something"
);
cmd的名为 menu 执行的动作是do_menu函数
实现do_menu
int do_menu (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
{
menu_shell();
return 0;
}
这里调用menu_shell函数
void menu_shell(void)
{
char cmd_buf[200];
while (1)
{
main_menu_usage(); //打印菜单
c = awaitkey(-1, NULL);
printf("%c\n", c);
switch (c)
{
case '1': //输入‘1’执行的动作
{
.....
break;
}
case '2': //输入‘2’执行的动作
{
.....
break;
}
case '3': //输入‘3’执行的动作
{
.....
break;
}
.....
....
}
}
}
menu_shell就是一个while循环,调用main_menu_usage打印菜单,然后awaitkey,再switch输入的键值,
执行相应的case
我的main_menu_usage如下:
void main_menu_usage(void)
{
printf("[1] 烧写bootloader到nandflash\r\n");
printf("[2] 烧写Linux Kernel到nandflash\r\n");
printf("[3] 烧写yaffs2文件系统到nandflash\r\n");
printf("[4] 下载程序在SDRAM中运行\r\n");
printf("[5] 设置uboot参数\r\n");
printf("[6] 格式化Nandflash\r\n");
printf("[7] 启动Linux系统\r\n");
printf("[8] 进入Shell模式\r\n");
printf("[9] 重启uboot\r\n");
if (bBootFrmNORFlash == 1)
printf("[0] 下载bootloader到NorFlash\r\n");
printf("Enter your selection: ");
}
以烧写uboot到nandflash为例,case 1:中的内容为:
strcpy(cmd_buf, "usbslave
1 0x30000000; nand erase bios; nand write.jffs2 0x30000000 bios 0x100000");
run_command(cmd_buf, 0);
break;
按照这个依次写每个case
再main.c中调用menu命令:
main_loop函数中在abortboot (bootdelay) 结束后加入:
#ifdef CONFIG_CMD_MENU
run_command("menu", 0);
#endif
编译uboot下载到FLASH中就能看到菜单了
http://blog.chinaunix.net/uid-22030783-id-366971.html
相关文章推荐
- iOS ----调用系统摄像捕捉人脸
- 一、Mongodb入门
- >/dev/null 2>&1 这句话的含义及使用的意义
- java正则表达式提取数字、英文、中文
- 利用组合方法模式重构方法体
- RHEL 7.0系统安装配置图解教程
- Jenkins进阶系列之——04Publish Over FTP Plugin插件
- 理解 JavaScript(四)
- 自定义可拖动GridView 仿android桌面launcher
- android:shape的使用(圆角按钮和按钮颜色)
- The Inconvenient Truth About Data Science
- C#怎么给PDF添加背景图片
- 理解 JavaScript(三)
- 深入理解Java:注解(Annotation)自定义注解入门
- js小技巧:数组去重
- Struts2 程序步骤
- redis应用场景
- 109. Convert Sorted List to Binary Search Tree
- nyoj 237
- 子线程更新UI(非Handle)