、在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. jdbc:oracle:thin:@192.168.3.98:1521:orcl(详解)

    整理自互联网 一. jdbc:oracle:thin:@192.168.3.98:1521:orcljdbc:表示采用jdbc方式连接数据库oracle:表示连接的是oracle数据库thin:表示连 ...

  2. POJ 1173 Find them, Catch them

    题意:有两个帮派,每个人只属于一个帮派,m次操作,一种操作告诉你两个人不是一个帮派的,另一种操作问两个人是不是在一个帮派. 解法:并查集+向量偏移.偏移量表示和根节点是不是同一帮派,是为0,不是为1. ...

  3. ubuntu12.10设置thunderbird开机自启动

    sudo gedit eclipse.desktop #创建一个thnuderbird.desktop文件 [Desktop Entry] Type=Application Exec=/usr/bin ...

  4. SSH超时断开(ClientAliveInterval和ClientAliveCountMax )的使用

    有 2个方法 1 配置服务器 打开 /etc/ssh/sshd_config 找到 ClientAliveInterval 参数,如果没有就自己加一行 数值是秒,比如你设置为300,就是5分钟. Cl ...

  5. 【JSONCpp】简介及demo

    一.JSON简介 JSON 一种轻量级的数据交换格式,易于阅读.编写.解析,全称为JavsScript ObjectNotation. JSON由两种基本结构组成 ①   名字/值 对的集合,可以理解 ...

  6. WeChat Official Account Admin Platform API Introduction

    Keyword: WeChat API Introduction Message and GeneralAuthor: PondBay Studio[WeChat Developer EXPERT] ...

  7. 我用dedecms有感

    ---恢复内容开始--- 最近接了一个私单,简单的学校网站,注意,我一看上去是感觉很快,仿站,对方说这个东西你三天就能搞定啦,我也这么想的 (没经验啊) 接下来,我想都没想就用dedecms去做,之前 ...

  8. mybatis系列-05-SqlMapConfig.xml详解

    mybatis的全局配置文件SqlMapConfig.xml,配置内容如下: properties(属性) settings(全局配置参数) typeAliases(类型别名) typeHandler ...

  9. 详解 jupyter notebook 集成 spark 环境安装

    来自: 代码大湿 代码大湿 1 相关介绍 jupyter notebook是一个Web应用程序,允许你创建和分享,包含活的代码,方程的文件,可视化和解释性文字.用途包括:数据的清洗和转换.数值模拟.统 ...

  10. 第二百九十七天 how can I 坚持

    算是在家宅了一天吧,下午睡了会觉,晚上一起做了个饭,中午一起吃的炒菜和徐斌他同学. 还是那么冷啊. 整天都是东扯西扯的. 睡觉. 忘了件重要的事,就是今天第一次喝鸡尾酒,还有,常人之所以是常人,不是因 ...