關於uboot之U盤啓動——上課筆記2

對於在上課筆記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;
           }
         }
}
/****************************************************************************************************************
發佈了31 篇原創文章 · 獲贊 2 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章