uboot中添加自启动的快捷菜单

u-boot下common内的每个cmd_*.c代表一个命令,可以把一些常用的命令做成快捷菜单:

1、在common文件夹中新建cmd_menu.c


2、在cmd_menu.c中加入下列代码

#include <common.h>
#include <command.h>
void main_menu_usage(void) 
{ 

//以下全部通过tftp下载

printf("[1] 下载bootloader到Nand Flash\r\n");

printf("[2] 下载内核镜像到Nand Flash\r\n");

printf("[3] 下载文件系统镜像到Nand Flash\r\n");

printf("[4] 下载内核镜像到内存并运行\r\n");

printf("[5] 重启设备\r\n");

printf("[q] 退出菜单\r\n");

// if (bBootFrmNORFlash == 1) 

// printf("[0] 下载bootloader到Nor Flash\r\n"); 

printf("Enter your selection: "); 

}

void menu_shell(void)
{

char ch;

char cmd_buf[200];

while(1)

{

main_menu_usage();//打印菜单

ch = getc();

printf("%c\n",ch);

switch(ch)

{

case '1':

{

//nand擦除和写入的大小由分区表决定

strcpy(cmd_buf, "tftp 0x32000000 u-boot.bin; nand erase 0x0 0x60000; nand write 0x32000000 0x0 0x60000");

run_command(cmd_buf, 0);

break;

}

case '2':

{

strcpy(cmd_buf, "tftp 0x32000000 uImage; nand erase 0x80000 0x200000; nand write 0x32000000 0x80000 0x200000");

run_command(cmd_buf, 0);

break;

}

case '3':

{

strcpy(cmd_buf, "tftp 0x32000000 fs.yaffs; nand erase 0x280000; nand write.yaffs2 0x32000000 0x280000 $(filesize)");

run_command(cmd_buf, 0);

break;

}

case '4':

{

strcpy(cmd_buf, "tftp 0x32000000 uImage; bootm 0x32000000");

run_command(cmd_buf, 0);

break;

}

case '5':

{

strcpy(cmd_buf, "reset");

run_command(cmd_buf, 0);

break;

}

case 'q':

{

return;   

break;

}

default:

break; 

}

}

}

int do_menu(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
{

menu_shell();

return 0; 

}

U_BOOT_CMD(

menu, 3, 0, do_menu,

"display a menu\n",

"select one item to do something\n"

);
/*****************************
U_BOOT_CMD(name,maxargs,rep,cmd,usage,help)
各个参数的意义如下:
name:命令名,非字符串,但在U_BOOT_CMD中用“#”符号转化为字符串
maxargs:命令的最大参数个数
rep:是否自动重复(按Enter键是否会重复执行)
cmd:该命令对应的响应函数
usage:简短的使用说明(字符串)
help:较详细的使用说明(字符串)
******************************/

3、修改common目录下的Makefile文件,让加入的cmd_menu.c文件参与编译,添加

COBJS-y += cmd_menu.o


4、在配置文件中(include/configs下与平台对应的头文件)加入宏

#define CONFIG_CMD_MENU 1


5、在main.c中调用menu命令,在main_loop函数中的abortboot(bootdelay)结束后添加

//设置启动uboot时自动执行menu命令
#ifdef CONFIG_CMD_MENU
    run_command("menu", 0);
#endif

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值