系统NK下载到NANDFLASH中是否需要解压缩???
请问各位大仙:
我把40M的NK下载到NANDFLASH中,在NANDFLASH存储NK的空间是不是也是40M,还是需要比40M更大的空间?
也就是想说40M的NK在NANDFLASH中是不是需要解压缩,需要占到多少空间?
谢谢各位大仙的指点,怪我没说说清楚。抱歉!!!
我说的是40M的NK.bin,如果NK.bin会解压,那么40M的NK.bin会解压到多大呢?存储40M的NK.bin的NANDFLASH需要多大呢?
应该是在内存中解压缩的吧,所以40M应该就可以了吧。
引用: 引用 2 楼 veabol 的回复:
如果你是下载NK.bin,BIN在EBOOT阶段会自动解压缩,然后再烧录到FLASH里边,所以如果BIN文件是40M的话所需要的FLASH空间要超过这个数字。
这个应该是正解了..
BIN文件是在EBOOT解压,但是标准的BSP不是从FLASH中读取数据后再解压,而是通过USB或者以太网下载BIN文件到内存后在内存中解压然后再烧录到FLASH中去,以后每次启动都是从FLASH中读取解压后的文件,所以如果BIN是40M,常规作法的话FLASH 40M是肯定不够的。
因为BIN文件只是在下载过程中使用,而实际在FLASH中存储的是解压后的文件。
详细的可以结合EBOOT及WINCE源文件的BLCOMMON.C分析了解。
引用: 引用 6 楼 yyxuan 的回复:
大家的意思是肯定会解压,也就是40M的NK存到NANDFLASH中需要的空间肯定是比40M更大的?
BIN文件需要解压,NB0文件不需要解压。
谢谢给位的指点,怪我没说说清楚。抱歉!!!
我说的是40M的NK.bin,如果NK.bin会解压,那么40M的NK.bin会解压到多大呢?存储40M的NK.bin的NANDFLASH需要多大呢?
40M的NK,也太大了点吧。。
把字体压一压,或许小点!!!1
引用: 引用 14 楼 veabol 的回复:
你看下NK.BIN文件的偏移地址为0xb的四字节数据,比如28 05 B0 01,那么解压后的数据大小大概就是0x1B00528字节
下边的是EBOOT.BIN的数据,解压后的大小是0x72088字节。
00000000? 42 30 30 30 46 46 0A 00? 80 03 80 88 20 07 00 00? B000FF..?.??...
00000010? 80 03 80 04 00 00 00 E2? 01 00 00 9B 5C 01 EA 40? ?.?....?..沑.闌
00000020? 80 03 80 08 00 00 00 F1? 02 00 00 45 43 45 43 F0? ?.?....?..ECEC?
00000030? 67 0A 80 48 80 03 80 04? 00 00 00 DD 01 00 00 F0? g.?H?.?....?..
我一个38.183M的NK.bin
用软件打开后查看
00000000 42 30 30 30 46 46 0A 00 00 20 80 A4 04 5B 02 00 B000FF..?.??...
按照兄台所讲就应该是025B04A4的大小了?
0x025B04A4
= 39519396
= 1024*38593
= 1024*1024*37.6886
这样的话我解压后的系统是37.6886M,比原来还小了。
望仁兄指点一下
你详细看一下BIN文件的解析过程吧,里边会分析解压后的长度。
另外,你多预留出来一些就行了,不会是硬件资源连OS的几M都省不出来吧?
在编译的时候有几个选项,默认是中等压缩,你可以更改为最大压缩,
但是启动速度会有影响
引用: 引用 11 楼 wolfmvp 的回复:
NK有两种格式,其中NK.bin文件是需要解压缩的,NK.nb0不需要解压缩…它们二者的区别如下:
1、BIN: Microsoft Windows CE binary image data format(.bin)文件格式中包含若干个独立的纪录(section),需要分别加载到ram中执行。.bin文件格式可以使得映像尺寸最小,加载时间短,但需要Boot loader给于解释加载才能运行
2.NB0: .nb0文件就是可执行映像的原始Flash映像,nb0文件的尺寸要比bin大,但是可以直接运行。
如果40M的NK.bin下载到开发板中,那它占用的空间肯定要比40M大一些,因为它需要解压为NK.nb0文件才能被使用…
学习了!!
引用: 引用 14 楼 veabol 的回复:
你看下NK.BIN文件的偏移地址为0xb的四字节数据,比如28 05 B0 01,那么解压后的数据大小大概就是0x1B00528字节
下边的是EBOOT.BIN的数据,解压后的大小是0x72088字节。
00000000? 42 30 30 30 46 46 0A 00? 80 03 8088 20 07 00 00? B000FF..?.??...
00000010? 80 03 80 04 00 00 00 E2? 01 00 00 9B 5C 01 EA 40? ?.?....?..沑.闌
00000020? 80 03 80 08 00 00 00 F1? 02 00 00 45 43 45 43 F0? ?.?....?..ECEC?
00000030? 67 0A 80 48 80 03 80 04? 00 00 00 DD 01 00 00 F0? g.?H?.?....?..
这个还是第一次学习
同一次编译中,NK.nb0的大小是不是就是NK.bin解压之后的大小???
NK.NB0的大小是固定的,有效数据不够时后边会补0,NK.BIN是根据实际的有效数据来决定吧,会比NK.NB0小一些(前提是没有NK.NB1..)。
引用: 引用 25 楼 veabol 的回复:
NK.NB0的大小是固定的,有效数据不够时后边会补0,NK.BIN是根据实际的有效数据来决定吧,会比NK.NB0小一些(前提是没有NK.NB1..)。
谢谢veabol一直的回答!!!
如果你是下载NK.bin,BIN在EBOOT阶段会自动解压缩,然后再烧录到FLASH里边,所以如果BIN文件是40M的话所需要的FLASH空间要超过这个数字。
引用: 引用 1 楼 lbqhope 的回复:
应该是在内存中解压缩的吧,所以40M应该就可以了吧。
个人也觉得 是在执行EBOOT最后的过程实现,把NK加载到SDRAM或DDR中,进行解压,所以40M就够吧。
仅个人观点,期待大牛详细答复,我也学习下。