移植最新Uboot到JZ2440開發板


    下載最新版U-boot,建立Source Insight工程,在建立工程的時候注意,去掉一些很明顯不屬於硬件的分支代碼。

     例如,arch目錄下面的除開arm子目錄之外的其他目錄,都可以不添加。

                  arm目錄下,cpu子目錄只需要添加和板子對於的體系結構代碼即可。

                  例如,板子S3C2410是arm920t的,因此,只需要添加arm920t目錄下面的:

                  image 添加所有紅框框中的代碼就處理完cpu目錄的代碼添加。

                   arm目錄下的inclue目錄里面有asm目錄,里面定義了多種體系結構的頭文件,我們只需要添加自身對於板級的頭文件:

                   在此目錄下,我們只需要添加 arch-s3c24x0里面的全部文件和外部零散的其他通用頭文件。

                 

             board目錄下面的,除開samsung子目錄之外,其他的目錄都不需要添加

             根目錄下面的 tools、test、scripts、post、net這些子目錄,都不需要添加。

     Uboot的源碼在git倉庫中維護,git地址為 git://www.denx.de/git/u-boot.git , U-Boot項目主頁點此

 

初始編譯

     make smdk2410_deconfig, 出現如下錯誤:

    image

     解決方法,編譯時,指定交叉編譯工具前綴 make CROSS_COMPILE=arm-linux-

     解決后再次出現如下錯誤,

    image  

    解決方法:可以在include/configs/smdk2410.h 里面添加一個宏定義 #define CONFIG_ENV_SIZE 0x2000

   image

   解決方法:使用更新的交叉編譯工具鏈  arm-linux-gcc-4.3.2.tar.bz2

用未經過任何修改的Uboot代碼編譯后,是不能運行在板子上面的。需要針對自身硬件進行修改,具體步驟如下:

1. 將board/samung/ 目錄下面的 smdk2410目錄全部拷貝一份,取名為smdk2440

    將include/configs目錄下的smdk2410.h 復制一份,取名為smdk2440.h

2. 新版本的Uboot已經去掉了 boards.cfg文件,改為make menuconfig來配置,所有的config文件都在configs目錄下。

    3. 修改Uboot代碼中的問題:

       在start.S中,

image

     而設置PLL的時鍾的函數在_main中的board_init_f中初始化函數列表中的  boad_early_init_f 中,設置MPLL倍頻值。它應該要在設置分頻系數和初始化內存控制器之間來設置。

     可以做如下修改:

     image

    注釋掉這里的MPLL設置,修改start.S中的 設置分頻系數參數。

   1:  // arch/arm/cpu/arm920t/Start.S
   2:  #if 0
   3:      /* FCLK:HCLK:PCLK = 1:2:4 */
   4:      /* default FCLK is 120 MHz ! */
   5:      ldr    r0, =CLKDIVN
   6:      mov    r1, #3
   7:      str    r1, [r0]
   8:      #else
   9:      /* 2. 設置時鍾 */
  10:      ldr r0, =0x4c000014
  11:      //  mov r1, #0x03;            // FCLK:HCLK:PCLK=1:2:4, HDIVN=1,PDIVN=1
  12:      mov r1, #0x05;            // FCLK:HCLK:PCLK=1:4:8
  13:      str r1, [r0]
  14:   
  15:      /* 如果HDIVN非0,CPU的總線模式應該從“fast bus mode”變為“asynchronous bus mode” */
  16:      mrc p15, 0, r1, c1, c0, 0       /* 讀出控制寄存器 */
  17:      orr r1, r1, #0xc0000000         /* 設置為“asynchronous bus mode” */
  18:      mcr p15, 0, r1, c1, c0, 0       /* 寫入控制寄存器 */
  19:   
  20:      #define S3C2440_MPLL_400MHZ     ((0x5c<<12)|(0x01<<4)|(0x01))
  21:      /* MPLLCON = S3C2440_MPLL_200MHZ */
  22:      ldr r0, =0x4c000004
  23:      ldr r1, =S3C2440_MPLL_400MHZ
  24:      str r1, [r0]
  25:   
  26:      /* 啟動ICACHE */
  27:      mrc p15, 0, r0, c1, c0, 0   @ read control reg
  28:      orr r0, r0, #(1<<12)
  29:      mcr p15, 0, r0, c1, c0, 0   @ write it back
  30:      #endif

   內存控制器的設置值改為如下:

   1:  //board/samsung/smdk2410/lowlevel_init.S 
   2:  SMRDATA:
   3:  #if 0
   4:      .word (0+(B1_BWSCON<<4)+(B2_BWSCON<<8)+(B3_BWSCON<<12)+(B4_BWSCON<<16)+(B5_BWSCON<<20)+(B6_BWSCON<<24)+(B7_BWSCON<<28))
   5:      .word ((B0_Tacs<<13)+(B0_Tcos<<11)+(B0_Tacc<<8)+(B0_Tcoh<<6)+(B0_Tah<<4)+(B0_Tacp<<2)+(B0_PMC))
   6:      .word ((B1_Tacs<<13)+(B1_Tcos<<11)+(B1_Tacc<<8)+(B1_Tcoh<<6)+(B1_Tah<<4)+(B1_Tacp<<2)+(B1_PMC))
   7:      .word ((B2_Tacs<<13)+(B2_Tcos<<11)+(B2_Tacc<<8)+(B2_Tcoh<<6)+(B2_Tah<<4)+(B2_Tacp<<2)+(B2_PMC))
   8:      .word ((B3_Tacs<<13)+(B3_Tcos<<11)+(B3_Tacc<<8)+(B3_Tcoh<<6)+(B3_Tah<<4)+(B3_Tacp<<2)+(B3_PMC))
   9:      .word ((B4_Tacs<<13)+(B4_Tcos<<11)+(B4_Tacc<<8)+(B4_Tcoh<<6)+(B4_Tah<<4)+(B4_Tacp<<2)+(B4_PMC))
  10:      .word ((B5_Tacs<<13)+(B5_Tcos<<11)+(B5_Tacc<<8)+(B5_Tcoh<<6)+(B5_Tah<<4)+(B5_Tacp<<2)+(B5_PMC))
  11:      .word ((B6_MT<<15)+(B6_Trcd<<2)+(B6_SCAN))
  12:      .word ((B7_MT<<15)+(B7_Trcd<<2)+(B7_SCAN))
  13:      .word ((REFEN<<23)+(TREFMD<<22)+(Trp<<20)+(Trc<<18)+(Tchr<<16)+REFCNT)
  14:      .word 0x32
  15:      .word 0x30
  16:      .word 0x30
  17:  #else
  18:  SMRDATA:
  19:      .long 0x22011110     //BWSCON
  20:      .long 0x00000700     //BANKCON0
  21:      .long 0x00000700     //BANKCON1
  22:      .long 0x00000700     //BANKCON2
  23:      .long 0x00000700     //BANKCON3
  24:      .long 0x00000700     //BANKCON4
  25:      .long 0x00000700     //BANKCON5
  26:      .long 0x00018005     //BANKCON6
  27:      .long 0x00018005     //BANKCON7
  28:      .long 0x008C04F4     //REFRESH
  29:      .long 0x000000B1     //BANKSIZE
  30:      .long 0x00000030     //MRSRB6
  31:      .long 0x00000030     //MRSRB7
  32:  #endif

    如果串口打印出亂碼,一般來說是波特率設置不正常。

    未完待續-…………………………

Technorati 標簽: Uboot 移植


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM