TX2440 ARM开发板Uboot移植 (六、实现启动快捷菜单)

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

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

static char awaitkey(unsigned long delay, int* error_p)
{
    int i;
    char c;
    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;
}

void main_menu_usage(void)
{
 printf("\r\n######## Hotips TFTP DownLoad for SMDK2440 ########\r\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)
{
    char c;
    char cmd_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 0x0 0x60000; nand write 0x32000000 0x0 0x60000");
          run_command(cmd_buf, 0);
          break;
  }
        case '2':
        {
          strcpy(cmd_buf, "tftp 0x32000000 uImage; nand erase 0x80000 0x200000; 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, int flag, int argc, char *argv[])
{
    menu_shell();
    return 0;
}

U_BOOT_CMD(
 menu, 1, 0, do_menu,
 "Download Menu",
 "U-boot Download Menu by Hotips\n"
);

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

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

COBJS-y += ACEX1K.o





?  U-BOOT版本:

U-BOOT-2010.06 

?  交叉编译器版本:

arm-linux-gcc  4.1.2

?  操作系统平台:

Linux    Red Hat 9.0

 

 

 

1 。首先准备2个文件 cmd_menu.c 在u-boot/common下,

        Def.h 在u-boot/include 下 放在该对应目录下

2 。修改u-boot/commom下Makefile 大约在168行增加

COBJD-$(CONFIG_CMD_MENU) += cmd_menu.o 即可。

3 。修改u-boot/common/main.c 文件大约在419行添加(红色字体为需要增加的)

#ifdef CONFIG_AUTOBOOT_KEYED

       Int prev = disable_ctrlc(1);

#endif

/*qinjianbo begin*/

#ifdef CONFIG_CMD_MENU

       if (bBootFrmNORFlash == 1)   

       {

              run_command("menu", 0);      

       }

       else

       {

              printf("Booting Linux ...\n");

              boot_zImage(0x00120000,0x400000);

       }

#else

       printf("Booting Linux ...\n");

       boot_zImage(0x00120000,0x400000);

#endif   

/*qinjianbo end*/

      

       大约在在468行增加

       #endif /* CONFIG_MENUKEY */

#endif     /* CONFIG_BOOTDELAY */

 

#ifdef CONFIG_AMIGAONEG3SE

       {

           extern void video_banner(void);

           video_banner();

       }

#endif

/*qinjianbo begin*/

#ifdef CONFIG_CMD_MENU

       run_command("menu", 0);

#endif

/*qinjianbo end*/

 

4 。在u-boot/include/configs/qinjianbo.h中大约114行增加

       #define CONFIG_CMD_MTDPARTS

#define CONFIG_CMD_JFFS2

#define CONFIG_CMD_MENU  //qinjianbo

 

做完了上述的步骤我相信的你下载菜单一定跑起来了吧, 你的心情怎样呢? 当然如果你还未成功的话,请留下你的问题点,我们一起解决。(要源码的话呢?。。。。。)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值