歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> 移植u-boot-2011.09-rc1到FL2440

移植u-boot-2011.09-rc1到FL2440

日期:2017/3/1 11:11:45   编辑:Linux編程

最近工作穩定下來,開始折騰我那可憐的開發板,首先我想為它移植一個uboot,順便記錄下,以便以後查閱。

下載最新的uboot,u-boot-2011.09-rc1.tar.gz,解壓後,CD到其目錄下。

U-Boot源代碼下載地址 http://www.linuxidc.com/Linux/2011-07/38897.htm

移植環境:

主機:Ubuntu 10.4 vbox虛擬機

編譯器:arm-linux-gcc 4.3.2

參考平台:SMDK2410

1.創建板子文件夾和配置文件:

cp board/samsung/smdk2410 board/samsung/fl2440 –rf

mv board/samsung/fl2440/smdk2410.c board/samsung/fl2440/fl2440.c

vi board/samsung/fl2440/Makefile

修改COBJS :=fl2440.o

cp include/configs/smdk2410.h include/configs/fl2440.h

vi include/configs/fl2440.h

增加#define CONFIG_SKIP_LOWLEVEL_INIT 1 //首先將在SDRAM中測試,所以跳過CPU初始化過程

vi Makefile

930行增加:

fl2440_config:unconfig

@$(MKCONFIG) $(@:_config=) arm arm 920t fl2440 samsung s3c24x0

161行修改:

CROSS_COMPILE ?= arm-linux-

保存後,可以進行測試:

make clean

make fl2440_config

make

然後會生成二進制文件u-boot.bin, 這個時候把程序放到開發板上是運行不了的,因為通過DNW下載的程序,它會從指定位置運行,而u-boot默認代碼地址為0。修改DNW配置,設置下載地 址為0x32000000(FL2440的DRAM空間是0x30000000~0x34000000,共64M),然後修改fl2440.h:

vi include/configs/fl2440.h

#define CONFIG_SYS_TEXT_BASE 0x32000000

然後重新生成uboot.bin,在DNW主菜單中選擇0,就可以通過USB將uboot.bin下載到開發板運行了,當然運行會出錯的。

2.修改配置

網上大部分的博客都是使用S3C2410的配置,我不想用這個,因為uboot已支持S3C2440。

修改include/configs/fl2440.h

去掉這兩行:

#defineCONFIG_S3C2410 /*specifically a SAMSUNG S3C2410 SoC */
#define CONFIG_SMDK2410 /* on aSAMSUNG SMDK2410 Board */

增加:

#define CONFIG_S3C2440
將NAND配置先注釋起來,不然會有很多錯誤:

/*#define CONFIG_CMD_NAND*/
更改內存范圍,將:

#defineCONFIG_SYS_MEMTEST_END 0x33F00000

修改為:

#defineCONFIG_SYS_MEMTEST_END 0x34000000

3.修改時鐘

vi arch/arm/cpu/arm920t/start.S

在163行處增加:

# if defined(CONFIG_S3C2440)
ldr r1,=0x7fff
ldr r0,=INTSUBMSK
str r1, [r0]
# endif

這裡是屏蔽中斷,S3C440用到了15位,所以把值設置成0x7fff

將下面這段去掉:

ldr r0, =CLKDIVN
mov r1, #3
str r1, [r0]

增加這樣一段:

# if defined(CONFIG_S3C2440)
ldr r0,=CLKDIVN
mov r1, #5
str r1, [r0]
#endif
這裡主要是設置FCLK,HCLK,PCLK等時鐘的,關於這一部分有篇博客寫得很好:

FCLK,HCLK和PCLK的關系

保存,修改fl2440.c:

vi board/samsung/fl2440/fl2440.c

將這段去掉:

#define FCLK_SPEED 1

#ifFCLK_SPEED==0 /* Fout = 203MHz, Fin = 12MHz for Audio */
#define M_MDIV 0xC3
#define M_PDIV 0x4
#define M_SDIV 0x1
#elifFCLK_SPEED==1 /* Fout = 202.8MHz */
#define M_MDIV 0xA1
#define M_PDIV 0x3
#define M_SDIV 0x1
#endif
#define USB_CLOCK 1

#if USB_CLOCK==0
#define U_M_MDIV 0xA1
#define U_M_PDIV 0x3
#define U_M_SDIV 0x1
#elif USB_CLOCK==1
#define U_M_MDIV 0x48
#define U_M_PDIV 0x3
#define U_M_SDIV 0x2
#endif

增加這段:
#define M_MDIV 0x7f
#define M_PDIV 0x2
#define M_SDIV 0x1

#define U_M_MDIV 0x38
#define U_M_PDIV 0x2
#define U_M_SDIV 0x2
因為FL2440的晶振為12M,在芯片手冊可以查到這些值,使得CPU頻率為405M,USB時鐘頻率為48M

在board_init函數中,修改:
gd->bd->bi_arch_number = MACH_TYPE_SMDK2410;
為:
gd->bd->bi_arch_number = MACH_TYPE_S3C2440;

這樣,時鐘就設置好了,保存,重新生成u-boot.bin,下載到開發板運行,就可以看到串口打印信息了:

U-Boot 2011.09-rc1 (Oct 03 2011 - 20:32:32)


DRAM: 64 MiB

WARNING: Caches not enabled

Flash: *** failed ***

### ERROR ### Please RESET the board ###

下一步的話,考慮讓UBOOT支持NAND FLASH。

Copyright © Linux教程網 All Rights Reserved