uboot.2016.03 在mini2440上norfalsh啓動

本人有點懶惰,直接在smdk2410的基礎上進行修改linux

(note :紅色字體表示修改內容,藍色字體表示增長內容)async

1. 頂層的makefile函數

  在247行 添加以下兩條語句 :字體

   ARCH :=arm
     CROSS_COMPILE :=arm-linux-spa

2 修改始終頻率3d

  打開 u-boot-2016.03/arch/arm/cpu/arm920t/start.Sblog

      第77行 #if defined(CONFIG_S3C2410)接口

      #if defined(CONFIG_S3C2440) 
      第78行  ldr     r1, =0x3ff內存

       ldr  r1, =0x7ffci

      第87行    mov     r1, #3      //FCLK :HCLK : PCLK   = 1:2:4

       mov     r1,#5   //FCLK :HCLK : PCLK   = 1:4:8

  打開 u-boot-2016.03/board/samsung/smdk2410/smdk2410.c

  第25行到27行的內容改成 :

  25:#define M_MDIV   92

 

  26:#define M_PDIV    1

 

  27:#define M_SDIV    1

 

  本開發板的輸入晶振頻率爲12MHz,經過上面的修改,則MPLL頻率爲400MHz。

  第37行到39行的內容改成:

  54:#define U_M_MDIV     56 

  55:#define U_M_PDIV      2

  56:#define U_M_SDIV      2

  經過上面的修改,則UPLL頻率爲48MHz。即爲USB的時鐘

      在board_early_init_f()函數中在給寄存器賦值以前增長以下內容

  __asm__(  "mrc p15, 0, r1, c1, c0, 0\n"
                /* read ctrl register */

                "orr r1, r1, #0xc0000000\n"
                /* Asynchronous */

                "mcr p15, 0, r1, c1, c0, 0\n"
                /* write ctrl register */

                :::"r1"
        );

  從S3C2440芯片書冊上有說明:

  If HDIVN is not 0, the CPU bus mode has to be changed from the fast bus mode to the asynchronous
  bus mode using following instructions(S3C2440 does not support synchronous bus mode).
  MMU_SetAsyncBusMode
  mrc p15,0,r0,c1,c0,0
  orr r0,r0,#R1_nF:OR:R1_iA
  mcr p15,0,r0,c1,c0,0  

3.修改內存SDRAM時序

 

    打開  u-boot-2016.03/board/samsung/smdk2410/lowlevel_init.S  

    

  #define B1_BWSCON          (DW16)

  #define B2_BWSCON          (DW16)

  #define B3_BWSCON          (DW16)

  #define B4_BWSCON          (DW32)

  #define B5_BWSCON          (DW16)

  #define B6_BWSCON          (DW32)

  #define B7_BWSCON          (DW32)

 

  /* BANK0CON */  

  #define B0_Tacs                   0x3

  #define B0_Tcos                   0x3

  #define B0_Tacc                   0x7

  #define B0_Tcoh                  0x3

  #define B0_Tah                    0x3

  #define B0_Tacp                  0x1

  #define B0_PMC                  0x0

 

  /* BANK1CON */

  #define B1_Tacs                   0x1

  #define B1_Tcos                   0x1

  #define B1_Tacc                   0x6

  #define B1_Tcoh                  0x1

  #define B1_Tah                    0x1

  #define B1_Tacp                  0x0

  #define B1_PMC                  0x0

  #define B2_Tacs                   0x1

  #define B2_Tcos                   0x1

  #define B2_Tacc                   0x6

  #define B2_Tcoh                  0x1

  #define B2_Tah                    0x1

  #define B2_Tacp                  0x0

  #define B2_PMC                  0x0

 

  #define B3_Tacs                   0x1

  #define B3_Tcos                   0x1

  #define B3_Tacc                   0x6

  #define B3_Tcoh                  0x1

  #define B3_Tah                    0x1

  #define B3_Tacp                  0x0

  #define B3_PMC                  0x0

 

  #define B4_Tacs                   0x1

  #define B4_Tcos                   0x1

  #define B4_Tacc                   0x6

  #define B4_Tcoh                  0x1

  #define B4_Tah                  0x1

  #define B4_Tacp                 0x0

  #define B4_PMC                0x0

 

  #define B5_Tacs                 0x1

  #define B5_Tcos                 0x1

  #define B5_Tacc                 0x6

  #define B5_Tcoh                0x1

  #define B5_Tah                  0x1

  #define B5_Tacp                 0x0

  #define B5_PMC                0x0

 

  #define B6_MT                  0x3

  #define B6_Trcd                 0x1

  #define B6_SCAN                     0x1

 

  #define B7_MT                  0x3

  #define B7_Trcd                 0x1

  #define B7_SCAN                     0x1

 

  /* REFRESH parameter */

  #define REFEN                  0x1

  #define TREFMD               0x0

  #define Trp                 0x1

  #define Trc                 0x1

  #define Tchr                0x2

  #define REFCNT                1268

4. 修改宏定義

  打開 u-boot-2016.03/include/configs/smdk2410.h

  第21行 #define CONFIG_S3C2410         /* specifically a SAMSUNG S3C2410 SoC*/

      #define CONFIG_S3C2440          /* specifically a SAMSUNG S3C2440 SoC */

      s3c2410 和s3c2440有些寄存器不一樣

     在27行 增長以下內容

  #undef  CONFIG_SYS_PROMPT  
  #define CONFIG_SYS_PROMPT      "jetli# "         //這個在串口輸出 [jetli#] 內容

   將定義的CONFIG_SYS_PROMPT釋放,而後再定義本身須要的。

 

  第157行「#define CONFIG_FLASH_CFI_LEGACY」改成:

     #define CONFIG_SYS_CFI_FLASH_CONFIG_REGS    {0xFFFF}

  由於在u-boot-2011.06中,使用的是CFI的NorFlash接口,因此不須要定義CONFIG_FLASH_CFI_LEGACY,而是要定義CONFIG_SYS_CFI_FLASH_CONFIG_REGS。

  第162行「#define CONFIG_SYS_MAX_FLASH_SECT (19)」改成:

 

       #define CONFIG_SYS_MAX_FLASH_SECT   (35)

 

  由於本開發板使用的NorFlash是EN29LV160AB,它有35個扇區。

  第164行「#define CONFIG_ENV_ADDR                 (CONFIG_SYS_FLASH_BASE + 0x70000)」 改成

           #define CONFIG_ENV_ADDR                 (CONFIG_SYS_FLASH_BASE + 0x0100000)  

  uboot-2016 make生成的u-boot.bin >512k>0x70000,環境變量地址爲0x70000時,若是保存環境變量,則會覆蓋了u-boot.bin。saveenv命令後重啓後死機

5.生成u-boot.bin

   make distclean

 make smdk2410_defconfig

 make

  燒寫u-boot.bin 到norflash 運行結果以下圖:

 

相關文章
相關標籤/搜索