您现在的位置: 爱51代码网 >> 范文 >> 文章正文
uboot大于256K不能正常启动怎么办

uboot大于256K不能正常启动怎么办

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

修改NAND FLASH MTD分区表:

C/C++ code?56 /* 57 #define MTDPARTS_DEFAULT "mtdparts=nandflash0:2m@0(kernel)," \ 58                             "8m(jffs2)," \ 59                             "-(yaffs)" 60 */61 #define MTDPARTS_DEFAULT "mtdparts=nandflash0:" \  62                           "256k@0(boot)," \ 63                           "64k(env)," \ 64                           "2m(kernel)," \ 65                           "-(yaffs)"

但是在OK6410中没有能够找到相关的代码,以至于无法使得较大体积的uboot正常启动,在/cpu/s3c24xx中找到如下代码,大概内容是将nand flash中的内容拷贝至ram中:

C/C++ code?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无法启动?

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

  • 上一篇文章:

  • 下一篇文章: 没有了
  • 最新文章 热点文章 相关文章
    GIS用百度行政区域的经纬度直接画
    不小心卸载了.net 4 extend,vs2
    C#byte【】里的数转换成string时
    C#的session取不到值
    java如何判断一个字符串里的数字
    随机找出24个不一样的字,在把一
    java怎么实现html转为pdf
    lotus数据列表文档个数如何实时统
    lotus代理中LS如何将字符串保存到
    在lotus BS系统里怎样方便实现统
    不小心卸载了.net 4 extend,vs2
    C#的session取不到值
    java如何判断一个字符串里的数字
    java怎么实现html转为pdf
    undefined reference timer_crea
    linux文件/usr/lib破坏了,还原后
    Failed to open eth0
    android手机无法与eclipse或电脑
    C/C++洗牌算法源代码
    E-business suite system servic
    两个条码枪虚拟成键盘输入如
    获取sim卡信息出现异常-无法
    WinCE各个文件在NandFlash中
    WinCE各个文件在NandFlash中
    WinCE各个文件在NandFlash中
    linux驱动调用device_create
    怎样获取WINCE中所有运行的进
    单片机检测矿泉水瓶是否倒立
    keil中不同源文件中数组的引
    keil中不同源文件中数组的引
     



    设为首页 | 加入收藏 | 网站地图 | 友情链接 |