您的位置:首页 > 其它

u-boot-2009.08移植笔记四,平台TQ2440 .

2013-03-19 21:03 183 查看
任务:让 u-boot 支持从 nand- flash 启动(也就是同时支持 Nor Flash 和 NAND Flash

启动)

1.修改cpu/arm920t/start.S代碼搬移程序,這裡按照TQ2440提供的U-BOOT1.1.6

源碼修改

將堆棧初始華提到前面,因為這裡搬運代碼用的C代碼,需要用到堆棧,然後添加修改如下

#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     clear_bss

    ldr    r2, _armboot_start

    ldr    r3, _bss_start

    sub    r2, r3, r2        /* r2 <- size of armboot            */

#if 1

    bl    CopyCode2Ram

#else

    add    r2, r0, r2        /* r2 <- source end address         */

#endif

/*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 */

2.現在增加CopyCode2Ram();函數及其支持函數,這裡直接用TQ提供的boot_init.c

這是這個函數拷貝的原理

     * 无论是从NOR Flash还是从NAND Flash启动,

     * 地址0处为指令"b    Reset", 机器码为0xEA00000B,

     * 对于从NAND Flash启动的情况,其开始4KB的代码会复制到CPU内部4K内存中,

     * 对于从NOR Flash启动的情况,NOR Flash的开始地址即为0。

     * 对于NOR Flash,必须通过一定的命令序列才能写数据,

     * 所以可以根据这点差别来分辨是从NAND Flash还是NOR Flash启动:

     * 向地址0写入一个数据,然后读出来,如果没有改变的话就是NOR Flash

    

將此文件拷貝到board/samsung/CM2440/目錄下,並在此目錄下的Makefile中添加

COBJS   := CM2440.o flash.o boot_init.o

並在u-boot.lds文件中添加,使其在鏈接位置靠前

3.修改s3c2410.h s3c2440.h,由於他們的NAND控制器基地址相同

按照2410的NAND添加

static inline S3C2440_NAND * const S3C2440_GetBase_NAND(void)

{

    return (S3C2440_NAND * const)S3C2410_NAND_BASE;

}

現在make 一下,注意要bl cpu_init_crit 去掉前面的@,如果沒錯下載到

NAND中,從NAND啟動后在串口能看到信息
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: