关于uboot之U盘启动——上课笔记2
2012-07-11 10:18
232 查看
对于在上课笔记1中提到的两个问题:
1、uboot输入指令后从U盘启动内核
2、按着一个按键,打开电源时,不需要输入指令uboot就可以启动内核
一、解决方法如下:
在目录 /ben/u-boot-1.3.4/include/configs中的文件xyd2440.h中添加如下宏定义:
//自己定义从U盘中启动,打开相应的开关
#define CONFIG_CMD_FAT 1
#define CONFIG_CMD_USB 1
#define CONFIG_DOS_PARTITION 1
#define CONFIG_USB_STORAGE 1
#define CONFIG_USB_UHCI 1
#define CONFIG_USB_OHCI 1
#define CONFIG_SUPPORT_VFAT 1
#define CONFIG_DEDICE_DEREGISTER 1
二、解决方法如下:
在目录 /ben/u-boot-1.3.4/common/中的main.c中添加如下代码:
设置按键的gpio口以及判断是否有按键按下,如有按键按下这执行从u盘启动的命令usb start; fatload usb 0 32000000 uImage; bootm 0x32000000 注意自定义的函数mymain()应放在函数main_loop中的延时读秒的函数之后,如果不知道何时读秒完成的话可以在程序中插入打印语句putchar('11\n');进行判断。
/****************************** press any key to boot kernel define by ruanbanmao ************************************/
//查看开发板的原理图获知按键是由哪个gpio口控制的以及这个gpio口的的地址
#define GPGCON (*(volatile unsigned *)0x56000060)
#define GPGDAT (*(volatile unsigned *)0x56000064)
#define GPGUP (*(volatile unsigned *)0x56000068)
char press_anykey(void)
{
char key = 0;
GPGCON = GPGCON&0xfffffffc; // Set GPG0 output
GPGUP = GPGUP&0xfffffffe; // Enable GPGUP
//According different key;
if ((GPGDAT&0x1) == 0)
key = 1;
return key;
}
/**************************************************** 判断是按键是否被按下 *************************************************************/
void mymain(void)
{
char cmd_buf[256];
char c;
char a=1;
//printf ("K1:usb start;fatload usb 0 32000000 uImage; bootm 0x32000000\n");
printf("\n\n******************************************************************************\n");
printf(" **hit key [1] Download Linux kernel from usb,hit any key to continue** \n");
printf("******************************************************************************\n");
while(a)
{
c = press_anykey(); //判断是否有按键被按下
if(c==1)
{
strcpy(cmd_buf,"usb start;fatload usb 0 32000000 uImage; bootm 0x32000000");
run_command (cmd_buf, 0);
}
else
{
a=0;
}
}
}
/****************************************************************************************************************
1、uboot输入指令后从U盘启动内核
2、按着一个按键,打开电源时,不需要输入指令uboot就可以启动内核
一、解决方法如下:
在目录 /ben/u-boot-1.3.4/include/configs中的文件xyd2440.h中添加如下宏定义:
//自己定义从U盘中启动,打开相应的开关
#define CONFIG_CMD_FAT 1
#define CONFIG_CMD_USB 1
#define CONFIG_DOS_PARTITION 1
#define CONFIG_USB_STORAGE 1
#define CONFIG_USB_UHCI 1
#define CONFIG_USB_OHCI 1
#define CONFIG_SUPPORT_VFAT 1
#define CONFIG_DEDICE_DEREGISTER 1
二、解决方法如下:
在目录 /ben/u-boot-1.3.4/common/中的main.c中添加如下代码:
设置按键的gpio口以及判断是否有按键按下,如有按键按下这执行从u盘启动的命令usb start; fatload usb 0 32000000 uImage; bootm 0x32000000 注意自定义的函数mymain()应放在函数main_loop中的延时读秒的函数之后,如果不知道何时读秒完成的话可以在程序中插入打印语句putchar('11\n');进行判断。
/****************************** press any key to boot kernel define by ruanbanmao ************************************/
//查看开发板的原理图获知按键是由哪个gpio口控制的以及这个gpio口的的地址
#define GPGCON (*(volatile unsigned *)0x56000060)
#define GPGDAT (*(volatile unsigned *)0x56000064)
#define GPGUP (*(volatile unsigned *)0x56000068)
char press_anykey(void)
{
char key = 0;
GPGCON = GPGCON&0xfffffffc; // Set GPG0 output
GPGUP = GPGUP&0xfffffffe; // Enable GPGUP
//According different key;
if ((GPGDAT&0x1) == 0)
key = 1;
return key;
}
/**************************************************** 判断是按键是否被按下 *************************************************************/
void mymain(void)
{
char cmd_buf[256];
char c;
char a=1;
//printf ("K1:usb start;fatload usb 0 32000000 uImage; bootm 0x32000000\n");
printf("\n\n******************************************************************************\n");
printf(" **hit key [1] Download Linux kernel from usb,hit any key to continue** \n");
printf("******************************************************************************\n");
while(a)
{
c = press_anykey(); //判断是否有按键被按下
if(c==1)
{
strcpy(cmd_buf,"usb start;fatload usb 0 32000000 uImage; bootm 0x32000000");
run_command (cmd_buf, 0);
}
else
{
a=0;
}
}
}
/****************************************************************************************************************
相关文章推荐
- 关于u-boot——上课笔记1
- 关于IDEA启动Spring Boot项目出现Caused by: java.lang.NoClassDefFoundError: javax/servlet/ServletContext at j
- 关于Lenovo YOGA700 启动boot与bios
- 关于u-boot同时支持nand启动和Nor启动环境变量的保存位置
- Uboot学习笔记②---(bootloader的一些共同特性、uboot启动过程、编译环境、地址规划设计)
- Springboot学习笔记(六)关于jdbc的增删改查
- 关于u-boot同时支持nand启动和Nor启动环境变量的保存位置
- 《自己动手写操作系统》,软盘没有,用U盘引导,大白菜MBR Boot启动512字节反汇编代码!
- 关于SpringBoot启动类报错的问题解决
- u-boot-2012.04.01移植笔记——支持NAND启动
- 关于用grub4dos来做U盘启动debina系统的总结
- 关于uboot 中nand_spl 启动
- (转)关于三星cortex A9 Sate4412 开发板 uboot 启动的一些问题释疑
- 【TINY4412】U-BOOT移植笔记:(9)SD卡启动U-BOOT
- u-boot-2012.04.01移植笔记——支持NAND启动
- U-Boot 启动过程笔记
- 携程 Apollo 配置中心 | 学习笔记(三) 自定义Spring Boot项目通过配置中心启动项目
- Linux中关于 -- Bootloader , Uboot的作用,和整个linux系统的启动过程分析
- [笔记].STM32 BOOT[0:1]启动设置
- 做u盘启动重装系统 进winPE 出现 cdboot:couldn't find ntldr 解决办法