U-Boot2010.06移植(2440)-----基本移植

来源:互联网 发布:wamp多域名绑定 编辑:程序博客网 时间:2024/06/04 08:47

1、修改顶层Makefile文件

(1)添加(第二行前面有个TAB):
smdk2440_config :unconfig
@$(MKCONFIG) $(@:_config=) arm arm920t smdk2440 samsung s3c24x0

(2)指定交叉编译器:
CROSS_COMPILE ?=arm-linux-

2、在board/samsung目录下新建smdk2440,并将board/samsung/smdk2410目录下的文件拷到smdk2440目录下,把smdk2410.c改名为smdk2440.c。

(1)修改board/samsung/smdk2440目录下的Makefile
COBJS :=smdk2440.o flash.o


3、在include/configs目录下创建开发板配置头文件,拷贝一份smdk2410.h,并改名为smdk2440.h

4、修改arch/arm/cpu/arm920t/start.S

(1)删掉LED部分
/*
bl coloured_LED_init
bl red_LED_on

*/


(2)添加2440关闭中断
# if defined(CONFIG_S3C2410) 
ldr r1, =0x3ff 
ldr r0, =INTSUBMSK 
str r1, [r0] 
# endif
# if defined(CONFIG_S3C2440) 
ldr r1, =0x7fff     /*15个中断,根据2440手册*/
ldr r0, =INTSUBMSK 
str r1, [r0] 
# endif



(3)定义MPLL寄存器
# define INTSUBMSK 0x4A00001C 
# define CLKDIVN 0x4C000014 
# define MPLLCON 0x4C000004   /*2440特有的寄存器*/
# endif



(4)注释掉2410的时钟设置,并添加时钟设置
#if 0
/* FCLK:HCLK:PCLK = 1:2:4 */
/* default FCLK is 120 MHz ! */
ldr r0, =CLKDIVN
mov r1, #3
str r1, [r0]
#endif

/*2440时钟设置*/
/* FCLK:HCLK:PCLK = 1:4:8 UCLK = UPLL*/
ldr r0, =CLKDIVN
mov r1, #5
str r1, [r0]

/*2440不支持同步总线模式,所以要切换到异步总线模式*/
mrc p15, 0, r1, c1, c0, 0
orr r1, r1, #0xc0000000
mcr p15, 0, r1, c1, c0, 0

/*查看2440手册255页,405MHz的值为0x7f021*/
ldr r1, =MPLLCON
ldr r2, =0x5c011   
str r2, [r1] @400mhz




5、修改include/configs/smdk2440.h

(1)添加:
#define CONFIG_S3C2440 1

6、修改board/samsung/smdk2440/smdk2440.c

(1)注释掉clock宏定义代码
#if 0
#define FCLK_SPEED 1

#if FCLK_SPEED==0 /* Fout = 203MHz, Fin = 12MHz for Audio */
#define M_MDIV 0xC3
#define M_PDIV 0x4
#define M_SDIV 0x1
#elif FCLK_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
#endif


(2)添加时钟频率宏定义
//#define S3C2440_MPLL_405MHZ ((0x7f<<12)|(0x02<<4)|(0x01)) // 405MHz, 在手册中可以查到(255页)
#define S3C2440_MPLL_400MHZ ((0x5c<<12)|(0x01<<4)|(0x01)) // 400MHz 
#define S3C2440_UPLL_48MHZ ((0x38<<12)|(0x02<<4)|(0x02)) // 48MHz


(3)修改board_init函数的时钟配置
clk_power->LOCKTIME = 0xFFFFFF;
clk_power->UPLLCON = S3C2440_UPLL_48MHZ;
delay (4000);
clk_power->MPLLCON = S3C2440_MPLL_400MHZ;
delay (8000);

*根据2440手册知道:当你设置MPLL 和UPLL 的值时,你必须首先设置UPLL 值再设置MPLL 值。(大约需要7 个NOP 的间隔)


(4)修改board_init函数的MACH_TYPE
gd->bd->bi_arch_number = MACH_TYPE_S3C2440;

*这个值要和内核的MACH_TYPE相同



7、修改arch/arm/cpu/arm920t/s3c24x0/speed.c

(1)修改get_PLLCLK函数(该函数会被设置波特率的函数调用)
static ulong get_PLLCLK(int pllreg) 

……………………
//return (CONFIG_SYS_CLK_FREQ *m) / (p << s);  //2410
return (CONFIG_SYS_CLK_FREQ * m * 2) / (p <<s); //2440

}

(2)添加时钟分频宏定义
#define S3C2440_CLKDIVN_HDIVN_MASK (3<<1) 
#define S3C2440_CLKDIVN_HDIVN_1 (0<<1) 
#define S3C2440_CLKDIVN_HDIVN_2 (1<<1) 
#define S3C2440_CLKDIVN_HDIVN_4_8 (2<<1) 
#define S3C2440_CLKDIVN_HDIVN_3_6 (3<<1)

#define S3C2440_CAMDIVN_HCLK3_HALF (1<<8) 
#define S3C2440_CAMDIVN_HCLK4_HALF (1<<9)


(3)修改get_HCLK函数
ulong get_HCLK(void)
{
struct s3c24x0_clock_power *clk_power = s3c24x0_get_base_clock_power();
unsigned long clkdiv;
unsigned long camdiv;
int hdiv;

clkdiv = readl(&clk_power->CLKDIVN);  //读取CLKDIVN寄存器的值
camdiv = readl(&clk_power->CAMDIVN);  //读取CAMDIVN寄存器的值
//根据CLKDIVN寄存器的[2:1]来设置HCLK的分频值(查看2440手册258页)
switch (clkdiv & S3C2440_CLKDIVN_HDIVN_MASK) {
case S3C2440_CLKDIVN_HDIVN_1:
hdiv = 1;
break;
case S3C2440_CLKDIVN_HDIVN_2:
hdiv = 2;
break;
case S3C2440_CLKDIVN_HDIVN_4_8:
hdiv = (camdiv & S3C2440_CAMDIVN_HCLK4_HALF) ? 8 : 4;
break;
case S3C2440_CLKDIVN_HDIVN_3_6:
hdiv = (camdiv & S3C2440_CAMDIVN_HCLK3_HALF) ? 6 : 3;
break;

}


//return (readl(&clk_power->CLKDIVN) & 2) ? get_FCLK() / 2 : get_FCLK();
return get_FCLK() / hdiv;

}



8、修改arch/arm/include/asm/arch-s3c24x0/s3c24x0.h(寄存器声明头文件)

(1)添加CAMDIVN寄存器
structs3c24x0_clock_power { 
…………… 
u32 CLKDIVN; 
u32 CAMDIVN; 
};


9、修改board/samsung/smdk2440/lowlevel_init.S

(1)修改REFCNT

//#define REFCNT 1113 /* period=15.6us, HCLK=60Mhz,(2048+1-15.6*60) */
#define REFCNT 0x4f5



10、修改arch/arm/cpu/arm920t/u-boot.lds

(1)添加lowlevel_init.S的目标文件加入到.text中,防止被放到4k的地址外
.text :

arch/arm/cpu/arm920t/start.o (.text) 
board/samsung/smdk2440/lowlevel_init.o (.text) 
*(.text) 
}




到此基本的移植已完成。
make smdk2440_config
make
现在只能烧录到NorFlash
0 0
原创粉丝点击