在uboot中加入快捷操作菜单的方法非常简单,在论坛发布的uboot201003V1.1的源码包里已经包含了菜单的源码
http://www.xcembed.com/bbs/viewthread.php?tid=19&page=1&extra=#pid32
这个菜单其实就是一个uboot中的命令,uboot启动时,如果进入下载模式,就先运行这个命令。命令的执行内容就是通过串口打印出一个菜单,等待输入数字,再执行相应的动作。

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

编写cmd_menu.c的内容:
定义一个uboot cmd:

  1. U_BOOT_CMD(
  2. menu, 3, 0, do_menu,
  3. "menu - display a menu, to select the items to do something\n",
  4. " - display a menu, to select the items to do something"
  5. );

cmd的名为 menu     执行的动作是do_menu函数

实现do_menu

  1. int do_menu (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
  2. {
  3. menu_shell();
  4. return 0;
  5. }

这里调用menu_shell函数

  1. void menu_shell(void)
  2. {
  3. char cmd_buf[200];
  4. while (1)
  5. {
  6. main_menu_usage(); //打印菜单
  7. c = awaitkey(-1, NULL);
  8. printf("%c\n", c);
  9. switch (c)
  10. {
  11. case '1': //输入‘1’执行的动作
  12. {
  13. .....
  14. break;
  15. }
  16. case '2': //输入‘2’执行的动作
  17. {
  18. .....
  19. break;
  20. }
  21. case '3': //输入‘3’执行的动作
  22. {
  23. .....
  24. break;
  25. }
  26. .....
  27. ....
  28. }
  29. }
  30. }

menu_shell就是一个while循环,调用main_menu_usage打印菜单,然后awaitkey,再switch输入的键值,
执行相应的case

我的main_menu_usage如下:

  1. void main_menu_usage(void)
  2. {
  3. printf("[1] 烧写bootloader到nandflash\r\n");
  4. printf("[2] 烧写Linux Kernel到nandflash\r\n");
  5. printf("[3] 烧写yaffs2文件系统到nandflash\r\n");
  6. printf("[4] 下载程序在SDRAM中运行\r\n");
  7. printf("[5] 设置uboot参数\r\n");
  8. printf("[6] 格式化Nandflash\r\n");
  9. printf("[7] 启动Linux系统\r\n");
  10. printf("[8] 进入Shell模式\r\n");
  11. printf("[9] 重启uboot\r\n");
  12. if (bBootFrmNORFlash == 1)
  13. printf("[0] 下载bootloader到NorFlash\r\n");
  14. printf("Enter your selection: ");
  15. }

以烧写uboot到nandflash为例,case 1:中的内容为:

  1. strcpy(cmd_buf, "usbslave 1 0x30000000; nand erase bios; nand write.jffs2 0x30000000 bios 0x100000");
  2. run_command(cmd_buf, 0);
  3. break;

按照这个依次写每个case

main.c中调用menu命令:
main_loop函数中在abortboot (bootdelay) 结束后加入:

  1. #ifdef CONFIG_CMD_MENU
  2. run_command("menu", 0);
  3. #endif

编译uboot下载到FLASH中就能看到菜单了

uboot中的快捷菜单的制作说明 【转】的更多相关文章

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

    转:http://blog.chinaunix.net/uid-22030783-id-366971.html 在uboot中加入快捷操作菜单的方法非常简单,在论坛发布的uboot201003V1.1 ...

  2. 改进uboot,添加自定义快捷菜单

    .在common目录下新增cmd_menu.c文件,内容为: #include<common.h> #include<command.h> #ifdef CONFIG_MENU ...

  3. 前端开发css实战:使用css制作网页中的多级菜单

    前端开发css实战:使用css制作网页中的多级菜单 在日常工作中,大家都会遇到一些显示隐藏类菜单,比如页头导航.二维码显示隐藏.文本提示等等......而这些效果都是可以使用纯css实现的(而且非常简 ...

  4. 浏览器扩展系列————在WPF中定制WebBrowser快捷菜单

    原文:浏览器扩展系列----在WPF中定制WebBrowser快捷菜单 关于如何定制菜单可以参考codeproject上的这篇文章:http://www.codeproject.com/KB/book ...

  5. PyQt(Python+Qt)学习随笔:Qt Designer中部件的快捷菜单策略(contextMenuPolicy)取值及含义

    在Qt Designer中可以设置部件的快捷菜单策略,快捷菜单通过在部件上点击鼠标右键触发. 快捷菜单策略通过枚举类型Qt.ContextMenuPolicy来定义,对应枚举类型取值及含义如下: 通过 ...

  6. 关于Yaffs2在u-boot中的支持

    开发板是一块2G的MLC的NandFlash,页大小8k+512,为其移植u-boot到yaffs2这了.以前在Mini2440上移植过2k+64的slc的NandFlash的Yaffs2支持,当然也 ...

  7. Linux下nautilus的右键快捷菜单项设置

    某一天我的Linux更新完后, 我照常在文件夹下点击右键想打开终端, 却发现右键快捷菜单没有Open in terminal的菜单项了. 在网上查找了一下, 结合自己系统的情况发现了解决办法. 由于我 ...

  8. 配置Info.plist (设置状态栏样式、自定义定位时系统弹出的提示语、配置3DTouch应用快捷菜单)

    一.概述 iOS中很多功能需要配置Info.plist才能实现,如设置后台运行.支持打开的文件类型.自定义访问隐私内容时弹出的提示等.了解Info.plist中各字段及其含义,可以访问苹果开发网站相关 ...

  9. 为ASP.NET控件加入快捷菜单

    ContextMenu Control 快捷菜单控件概述: MSDN Liabrary 中包含了几个DHTML快捷菜单的示例.分别提供了对这一功能的不能实现方法.一个快捷菜单就是在页面中任何位置的一组 ...

随机推荐

  1. 自学Aruba5.1.1-基于时间的Role定义

    点击返回:自学Aruba之路 自学Aruba5.1.1-基于时间的Role定义 可以配置一条rule是基于时间来做限制 具体配置时间(Time ranges)步骤如下: 1 建立一个绝对时间范围,命令 ...

  2. harmakik

    Solution 对于原树一个节点\(x\): \(f_x(h)\)表示,\(x\)作为一个深度为\(h\)的点时,\(x\)及其子树的安排方案有多少(不考虑\(x\)具体在深度为\(h\)的哪个点) ...

  3. 洛谷 P3871 [TJOI2010]中位数 解题报告

    P3871 [TJOI2010]中位数 题目描述 给定一个由N个元素组成的整数序列,现在有两种操作: 1 add a 在该序列的最后添加一个整数a,组成长度为N + 1的整数序列 2 mid 输出当前 ...

  4. elasticsearch 安装、配置

    elasticsearch:基于java开发,基于RESTful web 接口,提供分布式多用户能力的全文搜索引擎. elasticsearch 安装: 1. java SE Development ...

  5. linux 自定义信号

    从来没试过linux自定义信号,查了下,说是系统只提供了SIGUSR1和SIGUSR2两个,就两个够吗?更要命的是如果要自定义信号如#define SIG_MYSIG   ....的话要改内核才行,哥 ...

  6. A1086. Tree Traversals Again

    An inorder binary tree traversal can be implemented in a non-recursive way with a stack. For example ...

  7. 地址空间格局随机化ASLR

    Address space layout randomization(ASLR)是一种参与保护缓冲区溢出问题的一个计算机安全技术.是为了防止攻击者在内存中能够可靠地对跳转到特定利用函数.ASLR包括随 ...

  8. 盖得化工--selenium翻页测试

    Python爬虫视频教程零基础小白到scrapy爬虫高手-轻松入门 https://item.taobao.com/item.htm?spm=a1z38n.10677092.0.0.482434a6E ...

  9. Hadoop生态圈-Cloudera Manager的基本使用

    Hadoop生态圈-Cloudera Manager的基本使用 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 1>.ClouderaManager功能 1.1>.管理监 ...

  10. 简易ATM机

    简易ATM机(代码如下): /* * 功能:简易银行系统 */package day8; import java.util.Scanner; /** * * @FengYan Huang Admini ...