1、實現原理
向U-boot中添加命令bootmenu(實現菜單),並設置U-boot自啟動參數為該命令,改變U-boot啟動延時為1,則U-boot啟動後就運行該命令。
2、實現過程
(1)、在common目錄下新增bootmenu.c文件,代碼如下:
#include <common.h>
#include <command.h>
static char waitconsoleinput(unsigned long delay)
{
int i;
if (-1 == delay) {
while (1) {
if(tstc()){
return getc();
}
}
}
else {
for (i = 0; i < delay; i++) {
if(tstc()){
return getc();
}
udelay(10*1000);/*時間快的話自己調整下*/
}
}
return 0;
}
void menu_usage(void)
{
printf("\r\n=========Menu for XXX=========\r\n");
printf("\r\n");
printf("[1] download Linux(zImage) and boot kernel \r\n");
printf("[2] Reset\r\n");
printf("[q] Exit\r\n");
printf("\r\n");
printf("Please Input: ");
}
void menu_shell(void)
{
char c;
char cmdbuf[128];
while (1)
{
menu_usage();
c = waitconsoleinput(-1);
switch (c)
{
case '1':
strcpy(cmdbuf, "tftp 0x20008000 zImage; go 0x20008000");
run_command(cmdbuf, 0);
break;
case 'r':
strcpy(cmdbuf, "reset");
run_command(cmdbuf, 0);
break;
case 'q':
return;
};
};
}
int do_menu (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
{
menu_shell();
return 0;
}
U_BOOT_CMD(
bootmenu, 1, 0, do_menu,
"Boot Menu",
"U-boot Boot Menu\n"
);
(2)、修改common目錄下的Makefile文件
添加如下:
COBJS-y += bootmenu.o
(3)、修改環境變量
A、修改源碼板子頭文件
include\configs\xxx.h(板子頭文件),添加如下內容:
#define CONFIG_BOOTDELAY 1
#define CONFIG_BOOTCOMMAND "bootmenu"
B、啟動U-boot後進到控制台來手工修改
$ setenv bootcmd bootmenu
$ setenv bootdelay 1
$ saveenv
相關閱讀:U-Boot源代碼下載地址 http://www.linuxidc.com/Linux/2011-07/38897.htm