uboot移植参考说明:
该移植有部分移植参考互联网资源,如有侵权,请与我联系。大部分为自己原创,如有转载请注明出处,该技术仅供学习交流,不可商用。------小盒子 于哈尔滨2009年03月16日整理
11.修改cpu/arm920t/start.S文件
#if defined(CONFIG_S3C2400) || defined(CONFIG_S3C2410) || defined(CONFIG_S3C2440)
#if defined(CONFIG_S3C2400)
# define pWTCON 0x15300000
# define INTMSK 0x14400008 /* Interupt-Controller base addresses */
# define CLKDIVN 0x14800014 /* clock divisor register */
#else
# define pWTCON 0x53000000
# define INTMSK 0x4A000008 /* Interupt-Controller base addresses */
# define INTSUBMSK 0x4A00001C
# define CLKDIVN 0x4C000014 /* clock divisor register */
#endif
……
修改中断禁止部分:
# if defined(CONFIG_S3C2410)
ldr r1, =0x7ff /*Old Vlaue 0x3ff modify 0x7ff */
ldr r0, =INTSUBMSK
str r1, [r0]
# endif
#if defined(CONFIG_S3C2440)
ldr r1, =0x7fff
ldr r0, =INTSUBMSK
str r1, [r0]
# endif
……
修改时钟:
#if defined(CONFIG_S3C2440)
/* FCLK:HCLK:PCLK = 1:4:8*/
ldr r0, =CLKDIVN
mov r1, #3
str r1, [r0]
/*MMU_SetAsyncBusMode*/
/*
mrc p15, 0, r1, c1, c0, 0
orr r1, r1, #0xc0000000
mrc p15, 0, r1, c1, c0, 0
mov r1, #CLK_CTL_BASE
mov r2, #MDIV_405
add r2, r2, #PSDIV_405
str r2, [r1, #0x04]
*/
#else
/* FCLK:HCLK:PCLK = 1:2:4 */
/* default FCLK is 120 MHz ! */
ldr r0, =CLKDIVN
mov r1, #3
str r1, [r0]
/*MMU_SetAsyncBusMode*/
/*
* mrc p15, 0, r1, c1, c0, 0
* orr r1, r1, #0xc0000000
* mrc 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 /*CONFIG_S3C2440*/
#endif /* CONFIG_S3C2400 || CONFIG_S3C2410 || CONFIG_S3c2440 */
……
从FLASH启动改成从NAND FLASH启动
#if defined(CONFIG_S3C2440)
ldr r0,=0x4e000038;
ldr r1,=0x0
str r1,[r0]
ldr r1,=0xffffff
str r1,[r0,#4]
adr r0,_start
ldr r1,_TEXT_BASE
cmp r0,r1
beq stack_setup
bl copy_nand_to_sdram
@bl stack_setup
#endif/*CONFIG_S3C2440*/
/***********S3C2410 NAND SELF-COPY***********/
#if defined(CONFIG_S3C2410)
adr r0,_start
ldr r1,_TEXT_BASE
cmp r0,r1
beq stack_setup
bl copy_nand_to_sdram
#endif /* CONFIG_S3C2410 */
禁止从FLASH启动
#ifdef CONFIG_AT91RM9200
#define CONFIG_SKIP_RELOCATE_UBOOT
#ifndef CONFIG_SKIP_RELOCATE_UBOOT
relocate: /* relocate U-Boot to RAM */
adr r0, _start /* r0 <- current position of code */
ldr r1, _TEXT_BASE /* test if we run from flash or RAM */
cmp r0, r1 /* don't reloc during debug */
beq stack_setup
ldr r2, _armboot_start
ldr r3, _bss_start
sub r2, r3, r2 /* r2 <- size of armboot */
@add r2, r0, r2 /* r2 <- source end address */
ldr r2,=0x20000
copy_loop:
ldmia r0!, {r3-r10} /* copy from source address [r0] */
stmia r1!, {r3-r10} /* copy to target address [r1] */
cmp r0, r2 /* until source end addreee [r2] */
ble copy_loop
#endif /* CONFIG_SKIP_RELOCATE_UBOOT */
#endif
为了测试方便,在uboot启动第一个阶段后,用LED闪烁做指示
/*Boot Start Code*/
bl led_test
/*running in sdram*/
ldr pc, _start_armboot
这里说明一下led_test是一段汇编程序(也可以是你写的C程序),根据板子具体的情况自己去写这段程序。
从NAND FLASH到SDRAM
#if defined(CONFIG_S3C2440)
copy_nand_to_sdram:
mov r10,lr
ldr sp,DW_STACK_START
mov fp,#0x0
bl nand_reset
ldr r0,_TEXT_BASE /*注意此三个参数,这三个参数是传到nand_read_ll 函数中*/
mov r1,#0x0
mov r2,#0x20000 /*u-boot.bin文件的大小决定此参数的大小*/
bl nand_read_ll /*board/hyt24x0/read_nand.c 文件中*/
tst r0,#0x0
beq ok_nand_read
ok_nand_read:
mov r0,#0x0
ldr r1,_TEXT_BASE
mov r2,#0x400
go_next:
ldr r3,[r0],#4
ldr r4,[r1],#4
teq r3,r4
bne notmatch
subs r2,r2,#0x4
beq done_nand_read
bne go_next
notmatch:
1:
b 1b
done_nand_read:
mov pc,r10
#endif /*CONFIG_S3C2440*/
#if defined(CONFIG_S3C2410)
copy_nand_to_sdram:
mov r10,lr
ldr sp,DW_STACK_START
mov fp,#0x0
bl nand_reset
ldr r0,_TEXT_BASE
mov r1,#0x0
mov r2,#0x20000
bl nand_read_ll
tst r0,#0x0
beq ok_nand_read
ok_nand_read:
mov r0,#0x0
ldr r1,_TEXT_BASE
mov r2,#0x400
go_next:
ldr r3,[r0],#4
ldr r4,[r1],#4
teq r3,r4
bne notmatch
subs r2,r2,#0x4
beq done_nand_read
bne go_next
notmatch:
1:
b 1b
done_nand_read:
mov pc,r10
#endif /*CONFIG_S3C2410*/
DW_STACK_START:
.word 0x33f08000
连载四先到这里吧,下一节将介绍启动代码文件的添加,请大家继续关注……下一节将于下周一(2009年03月23日)整理完成,并发到博客上。
请关注《【原创】u-boot移植-->连载五》