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
Ram start: 0x8200e000
NK
physfirst 80200000
physlast
ulRAMFree 8200e000
Fatal error hit, exiting...
Table of contents
Writing ROM signature and TOC pointer at 80200040
Kernel data copy section
ROM Header
First DLL Address:
Last DLL Address:
Physical Start Address:
Physical End Address:
Start RAM:
Start of free RAM:
End of RAM:
Number of Modules:
Number of Copy Sections: 2
Copy Section Offset:
Kernel Flags:
FileSys 4K Chunks/Mbyte: 48 <2Mbyte
>6Mbyte
CPU Type:
Miscellaneous Flags:
Extensions Pointer:
Total ROM size:
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
;
; Common RAM areas
CONFIG
IF IMGPROFILER
ELSE
ENDIF
;
; ROMFLAGS is a bitmask of options for the kernel
;
;
;
;
IF IMGTRUSTROMONLY
ELSE
ENDIF
FSRAMPERCENT=0x30303030
可以看到
和
看一下出错信息,ROM总共是多大。
Total ROM size:
这个大概是33M左右的大小,超过了设置的ROMSIZE规定的大小,
同时,82356260=80200000(ROMSTART)
因此,现在问题来了,有两个步骤。
1、把ROMSIZE的大小放大。
2、根据ROMSIZE的大小重新调整RAM的起始地址
我的调整结果如下:
view plaincopy to clipboardprint?
MEMORY
;
;
;
; Common RAM areas
CONFIG
IF IMGPROFILER
ELSE
ENDIF
;
; ROMFLAGS is a bitmask of options for the kernel
;
;
;
;
IF IMGTRUSTROMONLY
ELSE
ENDIF
FSRAMPERCENT=0x30303030
当然解决这个问题的方法还有其他方法
导致这个错误的原因是NK.bin的实际大小超过了config.bib文件中定义的大小。
有两个方法可以解决这个问题。
方法一:删除一些不必要的组件,然后重新Sysgen
方法二:修改config.bib文件
下面是我的config.bib文件的一段:
view plaincopy to clipboardprint?
NK
RAM
.
.
ROMSTART=8C200000
ROMWIDTH=32
ROMSIZE=01c00000
.
这里定义的NK的大小是01C00000,也就是28M。
而实际上我现在的NK已经达到了30,733,179,也就是29.3M。
这就是导致问题的主要原因。
解决方法:
首先把01C00000改成01E00000(30M)
然后把8DE00000改成8E100000(+2M)
最后把ROMSIZE=01c00000改成ROMSIZE=01E00000
重新Sysgen
(这里面如果NK超过32M,Build Options中需要勾选上
“Run-Time Image Can be Larger than 32 MB”)