cmd_menu.c
#include <config.h>
#include <command.h>
static int quit_flag = 0;
char awaitkey(unsigned long delay, int* error_p)
{
int i;
while (1) {
if (tstc()) /* we got a key press */
return getc();
}
}
else {
for (i = 0; i < delay; i++) {
if (tstc()) /* we got a key press */
return getc();
udelay (10*1000);
}
}
if (error_p)
*error_p = -1;
return 0;
}
{
volatile unsigned long *pa = (volatile unsigned long * )0;
unsigned long pb;
*pa = 0x12345678;
if(*pa != 0x12345678) { //不可写
return 1;
}
else{
*pa = pb;
printf("nand \n");
return 0;
}
}
{
printf("\r\n##### u-boot cmd menu ##### \r\n");
if(isbootfromnor())
printf("[o] download u-boot to nor \r\n");
printf("[n] download u-boot to nand \r\n");
printf("[k] download kernel to nand \r\n");
printf("[f] download yaffs-rootfs to nand \r\n");
printf("[r] reset the u-boot \r\n");
printf("[b] boot the system \r\n");
printf("[q] quit from menu \r\n");
}
{
strcpy(cmd_buf, "protect off all;erase 0 7ffff;tftp 30000000 u-boot.bin;cp.b 30000000 0 80000");
run_command(cmd_buf, 0);
}
{
strcpy(cmd_buf, "nand erase.part u-boot;tftp 30000000 u-boot.bin;nand write 30000000 u-boot");
run_command(cmd_buf, 0);
}
{
strcpy(cmd_buf, "nand erase.part kernel;tftp 30000000 uImage;nand write 30000000 kernel");
run_command(cmd_buf, 0);
}
{
char *p = cmd_buf + 14;
strcpy(cmd_buf, "nand erase.part rootfs");
run_command(cmd_buf, 0);
strcpy(cmd_buf, "tftp 30000000 ");
strcpy(p, argv[1]);
run_command(cmd_buf, 0);
strcpy(cmd_buf, "nand write.yaffs 30000000 460000 ");
p = cmd_buf + 33;
strcpy(p, argv[2]);
run_command(cmd_buf, 0);
}
{
run_command("reset", 0);
}
{
run_command("boot", 0);
}
{
quit_flag = 1;
}
{
printf("sure you have prepared file by tftp! \n");
}
{
char cmd;
showmainmenu();
while(1){
cmd = awaitkey(-1, NULL);
switch(cmd){
case 'o':
pre_handle();
do_uboot_load_o();
break;
case 'n':
pre_handle();
do_uboot_load_n();
break;
case 'k':
pre_handle();
do_kernel_load();
break;
case 'f':
pre_handle();
do_rootfs_load(argv);
break;
case 'r':do_reset_cmd();
break;
case 'b':
do_bootm_cmd();
break;
case 'q':
do_quit();
break;
}
if(quit_flag == 1)
break;
cmd = 0;
}
quit_flag = 0;
}
{
menu_shell(argv);
return 0;
}
menu, 3, 1, do_menu,
"sure you have prepared file by tftp, and press corresponding key",
"sure you have prepared file by tftp \n"
"press corresponding key, the u-boot will help you download file to the suited memory location \n"
"note: this menu only support yaffs rootfs, if you want to download jffs rootfs, you must input cmd by hand! \n"
"if you want to download rootfs, you must input 3 paramters like <menu> <rootfs_name> <rootfs_size> \n"
);
cmd_menu.c的更多相关文章
- uboot补丁的分析
接下来分析一下韦老师的uboot补丁: -------------------------------------------------------------------------------- ...
- (转载)U-boot启动完全分析
1.1 U-Boot工作过程 U-Boot启动内核的过程可以分为两个阶段,两个阶段的功能如下: (1)第一阶段的功能 Ø 硬件设备初始化 Ø 加载U-Boot第二阶段代码到RAM空间 Ø 设置好栈 Ø ...
- 改进uboot,添加自定义快捷菜单
.在common目录下新增cmd_menu.c文件,内容为: #include<common.h> #include<command.h> #ifdef CONFIG_MENU ...
- u-boot代码学习内容
前言 u-boot代码庞大,不可能全部细读,只能有选择的读部分代码.在读代码之前,根据韦东山教材,关于代码学习内容和深度做以下预先划定. 一.Makefile.mkconfig.config.mk等 ...
- 在uboot上创建菜单
一.原理 菜单其实就是一个uboot中的命令,和其他的命令没有什么差别. uboot启动时,如果进入uboot命令模式,先运行这个命令,就会打印出一个菜单界面. 在uboot的命令模式,通过键入“m ...
- U-Boot启动过程完全分析
U-Boot启动过程完全分析 1.1 U-Boot工作过程 U-Boot启动内核的过程可以分为两个阶段,两个阶段的功能如下: (1)第一阶段的功能 硬件设备初始化 加载U-Boot第二阶段 ...
- 修改LVDS支持1024*600分辨率
一.在boot中增加LVDS设置分辨率1024*600选项 1.修改文件TQIMX6_android-4.2.2\bootable\bootloader\uboot-imx\common\cmd_me ...
- ok6410 u-boot-2012.04.01移植七完善u-boot移植(u-boot移植结束)
继ok6410 u-boot-2012.04.01移植六后,开发板已支持MLC NAND.DM9000等.但还需要完善比如环境变量.mtdpart分区.裁剪.制作补丁等.下面的工作就是完善移植的u-b ...
- AM3358--Uboot支持LCD输出1024*768
1. uboot/include/lcd/tq3358_fb.h #define TFT240320 1 #define TFT320240 2 #define TFT480272 3//T43(天嵌 ...
随机推荐
- python 日期排序
转自:http://www.cnblogs.com/lkprof/p/3179850.html,感谢分享~ 问题1:如果日期中有千年以前的情况(没法用格式化函数),如('2010-11-23','19 ...
- 如何设置树莓派的VNC开机时启动
转载:http://www.linuxidc.com/Linux/2016-12/138793.htm 下面正式开始配置 首先 sudo nano /etc/init.d/vncserver 然后 复 ...
- maven学习(三)maven仓库
官网图片: maven仓库: 仓库通常配置在settings.xml文件中,此处注意settings.xml的优先级:用户 > 全局,广义上maven的仓库一共包含两种: 1.本地仓库,默认在& ...
- Python新式类 单例模式与作用域(四)
1 新式类与旧式类 新式类拥有经典类的全部特性之外,还有一些新的特性,比如 __init__发生变化,新增了静态方法__new__,python3目前都采用新式类,新式类是广度优先,旧式类是深度优先 ...
- 配置一个高效快速的Git环境
username and email editor difftool and mergetool alias 可以直接修改~/.gitconfig文件,也可以用命令配置一个可以实际使用的高效的Git环 ...
- 团队合作之Scrum
CCSU小助手 一:开发团队简介 队名:瓜队 组员:钟文兴.周畅.吉刘磊.唐仲勋 宣言:We are a team at any time! 团队项目描述: 内容:“生活在长大”: 目标:为了方便对学 ...
- 牛客国庆集训派对Day2 F、平衡二叉树 【构造+记忆化搜索】
任意门:https://www.nowcoder.com/acm/contest/202/F 时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 1048576K,其他语言2097152K6 ...
- Sublime Text 3的安装,卸载,更新,激活
安装: 下载安装包:建议到官方网站下载,网址:http://www.sublimetext.com/3 . 卸载 在Finder中进入“/Users/用户名/Library/Application S ...
- 【洛谷P2577】[ZJOI2005]午餐
午餐 题目链接 DP题都辣么毒瘤的么.. 首先,看一下题解 我们就有了思路: 贪心:显然,让吃饭慢的先打饭,sort一遍(证明?不存在的.. DP:f[i][j][k]表示前i个人,窗口1的打饭时间为 ...
- SqlSugar之DbContext
创建一个DbContext和DbSet进行使用,我们可以在DbSet中进行扩展我们的方法 //可以直接用SimpleClient也可以扩展一个自个的类 //推荐直接用 SimpleClient //为 ...