NetVideo-bootloader(1)

u-boot-1.1.6版本

-----------------------

参照网上的一些资料,自己打算一步步移植,现在将每一阶段记录下来

第一阶段:

1.修改Makefile

其实就是在Makefile中添加你需要的config条目

-----------------------------------------------------

mini2440_config :   unconfig

                       (MKCONFIG) $(@:_config=) arm arm920t mini2440 NULL s3c24x0

----------------------------------------------------

对于这个条目是如何起作用的,主要可以看看$(topdir)config.mk这个文件

 

2.based on smdk2410

打算基于smdk2410的基础上移植,所以我们将include/smdk2410/ -->include/mini2440/;

include/configs/smdk2410.h -->include/configs/mini2440.h

 

到这里可以make mini2440_config,然后编译通过,但是这其实就是smdk241的uboot,并无差异。

 

3.下面才涉及到修改代码的问题

cpu/arm920t/start.S 这是个u-boot第一阶段的汇编代码,包括关闭看门狗和中断等,以及初始化clock和复制自己到ram中,为第二阶段做准备

 

#if defined(CONFIG_S3C2400) || defined(CONFIG_S3C2410)
    ldr     r0, =pWTCON
    mov     r1, #0x0
    str     r1, [r0]

    /*
     * mask all IRQs by setting all bits in the INTMR - default
     */
    mov r1, #0xffffffff
    ldr r0, =INTMSK
    str r1, [r0]
# if defined(CONFIG_S3C2410)
    ldr r1, =0x7fff /* changed from 0x7ff to 0x7fff, only for s3c2440 */
    ldr r0, =INTSUBMSK
    str r1, [r0]
# endif

---------------------------------------------------------------------------

#if 0   /* clock_init later */
    /* FCLK:HCLK:PCLK = 1:2:4 */
    /* default FCLK is 120 MHz ! */
    ldr r0, =CLKDIVN
    mov r1, #3
    str r1, [r0]
#endif

/*这里把时钟初始化注释掉了,因为后面调用了clock_init函数来初始化*/
-------------------------------------------------------------------


 #ifndef CONFIG_SKIP_LOWLEVEL_INIT
    adr r0, _start
    ldr r1, _TEXT_BASE
    cmp r0, r1
    blne    cpu_init_crit
#endif

    /* Set up the stack                         */
stack_setup:
    ldr r0, _TEXT_BASE      /* upper 128 KiB: relocated uboot   */
    sub r0, r0, #CFG_MALLOC_LEN /* malloc area                      */
    sub r0, r0, #CFG_GBL_DATA_SIZE /* bdinfo                        */
#ifdef CONFIG_USE_IRQ
    sub r0, r0, #(CONFIG_STACKSIZE_IRQ+CONFIG_STACKSIZE_FIQ)
#endif
    sub sp, r0, #12     /* leave 3 words for abort-stack    */

#ifndef CONFIG_SKIP_LOWLEVEL_INIT   /*added by zhenghao, for clock initialize*/
    bl  clock_init
#endif

/*因为要调用c程序,所以需要准备栈空间*/

-----------------------------------------------

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     clear_bss

    ldr r2, _armboot_start
    ldr r3, _bss_start
    sub r2, r3, r2      /* r2 <- size of armboot            */
#if 1
    bl  CopyCode2Ram            /*r0:source r1:dest r2:size     */

/*这个程序也是调用board/mini2440/boot_init.c中自己编写的一个程序。上电的时候需要把自己拷贝到ram中*/

----------------------------------------------------

#ifdef CONFIG_LED_MINI2440
#define GPIO_BASE   0x56000000
#define oGPIO_B     0x10
#define oGPIO_CON   0x0
#define oGPIO_DAT   0x4
#define oGPIO_UP    0x8
    mov     r1, #GPIO_BASE
    add     r1, r1,#oGPIO_B
    ldr     r2, =0x155aa
    str     r2,[r1, #oGPIO_CON]

    mov     r2, #0xff
    str     r2,[r1, #oGPIO_UP]

    mov     r2, #0x1c0
    str     r2, [r1, #oGPIO_DAT]
#endif
    ldr pc, _start_armboot

_start_armboot: .word start_armboot

/*点亮第一个led,表示第一阶段完成*/
-----------------------------------------------------------

 

在board/mini2440/ 中添加boot_init.c文件,里面包含了第一阶段相关调用的函数

 

编译成功,运行时候可以完成第一阶段

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值