歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

U-boot啟動菜單實現

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

Copyright © Linux教程網 All Rights Reserved