linux uboot制作自定义菜单指令menu

应用场景

由于有时候需要不同类型的屏幕显示,但是来回烧写又显得非常的麻烦,遇到上述问题的话,我们可以采取以下方法去解决刚刚的问题。

适用平台

尝试过在STM32MP157,RK356X,RK3588里使用

menu指令代码描述

新建一个指令文件:u-boot/cmd/hybmenu.c

#include 
#include 
#include 

void do_choose_screen(void)
{
	char c;
	c = getc();
	printf("option=%c\n",c);
	switch (c)
	{
		case '0':
			printf("choose [0] LCD  Srceen  \r\n ");
			env_set("hyb_dts_index", "0");
			env_save();
			break;
		case '1':
			printf("choose [1] MIPI Srceen  \r\n ");
			env_set("hyb_dts_index", "1");
			env_save();
			break;
		case '2':
			printf("choose [2] HDMI Srceen  \r\n ");
			env_set("hyb_dts_index", "2");
			env_save();
			break;
		default:
			printf("[0] default....  \r\n ");
			env_set("hyb_dts_index", "2");
			env_save();
			break;
	}
}
//指令对应的操作函数
int do_menu(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
{
	printf("Please select the type of DTB you want\r\n");
	printf("******************************************\r\n ");
	printf("[0] LCD  Srceen \r\n ");
	printf("[1] MIPI Srceen \r\n ");
	printf("[2] HDMI Srceen \r\n ");
	printf("******************************************\r\n ");
	do_choose_screen();
	return 0;
}


U_BOOT_CMD(
	hybmenu,	2,	0,	do_menu,
	"choose menu",
	"choose dtb menu"
);

u-boot/cmd/Makefile文件新增如下语句

obj-y += hybmenu.o

进入到uboot下的cmdLine模式启动

sdk/u-boot/common/autoboot.c

void autoboot_command(const char *s)
{
	debug("### main_loop: bootcmd=\"%s\"\n", s ? s : "");

	if (stored_bootdelay != -1 && s && !abortboot(stored_bootdelay)) {
#if defined(CONFIG_AUTOBOOT_KEYED) && !defined(CONFIG_AUTOBOOT_KEYED_CTRLC)
		int prev = disable_ctrlc(1);	/* disable Control C checking */
#endif

		run_command_list(s, -1, 0);
		
#if defined(CONFIG_AUTOBOOT_KEYED) && !defined(CONFIG_AUTOBOOT_KEYED_CTRLC)
		disable_ctrlc(prev);	/* restore Control C checking */
	
#endif
	}
+   printf("hybmenu autostart...\r\n");
+	run_command("hybmenu",0);
#ifdef CONFIG_MENUKEY
	if (menukey == CONFIG_MENUKEY) {
		s = env_get("menucmd");
		if (s)
			run_command_list(s, -1, 0);
	}
#endif /* CONFIG_MENUKEY */
}

扩展

U_BOOT_CMD()函数

#define U_BOOT_CMD(_name, _maxargs, _rep, _cmd, _usage, _help)		\
	U_BOOT_CMD_COMPLETE(_name, _maxargs, _rep, _cmd, _usage, _help, NULL)
_name: 命令的名称,以字符串形式表示。
maxargs: 命令最大的参数个数,包括命令本身。
_rep: 重复次数,表示命令可以被连续执行的次数。
_cmd: 执行函数。
_usage: 命令的使用说明,以字符串形式表示。
_help: 命令的帮助信息,以字符串形式表示。

你可能感兴趣的:(嵌入式驱动调试,linux,运维)