• u-boot-2012.04.01移植笔记——支持NAND启动


    1、加入nand读写函数文件:

    对于nand的读写我们需要特定的函数,之前写最小bootloader的时候曾写过nand.c文件,我们需要用到它。为了避免混淆,我们先将其改名为init.c,然后拷贝到:boardsamsungsmdk2440目录下。并在本目录的Makefile文件中将COBJS   := smdk2410.o修改为:COBJS   := smdk2410.o init.o。另外我们将init.c文件里面里的nand_init全部改为nand_init_ll,nand_read全部改为nand_read_ll。

    2、拷贝代码:

    将arch/arm/cpu/arm920t/start.S里的下列代码
    /* Set stackpointer in internal RAM to call board_init_f */
    call_board_init_f:
    ldr sp, =(CONFIG_SYS_INIT_SP_ADDR)
    bic sp, sp, #7 /* 8-byte alignment for ABI compliance */
    ldr r0,=0x00000000
    bl board_init_f
    修改为:
    ldr sp, =(CONFIG_SYS_INIT_SP_ADDR)
    bic sp, sp, #7 /* 8-byte alignment for ABI compliance */

        bl nand_init_ll
        mov r0 , #0
        ldr r1 ,  _TEXT_BASE
        ldr r2 ,  _bss_start_ofs
        bl copy_to_sdram
        bl clear_bss
        ldr pc , =call_board_init_f
    /* Set stackpointer in internal RAM to call board_init_f */
    call_board_init_f:

    ldr r0,=0x00000000
    bl board_init_f

    并且在include/configs/smdk2440.h文件里面将:
    #define CONFIG_SYS_TEXT_BASE 0x0
    修改为:#define CONFIG_SYS_TEXT_BASE 0x33f00000

    3、清BSS段

    修改Init.c文件里面的clear_bss函数为:
    void clear_bss()
    {
        extern int __bss_start,__bss_end__;
        int *p = &__bss_start;

        for(;p<&__bss_end__;p++)
            *p=0;
    }

    4、去除重定位代码

    将arch/arm/lib/board.c文件里的board_init_f函数最后的relocate_code(addr_sp, id, addr);注释掉
    并 start.S文件里面的clear_bss和relocate_code代码去掉
    在board_init_f函数里面将:
            addr -= gd->mon_len;
            addr &= ~(4096 - 1);
    修改为:
    addr = _TEXT_BASE;

    5、第二阶段代码:

    首先在arch/arm/lib/board.c文件里的board_init_f数最后的添加:return (unsigned int)id;
    并将函数名改为:unsigned int board_init_f(ulong bootflag)

    将include/common.h文件的:
    voidboard_init_f  (ulong) __attribute__ ((noreturn));
    voidboard_init_r  (gd_t *, ulong) __attribute__ ((noreturn));
    修改为:
    unsigned int board_init_f  (ulong) ;
    voidboard_init_r  (gd_t *, ulong) ;

    arch/arm/cpu/arm920t/start.S文件里的:
    blboard_init_f
    后面添加:
    ldr r1 , = _TEXT_BASE
    bl board_init_r

    6、去掉-pie选项

     vi arch/arm/config.mk 
    注释掉://LDFLAGS_u-boot += -pie

    7、修改连接脚本

    vi arch/arm/cpu/u-boot.lds 
    将:
            .text :
            {
                    __image_copy_start = .;
                    CPUDIR/start.o (.text)
                    *(.text)
            }
    修改为:
            .text :
            {
                    __image_copy_start = .;
                    CPUDIR/start.o (.text)
                    board/samsung/smdk2440/libsmdk2440.o (.text)
                    *(.text)
            }



    文章参照:http://liu1227787871.blog.163.com/blog/static/205363197201271103621960/

    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    【Selenium IDE】下载安装Chrome和Firefox插件IDE ide了解就行 不是重点 重点是写脚本
    调用接口时,生产环境,路径加斜杠“/”和不加的区别
    WPF 踩坑笔记12 DataGrid触发选中行事件
    WPF 踩坑笔记11 线程取消
    WPF 踩坑笔记10 ListBox异步动态加载
    WPF 踩坑笔记9 直接打印
    思维的体操
    【洛谷 P4213】 【模板】杜教筛(Sum)
    【洛谷 P2257】 YY的GCD(莫比乌斯反演)
    【洛谷 P4980】 【模板】Pólya 定理
  • 原文地址:https://www.cnblogs.com/otaku-lip/p/4764992.html
Copyright © 2020-2023  润新知