移植u-boot-2010.06到AT2440
编译环境: VMware7.0下Ubuntu9.10
交叉编译器:crosstools-0.43
目标板:CPU:Samsung S3C2440A
SDRAM:64M Samsung K4S561632H-UC75
Nor Flash:2M AMD AM29LV160DB
NAND Flash:64M Samsung K9F1208UOB
Ethernet:Davicom DM9000AE
前期准备:
删除arch目录下除arm目录以外的所有目录,arm\cpu目录下除arm920tmulu以外的所有目录,arch\arm\cpu\arm920t目录下除s3c24x0目录以外的所有目录(该目录下的文件不要删),arch\arm\include\asm目录下除arch‐s3c24x0目录以外的所有arch‐xxxx目录(该目录下的文件不要删) 删除board目录下除samsung目录以外的所有目录,board\samsung目录下除smdk2410目录以外的所有目录 删除include\configs目录下除smdk2410.h文件以外的所有头文件。
准备移植:
将board\samsung\smdk2410目录复制为at2440目录,进入at2440目录。 修改smdk2410.c为at2440.c 修改Makefile文件中的COBJS改为:COBJS := at2440.o flash.o
建立目标板配置文件:进入include\configs目录下,将smdk2410.h复制为at2440.h。
修改顶层Makefile文件,复制
smdk2410_config : unconfig
@$(MKCONFIG) $(@:_config=) arm arm920t smdk2410 samsung s3c24x0
为
at2440_config : unconfig
@$(MKCONFIG) $(@:_config=) arm arm920t at2440 samsung s3c24x0
配置交叉编译器:修改Makefile文件157行增加:
CROSS_COMPILE = arm-softfloat-linux-gnu-
编译测试:
进入u-boot-2010.06目录:
make distclean
make at2440_config
make all
如果没有错误,则会生成u‐boot.bin文件。
至此,自己的目标板已经建立,下面要做的是修改一些配置,增加一些驱动。
修改时钟:
查看S3C2440 spec,
板卡上的晶振为16.9344MHz,设定MPLL为400MHz,则MDIV为110(0x6e),PDIV为3,SDIV为1。设定UPLL为48MHz,则MDIV为60(0x3c),PDIV为4,SDIV为2。
在at2440.c文件中board_init函数,添加:
#define S3C2440_MPLL_399MHZ ((0x6e<<12)|(0x03<<4)|(0x01))
#define S3C2440_UPLL_48MHZ ((60<<12|(4<<4)|(2)))
修改:
clk_power->MPLLCON = ((M_MDIV << 12) + (M_PDIV << 4) + M_SDIV);
为:
clk_power->MPLLCON = S3C2440_MPLL_399MHZ;
修改:
clk_power->UPLLCON = ((U_M_MDIV << 12) + (U_M_PDIV << 4) + U_M_SDIV);
为:
clk_power->UPLLCON = S3C2440_UPLL_48MHZ;
修改:
gd->bd->bi_arch_number = MACH_TYPE_SMDK2410;
为:
gd->bd->bi_arch_number = MACH_TYPE_S3C2440;
设定FCLK:HCLK:PCLK = 1:4:8,则CLKDIVN为5
修改start.s
/* FCLK:HCLK:PCLK = 1:2:4 */
/* default FCLK is 120 MHz ! */
ldr r0, =CLKDIVN
mov r1, #3
str r1, [r0]
为:
#if 1
/* FCLK:HCLK:PCLK = 1:4:8 */
/* default FCLK is 400 MHz ! */
ldr r0, =CLKDIVN
mov r1, #5
str r1, [r0]
#else
/* FCLK:HCLK:PCLK = 1:2:4 */
/* default FCLK is 120 MHz ! */
ldr r0, =CLKDIVN
mov r1, #3
str r1, [r0]
#endif
修改speed.c
修改get_PLLCLK函数:
return (CONFIG_SYS_CLK_FREQ * m) / (p << s);
为:
return (CONFIG_SYS_CLK_FREQ * m * 2) / (p << s); /*S3C2440*/
修改get_HCLK函数:
return (readl(&clk_power->CLKDIVN) & 2) ? get_FCLK() / 2 : get_FCLK();
为:
return (readl(&clk_power->CLKDIVN) & 2) ? get_FCLK() / 4 : get_FCLK();/*S3C2440*/
修改get_PCLK函数:
return (readl(&clk_power->CLKDIVN) & 1) ? get_HCLK() / 2 : get_HCLK();
为
return (readl(&clk_power->CLKDIVN) & 1) ? get_HCLK() / 8 : get_HCLK();/*S3C2440*/
修改at2440.h
#define CONFIG_SYS_CLK_FREQ 12000000/* the SMDK2410 has 12MHz input clock */
为:
#define CONFIG_SYS_CLK_FREQ 16934400/* the AT2440 has 16.9344MHz input clock */
修改:
#define CONFIG_SYS_PROMPT "SMDK2410 # " /* Monitor Command Prompt */
为:
#define CONFIG_SYS_PROMPT "AT2440 # " /* Monitor Command Prompt */
此时,对S3C2440的时钟算配置好了,为了方便调试,可以利用开发板自带的U-BOOT文件烧写到内存中运行,此时还需要修改一些配置:
修改board\samsung\at2440\config.mk:
TEXT_BASE = 0x33F80000
为:
TEXT_BASE = 0x33000000
修改start.s:
#ifndef CONFIG_SKIP_LOWLEVEL_INIT
bl cpu_init_crit
#endif
为:
#ifndef CONFIG_SKIP_LOWLEVEL_INIT
/* bl cpu_init_crit*/
#endif
编译测试:
进入u-boot-2010.06目录:
Make clean
make
如果没有错误,则会生成u‐boot.bin文件。
通过串口及超级终端:
Loadb 30000000
Go 30000000
运行成功,串口出信息:
文章评论(0条评论)
登录后参与讨论