您的位置:首页 > 其它

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

2016-02-03 17:22 302 查看
这个菜单其实就是一个uboot中的命令,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\n",

    " - 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\n", 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\r\n");

    printf("[2] 烧写Linux Kernel到nandflash\r\n");

    printf("[3] 烧写yaffs2文件系统到nandflash\r\n");

    printf("[4] 下载程序在SDRAM中运行\r\n");

    printf("[5] 设置uboot参数\r\n");

    printf("[6] 格式化Nandflash\r\n");

    printf("[7] 启动Linux系统\r\n");

    printf("[8] 进入Shell模式\r\n");

    printf("[9] 重启uboot\r\n");

    if (bBootFrmNORFlash == 1)

        printf("[0] 下载bootloader到NorFlash\r\n");

    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

 

编译uboot下载到FLASH中就能看到菜单了
http://blog.chinaunix.net/uid-22030783-id-366971.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: