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

来源:互联网 发布:linux 拷贝命令 编辑:程序博客网 时间:2024/06/12 08:17

任务:让 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啟動后在串口能看到信息