JZ2440開發板移植u-boot 2015.01----第一篇,移植JZ2440

移植u-boot 2015.01到JZ2440上將分爲很多篇幅來寫,由於JZ2440相對比IMX8簡單很多,更適合用來學習uboot

本系列主要思路如下:

1. 移植uboot-2015.01到JZ2440板子上並正常運行起來,解決過程中的bugs

2. 一步一步分析uboot源碼,優化uboot過程

u-boot 2015中並沒有提供JZ2440的定製代碼,我們需要將最接近的smdk2410的板子信息移植過來

>>>>>移植UBOOT到ARM板子上的一般步驟

1. 創建ARM板文件

        在board/samsung/文件下創建jz2440文件夾

        將board/samsung/smdk2410下的所有文件複製到board/samsung/jz2440下

        將board/samsung/jz2440下的smdk2410.c重命名爲jz2440.c

        修改jz2440.c(在整個文件中只有一處2410的設置,如下):

                   將 gd->bd->bi_arch_number = MACH_TYPE_SMDK2410;改爲:

                   gd->bd->bi_arch_number = MACH_TYPE_JZ2440;

修改writel(0x000007FF, &gpio->gphup);爲writel(0x000007F3, &gpio->gphup);設置串口上拉

       在arch/arm/include/asm/mach-types.h增加對MACH_TYPE_JZ2440的定義

                  #define MACH_TYPE_JZ2440               194

       同時增加machine ARCH的定義:

                        #ifdef CONFIG_ARCH_JZ2440

                              # ifdef machine_arch_type

                              #  undef machine_arch_type

                              #  define machine_arch_type    __machine_arch_type

                              # else

                              #  define machine_arch_type    MACH_TYPE_JZ2440

                              # endif

                      # define machine_is_jz2440()    (machine_arch_type == MACH_TYPE_JZ2440)

                      #else

                             # define machine_is_jz2440()    (0)

                     #endif

2. 創建ARM板的Kconfig文件

         修改board/samsung/jz2440下Kconfig文件如下:

         if TARGET_JZ2440

         config SYS_BOARD                       //在編譯時用來識別ARM板子所在board/廠商文件夾下板子文件夾的名字

               default "jz2440"

         config SYS_VENDOR                   //在編譯時用來識別ARM板子所在board下的廠商文件夾

               default "samsung"

         config SYS_SOC

               default "s3c24x0"

         config SYS_CONFIG_NAME        //用來識別ARM板子的頭文件名字include/configs/SYS_CONFIG_NAME.h

              default "jz2440"

         endif

3. 創建ARM板子的Makefile

          修改board/samsung/jz2440下Makefile文件如下:

          將obj-y    := smdk2410.o修改爲obj-y    := jz2440.o

4. 創建ARM板子的defconfig文件

          複製configs/smdk2410_defconfig到configs/jz2440_defconfig

          修改configs/jz2440_defconfig中的 CONFIG_TARGET_SMDK2410=y爲CONFIG_TARGET_JZ2440=y       

5. 創建ARM板子的頭文件

         複製include/configs/smdk2410.h到include/configs/jz2440.h

         修改include/configs/jz2440.h:

                將文件中所有的S3C2410和SMDK2410全部替換爲JZ2440

6. 將ARM板子的Kconfig文件加入到ARM架構的Kconfig中

         在arch/arm/Kconfig中增加:source "board/samsung/jz2440/Kconfig"

7. 創建ARM板子的config到系統的Kconfig中

         在arch/arm/Kconfig中增加:

                    config TARGET_JZ2440

                           bool "Support jz2440"

                           select CPU_ARM920T

>>>>>修復移植過程中的問題:

1. 修改start.S文件

刪除老的時鐘配置:

/* FCLK:HCLK:PCLK = 1:2:4 */

    /* default FCLK is 120 MHz ! */

    ldr r0, =CLKDIVN

    mov r1, #3

    str r1, [r0]

增加新的時鐘配置:

/* FCLK:HCLK:PCLK = 1:4:8 */

    /* default FCLK is 400 MHz ! */

    ldr r0, =CLKDIVN

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

    str r1, [r0]

 

    /* 如果HDIVN非0,CPU的總線模式應該從“fast bus mode”變爲“asynchronous bus mode” */

    mrc p15, 0, r1, c1, c0, 0       /* 讀出控制寄存器 */

    orr r1, r1, #0xc0000000         /* 設置爲“asynchronous bus mode” */

    mcr p15, 0, r1, c1, c0, 0       /* 寫入控制寄存器 */

2. 修改board/samsung/jz2440/jz2440.c

#elif FCLK_SPEED==1     /* Fout = 202.8MHz */

#define M_MDIV  0x5C

#define M_PDIV  0x1

#define M_SDIV  0x1

#endif

將M_MDIV的值從0xA1改爲0x5C,M_PDIV從0x3改爲0x1

將writel(0x000007FF, &gpio->gphup);改爲writel(0x000007F3, &gpio->gphup);

3. 複製drivers/mtd/nand/s3c2410_nand.c到drivers/mtd/nand/jz2440_nand.c:

     將jz2440_nand.c中的所有S3C2410替換爲JZ2440

     在drivers/mtd/nand/Makefile中增加obj-$(CONFIG_NAND_JZ2440) += jz2440_nand.o

4. 修改drivers/serial/serial_s3c24x0.c:

     刪除uart fifo的配置:writel(0x07, &uart->ufcon); writel(0x0, &uart->umcon);

     修改writel(0x245, &uart->ucon);爲writel(0x5, &uart->ucon);

>>>>>編譯燒寫uboot:

1. 配置交叉編譯地址  export CROSS_COMPILE=xxx/arm-linux-

2. 配置ARM架構         export ARCH=arm

3. make jz2440_defconfig

4. make

5. oflash u-boot.bin

注意此時u-boot.bin只支持NOR啓動,燒寫到Nor Flash中即可啓動板子

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章