当前位置: 代码迷 >> 驱动开发 >> uboot大于256K时的启动有关问题
  详细解决方案

uboot大于256K时的启动有关问题

热度:117   发布时间:2016-04-28 10:21:15.0
uboot大于256K时的启动问题
我们在uboot下添加了比较多驱动,以至于uboot大小大于了242K,这时候uboot不能够正常启动,在mini2440中,这个问题比较好的解决,他们提供了相关代码:
(2)修改u-boot-1.1.6/include/configs/open24x0.h文件

修改NAND FLASH MTD分区表:
56 /*
57 #define MTDPARTS_DEFAULT "mtdparts=nandflash0:[email protected](kernel)," \
58                             "8m(jffs2)," \
59                             "-(yaffs)"
60 */
61 #define MTDPARTS_DEFAULT "mtdparts=nandflash0:" \ 
62                           "[email protected](boot)," \
63                           "64k(env)," \
64                           "2m(kernel)," \
65                           "-(yaffs)"


原博客地址为http://hi.baidu.com/wenes/item/dad7a1c2be509bc6984aa0dd
但是在OK6410中没有能够找到相关的代码,以至于无法使得较大体积的uboot正常启动,在/cpu/s3c24xx中找到如下代码,大概内容是将nand flash中的内容拷贝至ram中:
int copy_uboot_to_ram (void)
{


    int large_block = 0;
    int i;
    vu_char id;

    NAND_ENABLE_CE();
    NFCMD_REG=NAND_CMD_RESET;
    NF_TRANSRnB();


    NFCMD_REG = NAND_CMD_READID;
    NFADDR_REG =  0x00;

    NF_TRANSRnB();

    /* wait for a while */
    for (i=0; i<200; i++);

    int factory = NFDATA8_REG;
    id = NFDATA8_REG;

    int cellinfo=NFDATA8_REG;
    int tmp= NFDATA8_REG;

    //int childType=tmp & 0x03; //Page size
    int childType=cellinfo; //Page size

    if (id > 0x80)
    {
        large_block = 1;
    }

    if(id == 0xd5 && childType==0x94 )//K9GAG08U0D
    {
        large_block = 2;

    }
    if(id == 0xd5 && childType==0x14 )//K9GAG08U0M
    {
        large_block = 2;

    }
    if(id == 0xd5 && childType==0x84 )//K9GAG08U0E
    {
        large_block = 3;

    }
    if(id==0xd7)//K9LBG08U0D
    {
        large_block = 2;
    }
    if(factory==0x2c && id == 0x48) //MT29F16G08ABACAWP
    {
        large_block = 2;

    }if(factory==0x2c && id == 0x38) //MT29F8G08ABABAWP
    {
        large_block = 2;

    }


    /* read NAND Block.
     * 128KB ->240KB because of U-Boot size increase. by scsuh
     * So, read 0x3c000 bytes not 0x20000(128KB).
     */
    return nandll_read_blocks(CFG_PHY_UBOOT_BASE, 0x3c000, large_block);
}

我考虑是不是代码太大,而block最多只有2个block,是不是uboot体积大于2个block,而超出的部分没有拷贝至内存之中而导致的uboot无法启动?
uboot Flash

------解决方案--------------------
你可以把需要做的事情放到另外一个单独的bin里面,这个Bin放到SD-CARD, u-boot去load文件系统里面的bin到RAM,然后跳转到内存,最后在回到u-boot即可