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

最后更新于:2022-04-01 09:44:48

新建一个名为: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 ~~~
';