新建一個名為: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
~~~
- 前言
- FL2440的u-boot-2010.09移植(一)
- FL2440的u-boot-2010.09移植(二)
- FL2440的U-boot-2009.08移植(三)支持Nor FLASH
- FL2440的U-boot-2009.08移植(四) 支持DM900網卡
- FL2440的U-boot-2009.08移植(五)uboot架構中NAND Flash驅動修改
- FL2440如何利用JLINK燒寫U-boot到NAND Flash中
- uboot中的快捷菜單的制作說明
- env_relocate 函數深入分析
- U-boot mkimage指定Linux內核地址時的兩種方式
- 實現u-boot對yaffs/yaffs2文件系統下載的支持