、在common目录下新增cmd_menu.c文件,内容为:

#include<common.h>
#include<command.h> #ifdef CONFIG_MENUKEY static char awaitkey(unsigned longdelay, int* error_p)
{
    int i;
    charc;
    if (delay ==-1)
    {
       while (1)
       {
           if (tstc())
               return getc();
       }
    }
    else
    {       
        for (i = 0; i < delay; i++)
           {
             if (tstc())
            returngetc();
               udelay (10*1000);
           }
    }
    if(error_p)
        *error_p = -1;
    return 0;
} voidmain_menu_usage(void)
{
       printf("\r\n*****************luozhiyong*****************\r\n");
       printf("\n======== User Menu ======== \n");
       printf("\r\n");
       printf("[1] 下载 u-boot.bin      写入 Nand Flash\r\n");
       printf("[2] 下载 Linux(uImage)   内核镜像写入 Nand Flash\r\n");
       printf("[3] 下载 yaffs2(fs.yaffs) 文件系统镜像写入 Nand Flash\r\n");
       printf("[4] 下载 Linux(uImage)   内核镜像到内存并运行\r\n");
       printf("[5]重启设备\r\n");
       printf("[q] 退出菜单\r\n");
       printf("\r\n");
       printf("输入选择: ");
} void menu_shell(void)
{
    charc;
    charcmd_buf[200];     while (1)
    {
         main_menu_usage();
         c = awaitkey(-1, NULL);
         printf("%c\n", c);
         switch (c)
         {
              case '1':
              {
                 strcpy(cmd_buf, "tftp 0x32000000 u-boot.bin; nand erase 0x00x60000; nand write 0x32000000 0x0 0x60000");
                 run_command(cmd_buf, 0);
                 break;
             }
            case '2':
               {
                 strcpy(cmd_buf, "tftp 0x32000000 uImage; nand erase 0x800000x200000; nand write 0x32000000 0x80000 0x200000");
                 run_command(cmd_buf, 0);
                 break;
               }
               case '3':
               {
                 strcpy(cmd_buf, "tftp 0x32000000 fs.yaffs; nand erase 0x280000;nand write.yaffs2 0x32000000 0x280000 $(filesize)");
                 run_command(cmd_buf, 0);
                 break;
               }
              case '4':
               {
                 strcpy(cmd_buf, "tftp 0x32000000 uImage; bootm 0x32000000");
                 run_command(cmd_buf, 0);
                 break;
               }
              case '5':
               {
                 strcpy(cmd_buf, "reset");
                 run_command(cmd_buf, 0);
                 break;
               }
           case 'q':
           {
                 return;   
                 break;
           }
        }
    }
} int do_menu (cmd_tbl_t *cmdtp, intflag, int argc, char *argv[])
{
       menu_shell();
       return0;
} U_BOOT_CMD(
    menu, 1, 0, do_menu,
    "User Menu",
    "U-boot Download Menu\n"
); #endif

、修改common目录下的Makefile文件,将cmd_menu.o加入编译:

COBJS-y +=main.o
COBJS-y +=cmd_menu.o
COBJS-y += ACEX1K.o

至此,在终端下输入 menu 就可以看到自己创建的菜单

注:如果要开机自启动,则在main.c的#ifdef CONFIG_AUTO_COMPLETE...#endif句断后加上:

# ifdef CONFIG_MENUKEY
    if (menukey == CONFIG_MENUKEY) {
        
        run_command ("menu", 0);
        disable_ctrlc(prev);
    }else{
        run_command (s, 0);
    }
#endif /* CONFIG_MENUKEY */

其他相似链接:http://lanyin1225.blog.163.com/blog/static/126261290201281322430504/

改进uboot,添加自定义快捷菜单的更多相关文章

  1. 在uboot上创建菜单

    一.原理 菜单其实就是一个uboot中的命令,和其他的命令没有什么差别.  uboot启动时,如果进入uboot命令模式,先运行这个命令,就会打印出一个菜单界面. 在uboot的命令模式,通过键入“m ...

  2. 给view添加类似系统上拉快捷菜单的手势

    iOS7以后从屏幕最下方上划会滑出快捷菜单,感觉这个效果不错,就想做个类似的效果,这个东西技术含量不高,每次都写一遍的话就太浪费时间了,所以就把它写成了一个分类,用起来会方便一点. demo地址:ht ...

  3. #AOS应用基础平台# 添加了用户自己定义快捷菜单在平铺布局下的用户自己定义排序管理

    #AOS开发平台# 添加了用户自己定义快捷菜单在平铺布局下的用户自己定义排序管理.

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

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

  5. Win7怎么把运行添加到Win快捷菜单的右侧、、、

    win7怎么把运行添加到Win快捷菜单的右侧... ------------------------------ 右键桌面任务栏--选择属性 ----------------------------- ...

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

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

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

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

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

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

  9. #AOS应用基础平台# 实现了在用户权限范围内自己定义的快捷菜单的导航展示

    from=501" style="color:rgb(255,131,115); padding:0px; margin:0px; font-family:微软雅黑,Verdana ...

随机推荐

  1. MyBatis的association示例——MyBatis学习笔记之三

    前两篇博文介绍的都是单表映射,而实际上很多时候我们需要用到较复杂的映射.今天学会的association的用法,就是一例,现写出来和大家分享(为简洁起见,ant工程中各文件.目录的布局,以及其它与前面 ...

  2. bzoj 1324 Exca王者之剑(黑白染色,最小割)

    [题意] 两相邻点不能同时选,选一个点集使得权值和最大. 出题人语文好... [思路] 将图进行黑白二染色,然后构建最小割模型. [代码] #include<set> #include&l ...

  3. HDU 1708

    思路 :二位数组维护数目. #include<iostream> #include<stdio.h> #include<stdlib.h> #include< ...

  4. 《Genesis-3D开源游戏引擎完整实例教程-2D射击游戏篇:简介及目录》(附上完整工程文件)

    G-3D引擎2D射击类游戏制作教程 游戏类型: 打飞机游戏属于射击类游戏中的一种,可以划分为卷轴射击类游戏. 视觉表现类型为:2D 框架简介: Genesis-3D引擎不仅为开发者提供一个3D游戏制作 ...

  5. 转】Apache解决高并发和高可用

    原博主于: http://www.ha97.com/5803.html   感谢! 服务器集群 Apache 和 nginx(web服务器) 1.  多台集群机器联合处理一个任务. 2.  一台机器处 ...

  6. 第三次作业,GUI设计之最大子序列和

    先吐槽一发!!!学渣表示作业太难了啊!!!!!!做一次作业要用好久好久,要问好多好多大神才能行,虽然确实提高不少,花的时间真是……!!!!! 这次作业费劲心血,希望老师能给个好分数,至少对于学渣来说已 ...

  7. Spring EL Operators example

    Spring EL supports most of the standard mathematical, logical or relational operators. For example, ...

  8. [iOS基础控件 - 6.9] 聊天界面Demo

    A.需求 做出一个类似于QQ.微信的聊天界面 1.每个cell包含发送时间.发送人(头像).发送信息 2.使用对方头像放在左边,我方头像在右边 3.对方信息使用白色背景对话框,我方信息使用蓝色背景对话 ...

  9. java封装对象转json字符串

    /** * Copyright (c) 2011-2015, James Zhan 詹波 (jfinal@126.com). * * Licensed under the Apache License ...

  10. UIImageView旋转任意角度---实现方法

    转自:http://blog.csdn.net/trandy/article/details/6626281 -(UIImageView *) makeRotation:(UIImageView *) ...