Error: Ram start overlaps rom binary 解决方法

Error: Ram start overlaps rom binary

出错内容如下:

view plaincopy to clipboardprint?
Processing NK  
  
Writing D:\WINCE600\OSDesigns\Mini2440-with-QQ\Mini2440-with-  
  
QQ\RelDir\Mini2440_ARMV4I_Release\NK.bin  
Error: Ram start overlaps rom binary  
Rom end  : 0x82356260  
Ram start: 0x8200e000  
NK  
physfirst 80200000  
physlast  82356260  
ulRAMFree 8200e000  
Fatal error hit, exiting...  
Table of contents  82353768  00002af8     11000)  
Writing ROM signature and TOC pointer at 80200040  
Kernel data copy section  807bee7c  00000020        32)  
ROM Header                82353714  00000054        84)  
First DLL Address:       4001c001  
Last DLL Address:        416dc0b1  
Physical Start Address:  80200000  
Physical End Address:    82356260  
Start RAM:               82000000  
Start of free RAM:       8200e000  
End of RAM:              83e00000  
Number of Modules:       230  
Number of Copy Sections: 2  
Copy Section Offset:     807bee7c  
Kernel Flags:            00000002  
FileSys 4K Chunks/Mbyte: 48 <2Mbyte  48 2-4Mbyte  0 4-6Mbyte   
  
>6Mbyte  
CPU Type:                    01c2h  
Miscellaneous Flags:         0002h  
Extensions Pointer:      80201570  
Total ROM size:          02156260 (  34955872)  
makeimg: FATAL ERROR: Command returned non-zero exit code 1 (dec).  
makeimg: FATAL ERROR: Command returned non-zero exit code 1 (dec).  
Mini2440-with-QQ - 4 error(s), 10 warning(s)  
========== 生成: 0 成功或最新,1 失败,0 被跳过 ==========  
仔细看了一下错误,找到了

Error: Ram start overlaps rom binary

Ram的空间与ROM的空间重叠了。

在5.0的时候Ram与ROM的大小设置在config.bib文件里面的。

但是,我在vs2005的工程里面却没找到,害到我直接去BSP目录底下找才找到。

(如果网友知道在vs2005中如何找到config.bib麻烦告知一下,PB5.0可以直接在项目里面找到的)

打开config.bib文件,发现内容如下

view plaincopy to clipboardprint?
MEMORY  
    NK      80200000  01e00000  RAMIMAGE   ;01e00000  30M  
    RAM     82000000  01e00000  RAM     
   FLASH   92000000  00100000  RESERVED  
  
; Common RAM areas  
    AUD_DMA             80002000  00000800  RESERVED   
    SDIO_DMA            80010000  00010000  RESERVED  
    ARGS                80020800  00000800  RESERVED  
    DBGSER_DMA          80022000  00002000  RESERVED  
    SER_DMA             80024000  00002000  RESERVED  
    IR_DMA              80026000  00002000  RESERVED  
    SLEEP               80028000  00002000   RESERVED  
    EDBG                80030000  00020000  RESERVED  
    DISPLAY             80080000  00180000  RESERVED      
  
CONFIG  
    COMPRESSION=ON  
    KERNELFIXUPS=ON  
  
IF IMGPROFILER     
    PROFILE=ON  
ELSE  
    PROFILE=OFF  
ENDIF  
  
 
; ROMFLAGS is a bitmask of options for the kernel  
  ROMFLAGS    0x0001      Disallow Paging  
  ROMFLAGS    0x0002      Not all KMode  
  ROMFLAGS    0x0010      Trust Module only  
 
IF IMGTRUSTROMONLY  
    IF IMGNOTALLKMODE  
       ROMFLAGS=12  
    ELSE  
       ROMFLAGS=10  
    ENDIF  
ELSE  
    IF IMGNOTALLKMODE  
       ROMFLAGS=02  
    ELSE  
       ROMFLAGS=00  
    ENDIF  
ENDIF  
  
    ROMSTART=80200000  
    ROMWIDTH=32  
    ROMSIZE=01e00000         ;01e00000  30M  
      
FSRAMPERCENT=0x30303030  
 
可以看到

     NK      80200000  01e00000  RAMIMAGE   ;01e00000  30M(注释是本人加上去的)
    RAM     82000000  01e00000  RAM  

  ROMSTART=80200000
  ROMWIDTH=32
  ROMSIZE=01e00000         ;01e00000  30M(注释是本人加上去的)

看一下出错信息,ROM总共是多大。

Total ROM size:          02156260 (  34955872)

这个大概是33M左右的大小,超过了设置的ROMSIZE规定的大小,

同时,82356260=80200000(ROMSTART)  +02156260 (ROMSIZE),82356260明显超过了RAM的起始地址82000000。

因此,现在问题来了,有两个步骤。

1、把ROMSIZE的大小放大。

2、根据ROMSIZE的大小重新调整RAM的起始地址

我的调整结果如下:

view plaincopy to clipboardprint?
MEMORY  
   NK      80200000  01e00000  RAMIMAGE  
   RAM     82000000  01e00000  RAM  
    NK      80200000  02300000  RAMIMAGE    ;35M  
    RAM     82500000  01e00000  RAM  
   FLASH   92000000  00100000  RESERVED  
  
; Common RAM areas  
    AUD_DMA             80002000  00000800  RESERVED   
    SDIO_DMA            80010000  00010000  RESERVED  
    ARGS                80020800  00000800  RESERVED  
    DBGSER_DMA          80022000  00002000  RESERVED  
    SER_DMA             80024000  00002000  RESERVED  
    IR_DMA              80026000  00002000  RESERVED  
    SLEEP               80028000  00002000   RESERVED  
    EDBG                80030000  00020000  RESERVED  
    DISPLAY             80080000  00180000  RESERVED      
  
CONFIG  
    COMPRESSION=ON  
    KERNELFIXUPS=ON  
  
IF IMGPROFILER     
    PROFILE=ON  
ELSE  
    PROFILE=OFF  
ENDIF  
  
 
; ROMFLAGS is a bitmask of options for the kernel  
  ROMFLAGS    0x0001      Disallow Paging  
  ROMFLAGS    0x0002      Not all KMode  
  ROMFLAGS    0x0010      Trust Module only  
 
IF IMGTRUSTROMONLY  
    IF IMGNOTALLKMODE  
       ROMFLAGS=12  
    ELSE  
       ROMFLAGS=10  
    ENDIF  
ELSE  
    IF IMGNOTALLKMODE  
       ROMFLAGS=02  
    ELSE  
       ROMFLAGS=00  
    ENDIF  
ENDIF  
  
    ROMSTART=80200000  
    ROMWIDTH=32  
    ;ROMSIZE=01e00000  
    ROMSIZE=2300000 ;35M  
      
FSRAMPERCENT=0x30303030  
 我将ROMSIZE设置成35M的大小。

当然解决这个问题的方法还有其他方法

导致这个错误的原因是NK.bin的实际大小超过了config.bib文件中定义的大小。

有两个方法可以解决这个问题。

方法一:删除一些不必要的组件,然后重新Sysgen

方法二:修改config.bib文件

 

下面是我的config.bib文件的一段:

view plaincopy to clipboardprint?
NK          8C200000  01C00000  RAMIMAGE  
RAM       8DE00000  02200000  RAM  
 
 
ROMSTART=8C200000     
ROMWIDTH=32  
ROMSIZE=01c00000  
 
 
这里定义的NK的大小是01C00000,也就是28M。

而实际上我现在的NK已经达到了30,733,179,也就是29.3M。

这就是导致问题的主要原因。

 

解决方法:

首先把01C00000改成01E00000(30M)

然后把8DE00000改成8E100000(+2M)

    把02200000改成02000000(-2M)

最后把ROMSIZE=01c00000改成ROMSIZE=01E00000

重新Sysgen

(这里面如果NK超过32M,Build Options中需要勾选上

“Run-Time Image Can be Larger than 32 MB”)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值