Mini2440 Uboot移植
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第一部分
根据uboot-2008.10,移植出能在mini2440 nor flash上运行的uboot
1 修改Makefile:
在uboot-2008.10顶层目录中的Makefile中,参考smdk2410_config,添加新的配置选项。# add,flyriz
mini2440_config : unconfig
@$(MKCONFIG) $(@:_config=) arm arm920t mini2440 NULL s3c24x0
2 修改cpu/arm920t/start.S:
2.1添加支持S3C2440的编译条件
/* #if defined(CONFIG_S3C2400)||defined(CONFIG_S3C2410) */
/*modify,flyriz*/
#if defined(CONFIG_S3C2400)||defined(CONFIG_S3C2410)||defined(CONFIG_S3C2440) 2.2添加S3C2440寄存器的定义
#else
# define pWTCON 0x53000000
# define INTMSK 0x4A000008 /* Interupt-Controller base addresses */
# define INTSUBMSK 0x4A00001C
# define CLKDIVN 0x4C000014 /* clock divisor register */
# endif
/*add,flyriz,for 2440,register define*/
#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
/****************************/
2.3修改中断禁止代码
# if defined(CONFIG_S3C2410)
ldr r1, =0x3ff
ldr r0, =INTSUBMSK
str r1, [r0]
# endif
/*add,flyriz*/
# if defined(CONFIG_S3C2440)
ldr r1, =0x7fff /* S3C2440有15个子中断[0...14] */
ldr r0, =INTSUBMSK
str r1, [r0]
# endif
2.4 修改时钟设置
/********************
* FCLK:HCLK:PCLK = 1:2:4 *
* default FCLK is 120 MHz ! *
ldr r0, =CLKDIVN
mov r1, #3
str r1, [r0]
#endif * CONFIG_S3C2400 || CONFIG_S3C2410 *
********************/
/*modify,flyriz*/
#if defined(CONFIG_S3C2440)
/*FCLK:HCLK:PCLK=1:4:8*/
ldr r0,=CLKDIVN
mov r1,#5
str r1,[r0]
mrc p15,0,r1,c1,c0,0 /* CP15中的寄存器C1是一个控制寄存器,用于配置MMU中的一些操作 */
orr r1,r1,#0xc0000000
mcr p15,0,r1,c1,c0,0
mov r1,#CLK_CTL_BASE /* 0x4C000000 LOCKTIME:PLL lock time counter */
mov r2,#UPLL_MDIV_48
add r2,r2,#UPLL_PSDIV_48
str r2,[r1,#0x08] /* 0x4C000008 UPLLCON=0x38<<12||0x22,output 48MHz */
mov r2,#MDIV_405
add r2,r2,#PSDIV_405
str r2,[r1,#0x04] /* 0x4C000004 MPLLCON=0x7f<<12||0x21,output 405MHz */ #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 /*CONFIG_S3C2400||CONFIG_S3C2410||CONFIG_S3C2440*/
/**********************************************************/
3 修改cpu/arm920t/s3c24x0/interrupts.c
3.1 在条件编译的宏定义里加入对s3c2440的支持:
/* #if defined(CONFIG_S3C2400) || defined (CONFIG_S3C2410) || defined (CONFIG_TRAB) */
/*modify,flyriz*/
#if defined(CONFIG_S3C2400)||defined(CONFIG_S3C2410)||defined(CONFIG_S3C2440)||defined(CONFIG_TRAB)
/* #elif defined(CONFIG_S3C2410) */
/*modify,flyriz*/
#elif defined(CONFIG_S3C2410)||defined(CONFIG_S3C2440)
3.2 在get_tbclk函数中,添加对mini2440的支持:
#if defined(CONFIG_SMDK2400) || defined(CONFIG_TRAB)
tbclk = timer_load_val * 100;
#elif defined(CONFIG_SBC2410X) || \
defined(CONFIG_SMDK2410) || \
defined(CONFIG_MINI2440) || \
defined(CONFIG_VCMA9) /*modify,flyriz,add:CONFIG_MINI2440*/
tbclk = CFG_HZ; /*get_tbclk函数的作用?CFG_HZ又是什么?*/
4 修改cpu/arm920t/s3c24x0/speed.c
4.1 在条件编译的宏定义里加入对s3c2440的支持:
/*#if defined(CONFIG_S3C2400) || defined (CONFIG_S3C2410)|| defined (CONFIG_TRAB)*/
/*modify,flyriz*/
#if defined(CONFIG_S3C2400) || defined (CONFIG_S3C2410) || defined (CONFIG_S3C2440) || defined (CONFIG_TRAB) /*#elif defined(CONFIG_S3C2410)*/
/*modify,flyriz*/
#elif defined(CONFIG_S3C2410)||defined(CONFIG_S3C2440)
4.2 修改get_PLLCLK函数:
m = ((r & 0xFF000) >> 12) + 8;
p = ((r & 0x003F0) >> 4) + 2;
s = r & 0x3;