、在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. [Everyday Mathematics]20150116

    设 $\al_n\geq 0$ 且 $\dps{\vlm{n}\al_n=0}$, 试求 $$\bex \vlm{n}\frac{1}{n}\sum_{k=1}^n \ln\sex{\frac{k}{ ...

  2. 【跟我一起学Python吧】Python解释执行原理

    这里的解释执行是相对于编译执行而言的.我们都知道,使用C/C++之类的编译性语言编写的程序,是需要从源文件转换成计算机使用的机器语言,经过链接器链接之后形成了二进制的可执行文件.运行该程序的时候,就可 ...

  3. 一些不错的英文歌曲MV,留个存档!

    Lambada [[http://www.yinyuetai.com/video/265213]]Trouble Is A Friend [[http://www.yinyuetai.com/vide ...

  4. 直线相交 POJ 1269

    // 直线相交 POJ 1269 // #include <bits/stdc++.h> #include <iostream> #include <cstdio> ...

  5. [HIve - LanguageManual] LateralView

    Lateral View Syntax Description Example Multiple Lateral Views Outer Lateral Views Lateral View Synt ...

  6. 如何在安裝SELinux的环境执行Quartus II

    (原創) 如何在安裝SELinux的環境執行Quartus II? (SOC) (Quartus II) (Linux) (RedHat) Abstract一般人安裝Linux時,也會同時安裝SELi ...

  7. 五、python使用模块

    if __name__=='__main__':用法: 当我们在命令行运行模块文件时,Python解释器把一个特殊变量__name__置为__main__,而如果在其他地方导入该hello模块时,if ...

  8. CDH5.5.1 安装Spark ON Yarn环境

    CDH对我们已经封装了,我们如果需要Spark on Yarn,只需要yum安装几个包就可以了. 前面的文章我有写过如果搭建自己内网的CDH Yum服务器,请参考<CDH 5.5.1 Yum源服 ...

  9. android sdk manager 闪退 打不开问题

    android sdk manager 闪退 打不开问题 环境 win8系统 如果访问不了  dl-ssl.google.com 网址,在C:\Windows\System32\Drivers\etc ...

  10. Codeforces Round #375 (Div. 2) ABCDE

    A - The New Year: Meeting Friends 水 #include<iostream> #include<algorithm> using namespa ...