您的位置:首页 > 其它

u-boot-2011.03在mini2440/micro2440上的移植(二)——在RAM中运行

2012-05-26 16:45 218 查看


2.1 include/configs/micro2440.h

删除

#define CONFIG_S3C2410 1 /* specifically a SAMSUNG S3C2410 SoC */

#define CONFIG_SMDK2410 1 /* on a SAMSUNG SMDK2410 Board */

添加

#define CONFIG_S3C2440 1 /* specifically a SAMSUNG S3C2440 SoC */

#define CONFIG_MICRO2440

#define CONFIG_SKIP_LOWLEVEL_INIT



【说明】

定义CONFIG_SKIP_LOWLEVEL_INIT是因为我们要在RAM中运行,所以要跳过底层的一些初始化代码


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

# if defined(CONFIG_S3C2410)

ldr r1, =0x3ff

ldr r0, =INTSUBMSK

str r1, [r0]

# endif



# if defined(CONFIG_S3C2440)

# define LOCKTIME 0x4C000000

# define MPLLCON 0x4C000004

# define UPLLCON 0x4C000008



# define CLKDIV_VAL 5

# define M_MDIV 0x7f /* XTal=12.0MHz MPLL=405MHz */

# define M_PDIV 2

# define M_SDIV 1

# define U_MDIV 0x38 /* XTal=12.0MHz UPLL=48MHz */

# define U_PDIV 2

# define U_SDIV 2



ldr r1, =0x7fff

ldr r0, =INTSUBMSK

str r1, [r0]



ldr r0,=LOCKTIME /* 设置U_LTIME和M_LTIME */

ldr r1,=0x0fff0fff

str r1,[r0]



ldr r0, =CLKDIVN /* Fclk:Hclk:Pclk = 1:4:8 */

ldr r1, =CLKDIV_VAL

str r1, [r0]



mrc p15, 0, r0, c1, c0, 0 /* 总线模式设为异步模式 */

orr r0, r0, #0xc0000000

mcr p15, 0, r0, c1, c0, 0



ldr r0,=UPLLCON /* 配置UPLL */

ldr r1,=((U_MDIV<<12) + (U_PDIV<<4) + U_SDIV)

str r1,[r0]

nop /* 为确保硬件完成操作,至少需7个时钟周期 */

nop

nop

nop

nop

nop

nop

ldr r0,=MPLLCON /* 配置MPLL */

ldr r1,=((M_MDIV<<12) + (M_PDIV<<4) + M_SDIV)

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 /* CONFIG_S3C2440 */



#endif /* CONFIG_S3C24X0 */



2.3 board/samsung/micro2440/micro2440.c

#define FCLK_SPEED 2



#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

#elif FCLK_SPEED==2 /* Fout = 405MHz */

#define M_MDIV 0x7F

#define M_PDIV 0x2

#define M_SDIV 0x1

#endif



#define USB_CLOCK 2



#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

#elif USB_CLOCK==2 /* Fout = 48MHz */

#define U_M_MDIV 0x38

#define U_M_PDIV 0x2

#define U_M_SDIV 0x2

#endif



int board_init (void)

{

......

gd->bd->bi_arch_number = MACH_TYPE_MINI2440;

......

}



int dram_init (void)

{

......

gd->ram_size = PHYS_SDRAM_1_SIZE;

return 0;

}



【说明】

我在发布资源时用的是MACH_TYPE_MICRO2440,之前的Linux内核中有MICRO2440的机器码,值为2680,但是最近的内核,比如Linux-2.6.39中并没有这个值,虽然我自己是在Micro2440开发板上移植,但机器码还是使用MACH_TYPE_MINI2440,其值为1999。所以下载了资源的网友一定要注意gd->bd->bi_arch_number
的值。


2.4 测试

[408@WZC u-boot-2011.06]$ make

编译完成后将u-boot.bin下载到SDRAM的0x33f80000地址处,u-boot已经能在RAM中运行。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: