Chinaunix首页 | 论坛 | 博客
  • 博客访问: 157695
  • 博文数量: 42
  • 博客积分: 996
  • 博客等级: 准尉
  • 技术积分: 705
  • 用 户 组: 普通用户
  • 注册时间: 2012-01-09 19:41
文章分类
文章存档

2012年(42)

我的朋友

分类: LINUX

2012-04-26 09:32:18

对于在上课笔记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;
           }
         }
}
/****************************************************************************************************************
阅读(3245) | 评论(3) | 转发(1) |
给主人留下些什么吧!~~

happy24682012-06-29 11:49:11

请问compiler后出现下列错误,没有定义这些 function,要怎么修改?我 cpu 是 davinci,谢谢您
/root/u-boot-1.3.4_25MHz_test/common/usb.c:134: undefined reference to `usb_lowlevel_stop'
common/libcommon.a(usb.o)(.text+0x80): In function `usb_submit_int_msg':
/root/u-boot-1.3.4_25MHz_test/common/usb.c:158: undefined reference to `submit_int_msg'
common/libcommon.a(usb.o)(.text+0x114): In function `usb_control_msg':
/root/u-boot-1.3.4_25MHz_test/common/usb.c:188: undefined reference to `submit_con

BenRuan2012-04-27 09:22:58

我是月老: 用U…BOOT把U盘做成启动盘时老是让我先备份优盘数据,不能继续啊。。。郁闷.....
查看一下include/configs中的uboot裁剪表,从U盘启动只需打开相应的宏开关即可

我是月老2012-04-26 18:41:57

用U…BOOT把U盘做成启动盘时老是让我先备份优盘数据,不能继续啊。。。郁闷