uboot中的快捷菜单的制作说明 【转】

转自:http://blog.chinaunix.net/uid-22030783-id-366971.html

在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中就能看到菜单了

时间: 2024-10-21 18:41:11

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

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

原文:浏览器扩展系列----在WPF中定制WebBrowser快捷菜单 关于如何定制菜单可以参考codeproject上的这篇文章:http://www.codeproject.com/KB/books/0764549146_8.aspx?fid=13574&df=90&mpp=25&noise=3&sort=Position&view=Quick&fr=26#xx0xx 本文主要讲述如何在这篇文章中的ShowContextMenu方法中弹出自己的Conte

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

前端开发css实战:使用css制作网页中的多级菜单 在日常工作中,大家都会遇到一些显示隐藏类菜单,比如页头导航.二维码显示隐藏.文本提示等等......而这些效果都是可以使用纯css实现的(而且非常简单),使用css的优势显而易见,它可以使页面中的javascript变得更少. 实现逻辑: 核心:hover伪类控制子元素的显示隐藏,添加css3动画;  (没错就是这样简单) :hover伪类,适用于当用户指向一个元素时,例如用户的鼠标指向一个段落p.当用户鼠标离开元素时,恢复元素原有的样式显示

(转载)Win32 SDK编程系列文章——菜单(快捷菜单)——动态加载

理论 创建普通菜单步骤如下: 1)创建菜单 如:CreateMenu 2)   添加菜单项 如:AppendMenu 3)加载菜单         LoadMenu 4)设置菜单到窗口 SetMenu 5)处理菜单响应 6)消除菜单 DestroyMenu 创建右键菜单的步骤如下: 1)创建菜单 如:CreateMenu 2)   添加菜单项 如:AppendMenu 3)使用TrackPopupMenu加载菜单. 4)处理菜单响应 5)消除菜单 DestroyMenu 当然,如果你选择在已有菜

行内/块级垂直居中、图像文本替换以及二级下拉菜单的制作

经过近一个月对HTML与css的学习,利用HTML以及div+css对简单的静态网页进行简单的布局有了一定的基础,但是对于网页结构布局的分析.部分属性的使用存在着问题,希望在以后的学习能有所提高,这里就最近的学习情况进行一下总结与归纳: 一.行内元素与块级元素水平.垂直居中问题 (一)CSS设置行内元素的水平居中 div{text-align:center} /*DIV内的行内元素均会水平居中*/ CSS设置行内元素的垂直居中 div{height:30px; line-height:30px}

C#:使用快捷菜单(ContextMenuStrip)删除DataGridView控件指定行

工作中遇到一个场景:在DataGridView上单击鼠标右键弹出快捷菜单,在快捷菜单内需要有"删除本行"."清空数据"等按钮,于是我就自己实现了一个: 实现步骤如下: 步骤1,建立一个C#下的Windows窗体应用程序,取名DgvMenuStripTest 步骤2,主窗体内的控件只有一个名为dgvTest的DataGridView,对这个DataGridView启用添加.启用编辑.启用删除,并设置其在父容器中停靠 步骤3,为这个DataGridView添加Mouse

在 Swift 项目中实现侧滑菜单-利用 SWRevealViewController

你可以完全自己手动写一个侧滑菜单,但是现在在 GitHub 上面已经有很多免费的开源库了,如果不是有很特别的需求,大可不必新建一个轮子. 在这里我使用的这个第三方库名字叫做 SWRevealViewController,作者是 John Lluch.这个免费的类库提供了很方便快捷的方法去把侧滑菜单加入到你的 App 里面,而且它还提供了很多个性化的设置项.它是用 Objective-C 来写的,但是我们也可以很方便的在 Swift 项目中去使用它.你分分钟便可学会如何使用. 首先来看一下我们的

解决:长按一条接收到的彩信,快捷菜单“选择性复制”功能错误

[测试步骤]长按一条接收到的彩信,快捷菜单--"选择性复制" [测试结果]功能错误,未实现选择性复制,实际是播放彩信内容 [预期结果]应该选择复制彩信内容 通过分析代码我们定位到以下代码: private final class MsgListMenuClickListener implements MenuItem.OnMenuItemClickListener { private MessageItem mMsgItem; public MsgListMenuClickListen

【MFC】VS2013 动态创建快捷菜单(右键菜单)

参考 http://blog.csdn.net/csdnzhwk/article/details/47395639 参考 http://blog.csdn.net/jiadabin/article/details/22686161 1.创建一个基于对话框的项目 2.在资源头文件(Resource.h),定义命令ID: #define ID_MENUCAT 1109 #define ID_MENUDOG 1110 #define ID_MENUMONKEY 1111 #define _APS_NE

径向菜单的制作

最终效果: 在径向菜单的制作前,首先需要知道几点知识点: Math.sin(x)      x 的正玄值.返回值在 -1.0 到 1.0 之间: Math.cos(x)    x 的余弦值.返回的是 -1.0 到 1.0 之间的数: 这两个函数中的X 都是指的“弧度”而非“角度”,弧度的计算公式为: 2*PI/360*角度,使用js表示是这样的:Math.PI/180*度数(1度=180/Math.PI) 如:30° 角度 的弧度 = 2*PI/360*30 如何计算圆的极坐标(用于计算出子菜单