应用场景
由于有时候需要不同类型的屏幕显示,但是来回烧写又显得非常的麻烦,遇到上述问题的话,我们可以采取以下方法去解决刚刚的问题。
适用平台
尝试过在STM32MP157,RK356X,RK3588里使用
menu指令代码描述
新建一个指令文件:u-boot/cmd/hybmenu.c
#include <common.h>
#include <command.h>
#include <environment.h>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 : "<UNDEFINED>");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 */
#endifrun_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_MENUKEYif (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: 命令的帮助信息,以字符串形式表示。