微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > mini2440开发板 u-boot 移植

mini2440开发板 u-boot 移植

时间:11-27 来源:互联网 点击:
本实验所用的u-boot源码包,是国嵌提供的u-boot-2008.10

1.解压源码包

命令:tar jxvf u-boot-2008.10.tar.bz2

2.在顶层的Makefile中找到

smdk2410_config:unconfig
@$(MKCONFIG) $(@:_config=) arm arm920t smdk2410 NULL s3c24x0

参照此方法,添加:

mini2440_config:unconfig
@$(MKCONFIG) $(@:_config=) arm arm920t mini2440 NULL s3c24x0

3.修改/cpu/arm920t/start.S

(1)修改编译条件使其支持s3c2440

代码第136行#if defined(CONFIG_S3C2400) || defined(CONFIG_S3C2410)

改为#if defined(CONFIG_S3C2400) || defined(CONFIG_S3C2410) || defined(CONFIG_S3C2440)

(2)添加寄存器的定义

在149行左右

#define pWTCON0x53000000
#define INTMSK0x4A000008
#define INTSUBMSK0x4A00001C
#define CLKdivN0x4C000014
# endif
之后添加代码

#define CLK_CTL_BASE 0x4C000000
#define Mdiv_405 0x7f < 12
#define PSdiv_405 0x21
#define UPLL_Mdiv_48 0x38 < 12
#define UPLL_PSdiv_48 0x22
#define Mdiv_200 0xa1 < 12
#define PSdiv_200 0x31

(3)修改中断禁止部分,添加s3c2440中断禁止代码

在170行左右:

# if defined(CONFIG_S3C2410)
ldrr1, =0x3ff
ldrr0, =INTSUBMSK
strr1, [r0]
# endif

后面添加:


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

(4)修改时钟设置(将s3c2440主频设置为405MHZ)

将180行左右关于时钟设置的代码注释掉

*
*ldrr0, =CLKdivN
*movr1, #3
*strr1, [r0]
*#endif
*/

添加:

#if defined(CONFIG_S3C2440)

ldr r0,=CLKdivN
move r1,#5
str r1,[r0]

mrc p15,0,r1,c1,c0,0
orr r1,r1,#0xc0000000
mcr p15,0,r1,c1,c0,0

mov r1,#CLK_CTL_BASE

mov r2,#UPLL_Mdiv_48
add r2,r2,#UPLL_PSdiv_48
str r2,[r1,#0x08]

mov r2,#Mdiv_405
add r2,r2,#PSdiv_405
str r2,[r1,#0x04]

#else

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

mrc p15,0,r1,c1,c0,0
orr r1,r1,#0xc0000000
mcr p15,0,r1,c1,c0,0

mov r1,#CLK_CTL_BASE
mov r2,#Mdiv_200
add r2,r2,#PSdiv_200
str r2,[r1,#0x04]

#endif

#endif

4.修改/cpu/arm/s3c24x0/interrupts.c,加入对2440的支持

(1)在第33行左右,修改

#if defined(CONFIG_S3C2400) || defined (CONFIG_S3C2410) || defined(CONFIG_S3C2440) || defined (CONFIG_TRAB)

(2)在第40行左右,修改

#elif defined(CONFIG_S3C2410)||defined(CONFIG_S3C2440)

(3)在get_tbclk()函数中修改

#elif defined(CONFIG_SBC2410X) ||
defined(CONFIG_SMDK2410) ||
defined(CONFIG_MINI2440) ||
defined(CONFIG_VCMA9)
tbclk = CFG_HZ;
#else

5.修改/cpu/arm/s3c24x0/speed.c

(1)在33行左右修改:

#if defined(CONFIG_S3C2400) || defined (CONFIG_S3C2410) || defined (CONFIG_S3C2440) || defined (CONFIG_TRAB)

#if defined(CONFIG_S3C2400)
#include

#elif defined(CONFIG_S3C2410)||defined(CONFIG_S3C2440)

(2)修改函数get_PLLCLK()

因为S3C2440与S3C2410的MPLL、UPLL计算公式不同

在代码:

m = ((r & 0xFF000) >> 12) + 8;
p = ((r & 0x003F0) >> 4) + 2;
s = r & 0x3

的后面添加:


#if defined(CONFIG_S3C2440)
if (pllreg == MPLL)
return((CONFIG_SYS_CLK_FREQ*m*2)/(pelse if(pllreg == UPLL)
#endif

return((CONFIG_SYS_CLK_FREQ * m) / (p < s));
}

(3)修改函数get_HCLK()

ulong get_HCLK(void)
{
S3C24X0_CLOCK_POWER * const clk_power = S3C24X0_GetBase_CLOCK_POWER();


#if defined(CONFIG_S3C2440)
if(clk_power->CLKdivN&0x6)
{
if((clk_power->CLKdivN&0x06)==2)
return(get_FCLK()/2);
if((clk_power->CLKdivN&0x06)==6)
return(clk_power->CAMdivN&0x100)?
get_FCLK()/6:get_FCLK()/3;
if((clk_power->CLKdivN&0x06)==4)
return(clk_power->CAMdivN&0x200)?
get_FCLK()/8:get_FCLK()/4;
return(get_FCLK());

}
else return(get_FCLK());
#else
return((clk_power->CLKdivN&0x02)?get_FCLK()/2:get_FCLK());
#endif

// return((clk_power->CLKdivN & 0x2) ? get_FCLK()/2 : get_FCLK());
}

6.修改/include/asm-arm/mach-types.h

添加mini2440机器ID,添加的ID内核提供的ID保持一致

#define MACH_TYPE_MINI24401999

7.修改cpu/arm920t/s3c24x0/serial.c

修改drivers/rtc/s3c24x0_rtc.c

在有s3c2410宏定义开关里加入对s3c2440的支持

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top