wince 5.0如何配置config.bib和Loader.h来调整nk的大小

时间:2022-02-14 19:21:52
  
  NK体积变大时,使用dnw下载时,出现下面的错误:
NK Map Addr = 0xa1383f28
ERROR: Checksum failure (expected=0xB8D48478  computed=0xBE64CDAA)
****** Checksum failure on record 161, ABORT!!! ******
   现在NK的体积约为40M,修改了config.bib和Loader.h中关于nk的内存的宏,但是还是出现了Checksum的错误,我具体修改如下:

configure.bib:
;
; Copyright (c) Microsoft Corporation.  All rights reserved.
;
;
; Use of this source code is subject to the terms of the Microsoft end-user
;
; Copyright (c) Microsoft Corporation.  All rights reserved.
;
;
; Use of this source code is subject to the terms of the Microsoft end-user
; license agreement (EULA) under which you licensed this SOFTWARE PRODUCT.
; If you did not accept the terms of the EULA, you are not authorized to use
; this source code. For a copy of the EULA, please see the LICENSE.RTF on your
; install media.
;

MEMORY
IF IMGMULTIXIP !
IF WINCEDEBUG = retail

     NK      80200000  02800000  RAMIMAGE
     RAM     82A00000  01600000  RAM       ; For 16Bpp LCD


ELSE
    NK      80200000  02800000  RAMIMAGE
    RAM     82A00000  01500000  RAM
ENDIF    
    FLASH   92000000  00100000  RESERVED
ENDIF

IF IMGMULTIXIP
#define    CHAIN_ADDRESS    81D00000
#define    CHAIN_LENGTH    00001000

    XIPKERNEL    80200000    00300000    RAMIMAGE
    NK        80500000    01900000    NANDIMAGE
    CHAIN        $(CHAIN_ADDRESS)    $(CHAIN_LENGTH)    RESERVED
    
    RAM        80500000    03B00000    RAM
    
    FLASH               92000000  00100000  RESERVED
ENDIF


; Common RAM areas
    ARGS                80020000  00000800  RESERVED
    SLEEP               80028000  00002000  RESERVED
    EDBG                80030000  00020000  RESERVED
    DISPLAY             80100000  00100000  RESERVED    
;    TEST_FRAMEBUFFER    83C00000  00400000  RESERVED   ; For 24Bpp LCD test
;    CF_DMA_BUF        83FE0000  00020000  RESERVED

CONFIG
    AUTOSIZE=ON
    COMPRESSION=ON
    KERNELFIXUPS=ON
    FSRAMPERCENT=0x40404040

IF IMGMULTIXIP
    RAM_AUTOSIZE=OFF
    ROM_AUTOSIZE=OFF    
    DLLADDR_AUTOSIZE=ON
    
    XIPSCHAIN=$(CHAIN_ADDRESS)
    
    AUTOSIZE_ROMGAP=10000
    AUTOSIZE_DLLADDRGAP=0
    AUTOSIZE_DLLDATAADDRGAP=0
    AUTOSIZE_DLLCODEADDRGAP=0
    
    ROMFLAGS=0

ENDIF 

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
    ROMFLAGS=10
ELSE
    ROMFLAGS=00
ENDIF

    ROMSTART = 80200000
    ROMWIDTH = 32

IF WINCEDEBUG = retail    
    ROMSIZE = 02300000
ELSE    
    ROMSIZE = 02800000
ENDIF

Loader.h:
   在Loader.h中修改了两个宏:
#define ROM_RAMIMAGE_START                  0x80000000
#define ROM_RAMIMAGE_SIZE                   0x02800000

对下面这两个宏,对它的作用不明白,以及它和ROM_RAMIMAGE_START、ROM_RAMIMAGE_SIZE的区别
#define OS_RAM_IMAGE_BASE                0x80040000
#define OS_RAM_IMAGE_SIZE                        (0x03C00000)


有哪位大侠修改了config.bib和Loader.h还适用新的nk大小,请指点一下,谢谢啦



9 个解决方案

#1


楼主做了这些修改之后有更新bootloader吗?

#2


我觉的你的内核体积过大,有两种情况,一是你的内核内容本来就大,比如组件多或者debug模式下。在这种情况下,你再改配置文件也不启作用。因为AUTOSIZE=ON,会自动调整大小。二是,你人为的把配置文件调大,在这种情况下,你再修改配置文件才可以。不知道分析的正确与否,仅供参考。

#3


更改后也有更新eboot,但是问题依旧。
但是我发现一个问题,编译出来的nk.bin比nk.nb0还大,有点怪,我的ap也只有17M,如果不加ap,直接编译nk,它大小为18M的样子,打包到nk,采用的是SH,是有压缩的,按道理编译进去不应该出现这么大的nk.bin

#4


楼主是通过SD卡,USB还是什么方式来更新NK.bin的?

#5


引用 3 楼 zhujm320 的回复:
更改后也有更新eboot,但是问题依旧。
但是我发现一个问题,编译出来的nk.bin比nk.nb0还大,有点怪,我的ap也只有17M,如果不加ap,直接编译nk,它大小为18M的样子,打包到nk,采用的是SH,是有压缩的,按道理编译进去不应该出现这么大的nk.bin

为什么楼主要把AP(是指你的shell吧?)包含到NK.bin中呢?还有就是你的NK比40M小的时候是可以正常更新的吧?

#6


采用的更新方式为通过dnw进行更新,nk的大小在35M以下是不存在这个问题的
采用ap和nk.bin打包是为了更新方便而做出的选择,ap和nk打包在一起,在更新的时候可以一键更新固件和ap,如果ap和nk分离的话,更新固件和ap是要分别进行更新的。一般ap当独存放是不会有这个问题的

#7


引用 6 楼 zhujm320 的回复:
采用的更新方式为通过dnw进行更新,nk的大小在35M以下是不存在这个问题的
采用ap和nk.bin打包是为了更新方便而做出的选择,ap和nk打包在一起,在更新的时候可以一键更新固件和ap,如果ap和nk分离的话,更新固件和ap是要分别进行更新的。一般ap当独存放是不会有这个问题的

我们的AP和NK是分别固化的,这样可以加快开机的启动速度,我也是通过DNW+USB来更新的,有空试一下大于35M的NK.

#8


我想问一下,你的ap也存放在binfs区域吗,还是说另外开放了一个resversed区域专门用来存放ap?一般将nk和ap分别存放是可以加快开机速度。我这边编译的这个nk,nk.bin的大小竟然比nk.nb0还大,非常不解。一般nk.bin是nk.nb0的压缩版,比nk.nb0小才对

#9


引用 8 楼 zhujm320 的回复:
我想问一下,你的ap也存放在binfs区域吗,还是说另外开放了一个resversed区域专门用来存放ap?一般将nk和ap分别存放是可以加快开机速度。我这边编译的这个nk,nk.bin的大小竟然比nk.nb0还大,非常不解。一般nk.bin是nk.nb0的压缩版,比nk.nb0小才对

NK是放在BINFS区的,AP是放在FAT区的,我没有编译过NK.bin比NK.nb0还大的情况,有空试一下。

#1


楼主做了这些修改之后有更新bootloader吗?

#2


我觉的你的内核体积过大,有两种情况,一是你的内核内容本来就大,比如组件多或者debug模式下。在这种情况下,你再改配置文件也不启作用。因为AUTOSIZE=ON,会自动调整大小。二是,你人为的把配置文件调大,在这种情况下,你再修改配置文件才可以。不知道分析的正确与否,仅供参考。

#3


更改后也有更新eboot,但是问题依旧。
但是我发现一个问题,编译出来的nk.bin比nk.nb0还大,有点怪,我的ap也只有17M,如果不加ap,直接编译nk,它大小为18M的样子,打包到nk,采用的是SH,是有压缩的,按道理编译进去不应该出现这么大的nk.bin

#4


楼主是通过SD卡,USB还是什么方式来更新NK.bin的?

#5


引用 3 楼 zhujm320 的回复:
更改后也有更新eboot,但是问题依旧。
但是我发现一个问题,编译出来的nk.bin比nk.nb0还大,有点怪,我的ap也只有17M,如果不加ap,直接编译nk,它大小为18M的样子,打包到nk,采用的是SH,是有压缩的,按道理编译进去不应该出现这么大的nk.bin

为什么楼主要把AP(是指你的shell吧?)包含到NK.bin中呢?还有就是你的NK比40M小的时候是可以正常更新的吧?

#6


采用的更新方式为通过dnw进行更新,nk的大小在35M以下是不存在这个问题的
采用ap和nk.bin打包是为了更新方便而做出的选择,ap和nk打包在一起,在更新的时候可以一键更新固件和ap,如果ap和nk分离的话,更新固件和ap是要分别进行更新的。一般ap当独存放是不会有这个问题的

#7


引用 6 楼 zhujm320 的回复:
采用的更新方式为通过dnw进行更新,nk的大小在35M以下是不存在这个问题的
采用ap和nk.bin打包是为了更新方便而做出的选择,ap和nk打包在一起,在更新的时候可以一键更新固件和ap,如果ap和nk分离的话,更新固件和ap是要分别进行更新的。一般ap当独存放是不会有这个问题的

我们的AP和NK是分别固化的,这样可以加快开机的启动速度,我也是通过DNW+USB来更新的,有空试一下大于35M的NK.

#8


我想问一下,你的ap也存放在binfs区域吗,还是说另外开放了一个resversed区域专门用来存放ap?一般将nk和ap分别存放是可以加快开机速度。我这边编译的这个nk,nk.bin的大小竟然比nk.nb0还大,非常不解。一般nk.bin是nk.nb0的压缩版,比nk.nb0小才对

#9


引用 8 楼 zhujm320 的回复:
我想问一下,你的ap也存放在binfs区域吗,还是说另外开放了一个resversed区域专门用来存放ap?一般将nk和ap分别存放是可以加快开机速度。我这边编译的这个nk,nk.bin的大小竟然比nk.nb0还大,非常不解。一般nk.bin是nk.nb0的压缩版,比nk.nb0小才对

NK是放在BINFS区的,AP是放在FAT区的,我没有编译过NK.bin比NK.nb0还大的情况,有空试一下。