【原创】u-boot移植-->连载四

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 FLASHSDRAM

#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移植-->连载五》

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值