uboot中的快捷菜单的制作说明

新建一个名为:cmd_menu.c的文件,放到common目录下,修改同目录下的Makefile文件,加入编译选项:
COBJS-$(CONFIG_CMD_MENU) += cmd_menu.o

编写cmd_menu.c的内容:
定义一个uboot cmd:

U_BOOT_CMD(  

    menu, 3, 0, do_menu,  

    "menu - display a menu, to select the items to do something
",  

    " - display a menu, to select the items to do something"  

);

cmd的名为 menu     执行的动作是do_menu函数

实现do_menu

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

 

这里调用menu_shell函数

void menu_shell(void)  
{  
    char cmd_buf[200];  
    while (1)  
    {  
          main_menu_usage(); //打印菜单  
          c = awaitkey(-1, NULL);  
          printf("%c
", c);  
          switch (c)  
          {  
                case "1": //输入‘1’执行的动作  
                {  
                    .....  
                    break;  
                }  
                case "2": //输入‘2’执行的动作  
                {  
                    break;  
                }  
                case "3": //输入‘3’执行的动作  
                {  
                    break;  
                }  
          }   
    }  
 }

 

menu_shell就是一个while循环,调用main_menu_usage打印菜单,然后awaitkey,再switch输入的键值,
执行相应的case

我的main_menu_usage如下:

void main_menu_usage(void)  
{  
    printf("[1] 烧写bootloader到nandflash
");  
    printf("[2] 烧写Linux Kernel到nandflash
");  
    printf("[3] 烧写yaffs2文件系统到nandflash
");  
    printf("[4] 下载程序在SDRAM中运行
");  
    printf("[5] 设置uboot参数
");  
    printf("[6] 格式化Nandflash
");  
    printf("[7] 启动Linux系统
");  
    printf("[8] 进入Shell模式
");  
    printf("[9] 重启uboot
");  
    if (bBootFrmNORFlash == 1)  
        printf("[0] 下载bootloader到NorFlash
");  
    printf("Enter your selection: ");  
}

 

以烧写uboot到nandflash为例,case 1:中的内容为:

strcpy(cmd_buf, "usbslave 1 0x30000000; nand erase bios; nand write.jffs2 0x30000000 bios 0x100000");  
run_command(cmd_buf, 0);  
break;

 

按照这个依次写每个case

再main.c中调用menu命令:
main_loop函数中在abortboot (bootdelay) 结束后加入:

#ifdef CONFIG_CMD_MENU  
    run_command("menu", 0);  
#endif
文章导航