#include <common.h>
#include <config.h>
#include <command.h>

static char cmd_buf[200];
static int quit_flag = 0;
    
char awaitkey(unsigned long delay, int* error_p)
{
    int i;

    if (delay == -1) {
        while (1) {
            if (tstc()) /* we got a key press */
                return getc();
        }
    }
    else {       
        for (i = 0; i < delay; i++) {
      if (tstc()) /* we got a key press */
       return getc();
            udelay (10*1000);
        }
    }
   
    if (error_p)
        *error_p = -1;
    return 0;
}

static int isbootfromnor(void)
{
    volatile unsigned long *pa = (volatile unsigned long * )0;
 unsigned long pb;

 pb = *pa;
 *pa = 0x12345678;
 if(*pa != 0x12345678) { //不可写
       
           return 1;
  }
 else{  
        *pa = pb;
     printf("nand \n");
           return 0;
 } 
}

void showmainmenu(void)
{   
 printf("\r\n##### u-boot cmd menu ##### \r\n");
 if(isbootfromnor())
   printf("[o] download u-boot to nor \r\n"); 
 printf("[n] download u-boot to nand \r\n");
 printf("[k] download kernel to nand \r\n");
 printf("[f] download yaffs-rootfs to nand \r\n");
 printf("[r] reset the u-boot \r\n");
 printf("[b] boot the system \r\n");
 printf("[q] quit from menu \r\n");    
}

void do_uboot_load_o(void)
{
    strcpy(cmd_buf, "protect off all;erase 0 7ffff;tftp 30000000 u-boot.bin;cp.b 30000000 0 80000");
    run_command(cmd_buf, 0);
}

void do_uboot_load_n(void)
{
    strcpy(cmd_buf, "nand erase.part u-boot;tftp 30000000 u-boot.bin;nand write 30000000 u-boot");
    run_command(cmd_buf, 0);
}

void do_kernel_load(void)
{
    strcpy(cmd_buf, "nand erase.part kernel;tftp 30000000 uImage;nand write 30000000 kernel");
    run_command(cmd_buf, 0);
}

void do_rootfs_load(char * const argv[])
{
    char *p = cmd_buf + 14;
    strcpy(cmd_buf, "nand erase.part rootfs");
    run_command(cmd_buf, 0);
    strcpy(cmd_buf, "tftp 30000000 ");
    strcpy(p, argv[1]);
    run_command(cmd_buf, 0);
    strcpy(cmd_buf, "nand write.yaffs 30000000 460000 ");
    p = cmd_buf + 33;
    strcpy(p, argv[2]);
    run_command(cmd_buf, 0);
}

void do_reset_cmd(void)
{
    run_command("reset", 0);
}

void do_bootm_cmd(void)
{
    run_command("boot", 0);
}

void do_quit(void)
{
    quit_flag = 1;
}

void pre_handle(void)
{
    printf("sure you have prepared file by tftp! \n"); 
}

void menu_shell(char * const argv[])
{
     char cmd;
     showmainmenu();
  while(1){
          cmd = awaitkey(-1, NULL);
    switch(cmd){
        case 'o':
               pre_handle();
                  do_uboot_load_o();
               break;
               case 'n':
               pre_handle();
               do_uboot_load_n();
               break;
         case 'k':
               pre_handle();
         do_kernel_load();
               break;
      case 'f':
               pre_handle();
               do_rootfs_load(argv);
               break;
      case 'r':do_reset_cmd();
               break;
      case 'b':
         do_bootm_cmd();
               break;
      case 'q':
            do_quit();
               break;
    }
    if(quit_flag == 1)
       break;
    cmd = 0;
  }
 quit_flag = 0;
}

int do_menu(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
{
    menu_shell(argv);
    return 0;
}

U_BOOT_CMD(
 menu, 3, 1, do_menu,
 "sure you have prepared file by tftp, and press corresponding key",
 "sure you have prepared file by tftp \n"
 "press corresponding key, the u-boot will help you download file to the suited memory location \n"
 "note: this menu only support yaffs rootfs, if you want to download jffs rootfs, you must input cmd by hand! \n"
 "if you want to download rootfs, you must input 3 paramters like <menu> <rootfs_name> <rootfs_size> \n"
);

 

cmd_menu.c的更多相关文章

  1. uboot补丁的分析

    接下来分析一下韦老师的uboot补丁: -------------------------------------------------------------------------------- ...

  2. (转载)U-boot启动完全分析

    1.1 U-Boot工作过程 U-Boot启动内核的过程可以分为两个阶段,两个阶段的功能如下: (1)第一阶段的功能 Ø 硬件设备初始化 Ø 加载U-Boot第二阶段代码到RAM空间 Ø 设置好栈 Ø ...

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

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

  4. u-boot代码学习内容

    前言  u-boot代码庞大,不可能全部细读,只能有选择的读部分代码.在读代码之前,根据韦东山教材,关于代码学习内容和深度做以下预先划定. 一.Makefile.mkconfig.config.mk等 ...

  5. 在uboot上创建菜单

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

  6. U-Boot启动过程完全分析

    U-Boot启动过程完全分析 1.1       U-Boot工作过程 U-Boot启动内核的过程可以分为两个阶段,两个阶段的功能如下: (1)第一阶段的功能 硬件设备初始化 加载U-Boot第二阶段 ...

  7. 修改LVDS支持1024*600分辨率

    一.在boot中增加LVDS设置分辨率1024*600选项 1.修改文件TQIMX6_android-4.2.2\bootable\bootloader\uboot-imx\common\cmd_me ...

  8. ok6410 u-boot-2012.04.01移植七完善u-boot移植(u-boot移植结束)

    继ok6410 u-boot-2012.04.01移植六后,开发板已支持MLC NAND.DM9000等.但还需要完善比如环境变量.mtdpart分区.裁剪.制作补丁等.下面的工作就是完善移植的u-b ...

  9. AM3358--Uboot支持LCD输出1024*768

    1. uboot/include/lcd/tq3358_fb.h #define TFT240320 1 #define TFT320240 2 #define TFT480272 3//T43(天嵌 ...

随机推荐

  1. wxGridCellEditor

    wxGridCellEditor Class Referenceabstract Class List by Category » Grid Related Classes #include < ...

  2. 【邀请函】小投入 大产出—微软智能云(Azure)之CDN 专题

    会议时间 2016 年 11 月 24 日 14:00-16:00 会议介绍 尊敬的客户: 您是否还在为如何提高网站的响应速度以及用户增长造成的源站压力烦恼?是否还在担心源站 IP 暴露存在安全隐患? ...

  3. 把IDENTITY_INSERT 设置为 ON ,还不能插入数据问题

    IDENTITY_INSERT 为 ON 时 , 必须把需要插入的列名列出来 不然报错 正确例子: SET IDENTITY_INSERT  table(表名) ONinsert into table ...

  4. Linux --防火墙(一)

    基本组成 表: filter:用来对数据包进行过滤,根据具体的规则要求决定如何处理一个数据包.表内包含三个链,即INOUT.FORWARD.OUTPUT nat表:主要用来修改数据包的IP地址.端口号 ...

  5. 查看oracle固定目录下日志和trace文件大小脚本

    python刚入门,在Oracle官网看到个小脚本,感觉挺有意思,经过测试切实可行. [oracle@ycr python]$ more 5.py import datetimeimport osim ...

  6. JS入口函数和JQuery入口函数

    首先,讲一下它们的区别: (1)JS的window.onload事件必须要等到所有内容,以及外部图片之类的文件加载完之后,才会去执行. (2)JQuery入口函数是在所有标签加载完之后,就会去执行. ...

  7. URL地址解析

    URL的一般格式为(带方括号[]的为可选项): protocol :// hostname[:port] / path /[?query]#fragment   1.protocol :// 为传输协 ...

  8. fastJson简单实用

    public class FastJsonText { @Test public void text(){ User user1 = new User(); user1.setName("健 ...

  9. 使用TextView/EditText应该注意的地方,监听EditText,addTextChangedListener

    http://blog.csdn.net/huichengongzi/article/details/7818676 监听 EditText 控件: addTextChangedListener(ne ...

  10. data-ng-show 指令

    <!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...