Mini2440 Uboot移植

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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;

相关文档
最新文档