U-boot启动菜单实现

来源:互联网 发布:淘宝单品爆款技巧 编辑:程序博客网 时间:2024/05/23 01:11

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



原创粉丝点击