Error: Ram start overlaps rom binary

 

感觉这几天编译bsp,所有的问题都被我遇到了,今天的问题如下:

 

Error: Ram start overlaps rom binary

出错内容如下:

 

  1. Processing NK  
  2.   
  3. Writing D:/WINCE600/OSDesigns/Mini2440-with-QQ/Mini2440-with-  
  4.   
  5. QQ/RelDir/Mini2440_ARMV4I_Release/NK.bin  
  6. Error: Ram start overlaps rom binary  
  7. Rom end  : 0x82356260  
  8. Ram start: 0x8200e000  
  9. NK  
  10. physfirst 80200000  
  11. physlast  82356260  
  12. ulRAMFree 8200e000  
  13. Fatal error hit, exiting...  
  14. Table of contents  82353768  00002af8  (     11000)  
  15. Writing ROM signature and TOC pointer at 80200040  
  16. Kernel data copy section  807bee7c  00000020  (        32)  
  17. ROM Header                82353714  00000054  (        84)  
  18. First DLL Address:       4001c001  
  19. Last DLL Address:        416dc0b1  
  20. Physical Start Address:  80200000  
  21. Physical End Address:    82356260  
  22. Start RAM:               82000000  
  23. Start of free RAM:       8200e000  
  24. End of RAM:              83e00000  
  25. Number of Modules:       230  
  26. Number of Copy Sections: 2  
  27. Copy Section Offset:     807bee7c  
  28. Kernel Flags:            00000002  
  29. FileSys 4K Chunks/Mbyte: 48 <2Mbyte  48 2-4Mbyte  0 4-6Mbyte  0   
  30.   
  31. >6Mbyte  
  32. CPU Type:                    01c2h  
  33. Miscellaneous Flags:         0002h  
  34. Extensions Pointer:      80201570  
  35. Total ROM size:          02156260 (  34955872)  
  36. makeimg: FATAL ERROR: Command returned non-zero exit code 1 (dec).  
  37. makeimg: FATAL ERROR: Command returned non-zero exit code 1 (dec).  
  38. Mini2440-with-QQ - 4 error(s), 10 warning(s)  
  39. ========== 生成: 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文件,发现内容如下

 

  1. MEMORY  
  2.     NK      80200000  01e00000  RAMIMAGE   ;01e00000  30M  
  3.     RAM     82000000  01e00000  RAM     
  4. ;    FLASH   92000000  00100000  RESERVED  
  5.   
  6. ; Common RAM areas  
  7.     AUD_DMA             80002000  00000800  RESERVED   
  8.     SDIO_DMA            80010000  00010000  RESERVED  
  9.     ARGS                80020800  00000800  RESERVED  
  10.     DBGSER_DMA          80022000  00002000  RESERVED  
  11.     SER_DMA             80024000  00002000  RESERVED  
  12.     IR_DMA              80026000  00002000  RESERVED  
  13.     SLEEP               80028000  00002000   RESERVED  
  14.     EDBG                80030000  00020000  RESERVED  
  15.     DISPLAY             80080000  00180000  RESERVED      
  16.   
  17. CONFIG  
  18.     COMPRESSION=ON  
  19.     KERNELFIXUPS=ON  
  20.   
  21. IF IMGPROFILER     
  22.     PROFILE=ON  
  23. ELSE  
  24.     PROFILE=OFF  
  25. ENDIF  
  26.   
  27. ;  
  28. ; ROMFLAGS is a bitmask of options for the kernel  
  29. ;   ROMFLAGS    0x0001      Disallow Paging  
  30. ;   ROMFLAGS    0x0002      Not all KMode  
  31. ;   ROMFLAGS    0x0010      Trust Module only  
  32. ;  
  33. IF IMGTRUSTROMONLY  
  34.     IF IMGNOTALLKMODE  
  35.        ROMFLAGS=12  
  36.     ELSE  
  37.        ROMFLAGS=10  
  38.     ENDIF  
  39. ELSE  
  40.     IF IMGNOTALLKMODE  
  41.        ROMFLAGS=02  
  42.     ELSE  
  43.        ROMFLAGS=00  
  44.     ENDIF  
  45. ENDIF  
  46.   
  47.     ROMSTART=80200000  
  48.     ROMWIDTH=32  
  49.     ROMSIZE=01e00000         ;01e00000  30M  
  50.       
  51. 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的起始地址

我的调整结果如下:

 

  1. MEMORY  
  2. ;    NK      80200000  01e00000  RAMIMAGE  
  3. ;    RAM     82000000  01e00000  RAM  
  4.     NK      80200000  02300000  RAMIMAGE    ;35M  
  5.     RAM     82500000  01e00000  RAM  
  6. ;    FLASH   92000000  00100000  RESERVED  
  7.   
  8. ; Common RAM areas  
  9.     AUD_DMA             80002000  00000800  RESERVED   
  10.     SDIO_DMA            80010000  00010000  RESERVED  
  11.     ARGS                80020800  00000800  RESERVED  
  12.     DBGSER_DMA          80022000  00002000  RESERVED  
  13.     SER_DMA             80024000  00002000  RESERVED  
  14.     IR_DMA              80026000  00002000  RESERVED  
  15.     SLEEP               80028000  00002000   RESERVED  
  16.     EDBG                80030000  00020000  RESERVED  
  17.     DISPLAY             80080000  00180000  RESERVED      
  18.   
  19. CONFIG  
  20.     COMPRESSION=ON  
  21.     KERNELFIXUPS=ON  
  22.   
  23. IF IMGPROFILER     
  24.     PROFILE=ON  
  25. ELSE  
  26.     PROFILE=OFF  
  27. ENDIF  
  28.   
  29. ;  
  30. ; ROMFLAGS is a bitmask of options for the kernel  
  31. ;   ROMFLAGS    0x0001      Disallow Paging  
  32. ;   ROMFLAGS    0x0002      Not all KMode  
  33. ;   ROMFLAGS    0x0010      Trust Module only  
  34. ;  
  35. IF IMGTRUSTROMONLY  
  36.     IF IMGNOTALLKMODE  
  37.        ROMFLAGS=12  
  38.     ELSE  
  39.        ROMFLAGS=10  
  40.     ENDIF  
  41. ELSE  
  42.     IF IMGNOTALLKMODE  
  43.        ROMFLAGS=02  
  44.     ELSE  
  45.        ROMFLAGS=00  
  46.     ENDIF  
  47. ENDIF  
  48.   
  49.     ROMSTART=80200000  
  50.     ROMWIDTH=32  
  51.     ;ROMSIZE=01e00000  
  52.     ROMSIZE=2300000 ;35M  
  53.       
  54. FSRAMPERCENT=0x30303030  

 

 我将ROMSIZE设置成35M的大小。

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

 

 

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

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

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

方法二:修改config.bib文件

 

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

 

  1. NK          8C200000  01C00000  RAMIMAGE  
  2. RAM       8DE00000  02200000  RAM  
  3. .  
  4. .  
  5. ROMSTART=8C200000     
  6. ROMWIDTH=32  
  7. ROMSIZE=01c00000  
  8. .  
 

 

这里定义的NK的大小是01C00000,也就是28M

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

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

 

解决方法:

首先把01C00000改成01E0000030M

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

    02200000改成02000000-2M

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

重新Sysgen

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

Run-Time Image Can be Larger than 32 MB)

作者:朱铭雷

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值