/************************************************************************************
* I.MX6 天嵌 E9 U-boot menu hacking
* 说明:
* 天嵌在U-boot中添加了自己的选择menu,想看一下怎么实现的。
*
* 2016-8-5 深圳 南山平山村 曽剑锋
***********************************************************************************/ void start_armboot (void)
{
......
/* main_loop() can return to retry autoboot, if so just run it again. */
e9_board_lcd_poweron();
for (;;) {
main_loop (); ---------------------------------------------+
} |
|
/* NOTREACHED - no way out of command loop except booting */ |
} |
|
void main_loop (void) <------------------------------------------+
{ ......
/*
* Main Loop for Monitor Command Processing
*/
#ifdef CONFIG_CMD_MENU
run_command("menu", ); ----------+
#endif |
...... |
} |
|
U_BOOT_CMD( |
menu, , , do_menu, <---------+-----------------+
"display a menu, to select the items to do something", |
"\n" |
"\tdisplay a menu, to select the items to do something" |
); |
|
int do_menu (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) <-----+
{ ---------+
menu_shell(); |
return ; |
} |
|
void menu_shell(void) <--------+
{
char keyselect;
char cmd_buf[];
char *ptmp;
do
{
printf("\r\n##### Boot for IMX6 Main Menu #####\r\n");
printf("[1]boot from emmc\n");
printf("[2]boot from sdcard\n");
printf("[3]boot from tftp\n");
printf("[5]download from sdcard\n");
printf("[0]setting boot args\n");
printf("[q]exit to command mode\n");
printf("Enter your selection: ");
keyselect = getc();
printf("%c\n", keyselect);
switch (keyselect)
{
#if 0
case '':
if(refresh_bootargs("emmc")==)
run_command("booti mmc3",);
break;
case '':
if(refresh_bootargs("sdcard")==)
run_command("booti mmc1",);
break;
case '':
if(refresh_bootargs("tftp_nfs")==)
{
ptmp = getenv("kernelimgname");
sprintf(cmd_buf,"tftp 0x10800000 %s;bootm 0x10800000",ptmp);
run_command(cmd_buf,);
}
break;
case '':
do_boot_para_setting(NULL);
break;
case '':
sprintf(cmd_buf,"booti mmc1 recovery",ptmp);
run_command(cmd_buf,);
break;
#endif
case '':
ptmp = getenv("bootcmd");
if(strcmp(ptmp,"run bootcmd_mmc_ubuntu") == )
run_command("run bootcmd_mmc_ubuntu", );
else if (strcmp(ptmp,"run bootcmd_mmc_android") == )
run_command("run bootcmd_mmc_android", );
else
run_command("run bootcmd_mmc_linux", );
break;
case '': break;
case '':
run_command("run bootcmd_net", );
break;
case '':
do_boot_para_setting(NULL); -------------+
break; |
case '': |
sprintf(cmd_buf,"run bootargs_base_andorid; |
booti mmc1 recovery",ptmp); |
run_command(cmd_buf,); |
break; |
|
} |
|
} |
while ((keyselect != 'q') && (keyselect != 'Q')); |
} |
|
static int do_boot_para_setting(char *pbuf) <------------+
{
int i;
char c; do
{
printf("\r\n##### param setting #####\r\n");
printf("[1]setting nfs args\n");
printf("[2]setting tftp args\n");
printf("[3]setting display args\n");
printf("[4]setting default boot\n");
printf("[s]save setting\n");
printf("[q]quit\n");
printf("Enter your selection: ");
c = getc();
printf("%c\n", c);
switch (c)
{
case '':
do_nfs_para_setting(NULL);
break;
case '':
do_tftp_para_setting(NULL);
break;
case '':
do_disp_para_setting(NULL); -------------+
break; |
case '': |
do_media_para_setting(NULL); |
break; |
case 's': |
run_command("saveenv", ); |
break; |
} |
} |
while (c != 'q'); |
} |
|
static int do_disp_para_setting(char *pbuf) <------------+
{
lcd_menu_shell(); -----------+
return ; |
} |
|
void lcd_menu_shell() <----------+
{
char c;
char cmd_buf[];
char cmd_buf_all[];
int need_renew = ;
while ()
{
lcd_menu_usage();
c = getc();
printf("%c\n", c);
if ((c == ''))
{
sprintf(cmd_buf, " video=mxcfb0:");
if (lcd_setting(&cmd_buf[strlen(cmd_buf)]) != )
{
strcat(cmd_buf, " video=mxcfb1:off video=mxcfb2:off fbmem=48M");
sprintf(cmd_buf_all, "setenv displayArgs %s", cmd_buf);
run_command(cmd_buf_all, );
}
}
else if (c == '')
{
for (;;)
{
printf("\r\n##### display select for android #####\r\n");
printf("[1] 800*600 for LVDS->VGA \r\n");
printf("[2] 1024*768 for FPC->VGA \r\n"); // video=mxcfb0:dev=lcd,if=RGB24,TQ-VGA_1024768,bpp=32 video=mxcfb1:dev=hdmi,1280x720M@60,if=RGB24,bpp=32 video=mxcfb2:off fbmem=28M,48M
printf("[3] 1280*768 for FPC->VGA\r\n"); //video=mxcfb1:dev=lcd,if=RGB24,TQ-VGA_1280768,bpp=32 video=mxcfb0:dev=hdmi,1280x720M@60,if=RGB2em4,bpp=32 video=mxcfb2:off fbmem=28M,48M
printf("[4] 1360*768 for FPC->VGA\r\n"); //video=mxcfb1:dev=lcd,if=RGB24,TQ-VGA_1360768,bpp=32 video=mxcfb0:dev=hdmi,1280x720M@60,if=RGB2em4,bpp=32 video=mxcfb2:off fbmem=28M,48M
printf("[5] 1920*1080 for FPC->VGA\r\n"); //video=mxcfb1:dev=lcd,if=RGB24,TQ
printf("[6] 1366*768 for LVDS->VGA \r\n");
printf("[7] 1920*1080 for LVDS (need 2 lvds ports) \r\n");
printf("[q] quit \r\n");
printf("Enter your selection: ");
c = getc();
printf("%c\n", c);
if (c == '')
{
sprintf(cmd_buf_all, "dev=ldb,TQ-ldb_800600,if=RGB666,bpp=32 ldb=dul0");
sprintf(cmd_buf_all, "setenv displayArgs %s", cmd_buf);
run_command(cmd_buf_all, );
break;
}
else if (c == '')
{
sprintf(cmd_buf_all, "setenv displayArgs video=mxcfb0:dev=lcd,if=RGB24,TQ-VGA_1024768,bpp=32 video=mxcfb1:dev=hdmi,1280x720M@60,if=RGB24,bpp=32 video=mxcfb2:off fbmem=28M,48M");
run_command(cmd_buf_all, );
break;
}
else if (c == '')
{
sprintf(cmd_buf_all, "setenv displayArgs video=mxcfb1:dev=lcd,if=RGB24,TQ-VGA_1280768,bpp=32 video=mxcfb0:dev=hdmi,1280x720M@60,if=RGB24,bpp=32 video=mxcfb2:off fbmem=28M,48M");
run_command(cmd_buf_all, );
break;
}
else if (c == '')
{
sprintf(cmd_buf_all, "setenv displayArgs video=mxcfb1:dev=lcd,if=RGB24,TQ-VGA_1360768,bpp=32 video=mxcfb0:dev=hdmi,1280x720M@60,if=RGB24,bpp=32 video=mxcfb2:off fbmem=28M,48M");
run_command(cmd_buf_all, );
break;
}
else if (c == '')
{
sprintf(cmd_buf_all, "setenv displayArgs video=mxcfb1:dev=lcd,if=RGB24,TQ-VGA_19201080,bpp=32 video=mxcfb0:dev=hdmi,1280x720M@60,if=RGB24,bpp=32 video=mxcfb2:off fbmem=28M,48M");
run_command(cmd_buf_all, );
break;
}
else if (c == '')
{
sprintf(cmd_buf_all, "setenv displayArgs video=mxcfb0:dev=ldb,LDB-XGA,if=RGB666,bpp=32 ldb=dul0 video=mxcfb1:dev=hdmi,1280x720M@60,if=RGB24,bpp=32 video=mxcfb2:off fbmem=28M,48M");
run_command(cmd_buf_all, );
break;
}
else if (c == '')
{
sprintf(cmd_buf_all, "setenv displayArgs video=mxcfb0:dev=ldb,LDB-1080P60,if=RGB24,bpp=32 ldb=spl0 video=mxcfb1:dev=hdmi,1280x720M@60,if=RGB24,bpp=32 video=mxcfb2:off fbmem=28M,48M");
run_command(cmd_buf_all, );
break;
}
else if (c == 'q')
{
break;
}
printf("ill param\n");
}
}
else if(c == '')
{//video=mxcfb0:dev=ldb,TQ-ldb_1024768,if=RGB666 ldb=sep1
sprintf(cmd_buf_all, "setenv displayArgs video=mxcfb0:dev=ldb,TQ-ldb_1024768,if=RGB666 ldb=sep1");
run_command(cmd_buf_all, );
}
else if(c == 's')
{
run_command("saveenv", );
}
else if (c == 'q')
{
break;
}
}
}

I.MX6 天嵌 E9 U-boot menu hacking的更多相关文章

  1. 天嵌E9平台下进行USB Wifi模块RT3070驱动的移植

    因为项目工作须要,要在天嵌E9平台下实现wifi的点对点,点对多点的传输. Wifi 模块芯片:雷凌3070芯片 嵌入式平台:E9(ARM) 交叉编译环境:arm-none-linux-gnueabi ...

  2. Ubuntu 通过 Live CD 更新grub恢复引导Boot Menu

    工作需要更换主板,但是不想重装电脑. 怎么办呢? 其实并不需要重装电脑,只需要回复boot menu即可. 1. 首先用u盘制作一个ubuntu的live CD(请自行百度),然后通过u盘启动, 选择 ...

  3. win7启动老是自动进入Boot Menu无法进入系统

    如图 进入bios设置 点击startup 选择UEFI/Legacy Boot 那里的Legacy Only选项,选择另一个就会出现这种问题 正常进入系统

  4. 开机进入boot menu和application menu,无法开机

        1.开机点击F1进入到bios界面 2.进入Security—Secure Boot—Disabled 如果不修改Secure boot选项为Disabled,在光驱引导时可能会出现报错 3. ...

  5. I.MX6 Manufacturing Tool V2 (MFGTool2) ucl2.xml hacking

    <!-- * Copyright (C) 2010-2013, Freescale Semiconductor, Inc. All Rights Reserved. * The CFG elem ...

  6. bios中只有windows boot manager下用U盘启动

    在重装系统的时候,很多时候都是先进入bios设置成U盘启动项,然后进行安装,如果年代久远一点的,就设置成光驱启动,再进行:随着时间的推行,光驱已经开始淘汰了,也怀念以前的光驱装机的时光!-:) 开始进 ...

  7. [转载] 关于Windows Boot Manager、Bootmgfw.efi、Bootx64.efi、bcdboot.exe 的详解

    原帖: http://bbs.wuyou.net/forum.php?mod=viewthread&tid=303679 前言:1.本教程针对于UEFI启动来叙述的,根据普遍的支持UEFI的机 ...

  8. Spring Boot 2.0 的快速入门(图文教程)

    摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠BYSocket 」欢迎关注和转载,保留摘要,谢谢! Spring Boot 2.0 的快速入门(图文教程) 大家都 ...

  9. ubuntu windows10 in GPT HDD GRUB Boot

    some thing wrong with my input, I can just use English  -_-!!! The HDD have two kinds of formart, GP ...

随机推荐

  1. sql通配符+sql中查询条件包含下划线等通配符的写法

    一.SQL 通配符 在搜索数据库中的数据时,SQL 通配符可以替代一个或多个字符. SQL 通配符必须与 LIKE 运算符一起使用. 在 SQL 中,可使用以下通配符: 通配符 描述 % 替代一个或多 ...

  2. NYOJ27水池数目,类似于FZU1008最大黑区域,简单搜索题~~~

    水池数目 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描述 南阳理工学院校园里有一些小河和一些湖泊,现在,我们把它们通一看成水池,假设有一张我们学校的某处的地图,这个地图上 ...

  3. 七牛云 X 英语流利说:教育 3.0 时代的智能突破

    美国当地时间 2018 年 9 月 27 日,国内领先的人工智能驱动的教育科技公司「英语流利说」正式挂牌纽交所,以其独创的教育 3.0 模式,成为中国「AI+ 教育」第一股. 教育 3.0 时代的智能 ...

  4. 2016 Multi-University Training Contest 5 solutions BY ZSTU

    ATM Mechine E(i,j):存款的范围是[0,i],还可以被警告j次的期望值. E(i,j) = \(max_{k=1}^{i}{\frac{i-k+1}{i+1} * E(i-k,j)+\ ...

  5. 深入理解ajax系列第五篇

    前面的话 一般地,使用readystatechange事件探测HTTP请求的完成.XHR2规范草案定义了进度事件Progress Events规范,XMLHttpRequest对象在请求的不同阶段触发 ...

  6. typeof、constructor和instanceof

    在JavaScript中,我们经常使用typeof来判断一个变量的类型,使用格式为:typeof(data)或typeof data.typeof返回的数据类型有六种:number.string.bo ...

  7. iOS - 设置系统类似的方法弃用警告的方式

    在开发过程中,调用系统方法时,经常可以看xCode 提示 该方法已弃用,如下图: 觉得特别炫,查一下资料,如果自己也想实现如下的效果,只需要采用系统的如下几个关键字加在方法名后面就可以了: NS_DE ...

  8. Java面试题总结之OOA/D,UML,和XML

    全文字数:   2732 阅读时间:   大约9 分钟 1.UML 是什么?常用的几种UML图? 统一建模语言(Unified Modeling Language,UML)又称标准建模语言:常用图包括 ...

  9. QT程序--CS1.6文件整理及安装器

    这是一个在高二的时候写的一个QT程序,当时对于QT也不算是特别熟悉吧,算是我第一个QT程序,当时由于CS1.6的文件安装的繁琐,又有一些服务器的管理的麻烦操作,对CS的服务器管理一直都很麻烦,当时高二 ...

  10. 多平台密码绕过及提权工具Kon-Boot的使用与防范

    在单用户的机器上密码可能没那么重要,但是一旦有多个用户可以使用这台机器,密码就显得十分必要了(比如有儿童账户的电脑).所以说为你的电脑增设一条防线的最常用,最简单的方法就是用密码将你的电脑保护起来,但 ...