这个确实可以做到,我尝试了一种做法,在生成NK.BIN的时候,只打包必须的内核部分,大概可以最小可以裁减到2M以内,然后需要把NANDFLASH作为根目录挂载,其它的程序,DLL等放到\windows目录里,而这个\windows目录是在FLASH上的,可以永久保存的,所以BOOT不到2M的NK内核,内核在加载完FLASH驱动之后,就可以直接从FLASH上的\windows目录启动剩下的应用程序和动态库了。这种做法是把剩余的应用程序和动态库拷到FLASH上的\windows目录是个问题,我测试是这样作的,先烧一个完整的NK,启动之后手动拷贝所有的应用和DLL,然后重烧一个精简的NK,这样就达到目的了,只是可生产性不好,应该会有更好的方法。
这样扣掉EBOOT和LCD FRAME的2M空间和内核的2M空间,可用于程序运行的内存是60M,实际上我在一台远峰的GPS上看到,它的程序内存是61M,又更进步了。
-------------------------
这样扣掉EBOOT和LCD FRAME的2M空间和内核的2M空间,可用于程序运行的内存是60M,实际上我在一台远峰的GPS上看到,它的程序内存是61M,又更进步了。
-------------------------
当我使用单个BIN文件,可以将NAND FLASH的FAT做为ROOT区域MOUNT上去,这样可以实现WINDOWS的目录文件不会被丢失。这样如果将那些不必须拷贝到RAM运行的MOUDLES从NK移出,然后在通过别的方法将所需要的文件拷贝到WINDOWS目录下,那样会节省RAM,但是操作不方便。
所以现在想做成一个MULTI-BIN,那样将必须的MOUDLES放在NK里面,其他的放在其他的BIN文件里面,多个BIN是生成了,但是在mount NAND FLASH的FAT区域为ROOT时,确一直不成功。并且这样会多出一个BINFS的盘,盘的文件就是没有拷贝到RAM区域的文件。
不知道是什么原因导致,希望有能指点,那个单个BIN文件时,我使用的是ram-only flie system,不知道使用多个BIN文件不是要ram & rom file system..... 正在尝试。。。。
-------------------------
如果是BINFS的话,需要在你的EBOOT里面加入一些对BINFS的操作的函数,比如如何读数据和写数据,这个在samsung的官方包里面有支持。如果要正确的启动还得在OEMINIT里面加InInitRomChain来连接各个BIN文件,才能正确启动。如果要MONUT的话,我在暂时还没有成功!等成功了在写个东西出来吧
------------------------
想使用多个BIN文件,来减少对RAM空间的占有:
当CONFIG文件
pdwXIPLoc 00000000 803FF000 FIXUPVAR
XIPKERNEL 80200000 001FF000 RAMIMAGE
CHAIN 803FF000 00001000 RESERVED
NK 80400000 01E00000 NANDIMAGE
RAM 80400000 07C00000 RAM
FLASH 92000000 00100000 RESERVED
注意:此时NK和RAM区域是有重叠的,其中XIPKERNEL是想用于COPY到RAM区域的模块,NK是是保存在FLASH区域,当用时才COPY到RAM区域的。此时能正常的编译出多个BIN,但是加载时,InitRomChain函数里面出现Invalid XIP found的错误,不知道是什么原因导致的!
然而当我CONFIG为:
pdwXIPLoc 00000000 803FF000 FIXUPVAR
XIPKERNEL 80200000 001FF000 RAMIMAGE
CHAIN 803FF000 00001000 RESERVED
NK 80400000 01E00000 NANDIMAGE
RAM 82200000 07C00000 RAM
FLASH 92000000 00100000 RESERVED
这个时候又能正常的启动!
当CONFIG文件
pdwXIPLoc 00000000 803FF000 FIXUPVAR
XIPKERNEL 80200000 001FF000 RAMIMAGE
CHAIN 803FF000 00001000 RESERVED
NK 80400000 01E00000 NANDIMAGE
RAM 80400000 07C00000 RAM
FLASH 92000000 00100000 RESERVED
注意:此时NK和RAM区域是有重叠的,其中XIPKERNEL是想用于COPY到RAM区域的模块,NK是是保存在FLASH区域,当用时才COPY到RAM区域的。此时能正常的编译出多个BIN,但是加载时,InitRomChain函数里面出现Invalid XIP found的错误,不知道是什么原因导致的!
然而当我CONFIG为:
pdwXIPLoc 00000000 803FF000 FIXUPVAR
XIPKERNEL 80200000 001FF000 RAMIMAGE
CHAIN 803FF000 00001000 RESERVED
NK 80400000 01E00000 NANDIMAGE
RAM 82200000 07C00000 RAM
FLASH 92000000 00100000 RESERVED
这个时候又能正常的启动!
-----------------------
我是用你的来改的,先用你第2组的,先跑出来,
( KERNEL放了不少…除了硬件驱动和字型外,几乎都放了)
然后再把RAM 的起点改成和NK一样,长度改一下,这样就OK啦
不过真正的问题真的来了
原本开机8秒,现在要15秒
-------------------------
( KERNEL放了不少…除了硬件驱动和字型外,几乎都放了)
然后再把RAM 的起点改成和NK一样,长度改一下,这样就OK啦
不过真正的问题真的来了
原本开机8秒,现在要15秒
-------------------------
看下你的RAMIMAGE里面有没有包含:fsdmgr.dll 还有relfsd.dll
-------------------------
都含了
现在先开启RETAILMSG观看,到底是哪些步骤拖了时间
我不求跟远峰一样2-3秒,
我只要5-6秒就可以了
-------------------------
现在先开启RETAILMSG观看,到底是哪些步骤拖了时间
我不求跟远峰一样2-3秒,
我只要5-6秒就可以了
-------------------------
助你一臂之力,XIPKERNEL可以裁减到1.2M以内。我用了MULTI BIN,加载BINFS为根目录方式,实现程序内存到60M,最多可以到60.8M,不过这种方式启动时间比较慢,把XIPKERNEL拷到内存后启动过程大概需要7,8秒钟,好像没有我之前的那种快。
MODULES
; Name Path Memory Type
; -------------- --------------------------------------------- -----------
nk.exe D:\WINCE500\PBWorkspaces\SMDK2440\RelDir\SMDK2440_ARMV4I_Release\kern.exe XIPKERNEL SH
coredll.dll D:\WINCE500\PBWorkspaces\SMDK2440\RelDir\SMDK2440_ARMV4I_Release\coredll.dll XIPKERNEL SH
filesys.exe D:\WINCE500\PBWorkspaces\SMDK2440\RelDir\SMDK2440_ARMV4I_Release\filesys.exe XIPKERNEL SH
fatfsd.dll D:\WINCE500\PBWorkspaces\SMDK2440\RelDir\SMDK2440_ARMV4I_Release\fatfsd.dll XIPKERNEL SH
diskcache.dll D:\WINCE500\PBWorkspaces\SMDK2440\RelDir\SMDK2440_ARMV4I_Release\diskcache.dll XIPKERNEL SH
fatutil.dll D:\WINCE500\PBWorkspaces\SMDK2440\RelDir\SMDK2440_ARMV4I_Release\fatutil.dll XIPKERNEL SH
binfs.dll D:\WINCE500\PBWorkspaces\SMDK2440\RelDir\SMDK2440_ARMV4I_Release\binfs.dll XIPKERNEL SH
fsdmgr.dll D:\WINCE500\PBWorkspaces\SMDK2440\RelDir\SMDK2440_ARMV4I_Release\fsdmgr.dll XIPKERNEL SH
mspart.dll D:\WINCE500\PBWorkspaces\SMDK2440\RelDir\SMDK2440_ARMV4I_Release\mspart.dll XIPKERNEL SH
ceddk.dll D:\WINCE500\PBWorkspaces\SMDK2440\RelDir\SMDK2440_ARMV4I_Release\ceddk.dll XIPKERNEL SH
smflash.dll D:\WINCE500\PBWorkspaces\SMDK2440\RelDir\SMDK2440_ARMV4I_Release\smflash.dll XIPKERNEL SH
FILES
boot.hv D:\WINCE500\PBWorkspaces\SMDK2440\RelDir\SMDK2440_ARMV4I_Release\boot.hv XIPKERNEL SH
default.hv D:\WINCE500\PBWorkspaces\SMDK2440\RelDir\SMDK2440_ARMV4I_Release\default.hv XIPKERNEL SH
user.hv D:\WINCE500\PBWorkspaces\SMDK2440\RelDir\SMDK2440_ARMV4I_Release\user.hv XIPKERNEL SH
--------------------------
----------------------
---------------------
应该保证BINFS在系统从default.hv和user.hv读取注册表前就可用,所以你要保证你的boot.hv,BINFS,FMD驱动到RAMIMAGE的region里面而不是NANDIMAGE!所以对BINFS和SMFLASH的驱动的注册表的值也应该在:
;HIVE BOOT SECTION
;END HIVE BOOT SECTION
这个设置你可以参考网站上很多资料。
----------------------
做这个完全不是为了提高启动速度,启动速度和很多有关系,自己加载的驱动多少,另外内存占用的大小也和你的驱动和模块的多少有关。 现在我的整个IMAGE达到了36M,当时候MULTI-BIN之后,最终使用的RAM也就10多M,这样怎么也省了个10M。如果真要做成那样,那就精简IMAGE吧
-----------------------
----------------------
MODULES
; Name Path Memory Type
; -------------- --------------------------------------------- -----------
nk.exe D:\WINCE500\PBWorkspaces\SMDK2440\RelDir\SMDK2440_ARMV4I_Release\kern.exe XIPKERNEL SH
coredll.dll D:\WINCE500\PBWorkspaces\SMDK2440\RelDir\SMDK2440_ARMV4I_Release\coredll.dll XIPKERNEL SH
filesys.exe D:\WINCE500\PBWorkspaces\SMDK2440\RelDir\SMDK2440_ARMV4I_Release\filesys.exe XIPKERNEL SH
fatfsd.dll D:\WINCE500\PBWorkspaces\SMDK2440\RelDir\SMDK2440_ARMV4I_Release\fatfsd.dll XIPKERNEL SH
diskcache.dll D:\WINCE500\PBWorkspaces\SMDK2440\RelDir\SMDK2440_ARMV4I_Release\diskcache.dll XIPKERNEL SH
fatutil.dll D:\WINCE500\PBWorkspaces\SMDK2440\RelDir\SMDK2440_ARMV4I_Release\fatutil.dll XIPKERNEL SH
binfs.dll D:\WINCE500\PBWorkspaces\SMDK2440\RelDir\SMDK2440_ARMV4I_Release\binfs.dll XIPKERNEL SH
fsdmgr.dll D:\WINCE500\PBWorkspaces\SMDK2440\RelDir\SMDK2440_ARMV4I_Release\fsdmgr.dll XIPKERNEL SH
mspart.dll D:\WINCE500\PBWorkspaces\SMDK2440\RelDir\SMDK2440_ARMV4I_Release\mspart.dll XIPKERNEL SH
ceddk.dll D:\WINCE500\PBWorkspaces\SMDK2440\RelDir\SMDK2440_ARMV4I_Release\ceddk.dll XIPKERNEL SH
smflash.dll D:\WINCE500\PBWorkspaces\SMDK2440\RelDir\SMDK2440_ARMV4I_Release\smflash.dll XIPKERNEL SH
FILES
boot.hv D:\WINCE500\PBWorkspaces\SMDK2440\RelDir\SMDK2440_ARMV4I_Release\boot.hv XIPKERNEL SH
default.hv D:\WINCE500\PBWorkspaces\SMDK2440\RelDir\SMDK2440_ARMV4I_Release\default.hv XIPKERNEL SH
user.hv D:\WINCE500\PBWorkspaces\SMDK2440\RelDir\SMDK2440_ARMV4I_Release\user.hv XIPKERNEL SH
--------------------------
现在修改了EBOOT,因为在MUKLTI-BIN,时生成的XIP被下载下来还是当做一个BIN文件,所以我在EBOOT里面对他做了一些处理,我把BIN文件都一个个提取出来,然后在存入FLASH,在启动时,只读取RAMIGAGE的段和CHAIN段!
----------------------
搞定,内核 1。9M!
---------------------
harktrip兄弟
搞定后发表一下做法文档啊!
我下星期也找个时间玩玩,思路按照你们的来玩
不过有点想不明白,把NK做成XIPKERNEL.nb0(内核部分)跟nk.nb0(其它镜像)
我eboot首先把XIPKERNEL.nb0拷到内存去运行,运行完了呢?怎么去加载第二部分的nk.nb0文件呢?还是要把第二部分NK.NB0拷到内存去吗?这样不是又要占用拷贝时间?
你NK.NB0部分跟RAM部分区载还有重叠吧?
-------------------
搞定后发表一下做法文档啊!
我下星期也找个时间玩玩,思路按照你们的来玩
不过有点想不明白,把NK做成XIPKERNEL.nb0(内核部分)跟nk.nb0(其它镜像)
我eboot首先把XIPKERNEL.nb0拷到内存去运行,运行完了呢?怎么去加载第二部分的nk.nb0文件呢?还是要把第二部分NK.NB0拷到内存去吗?这样不是又要占用拷贝时间?
你NK.NB0部分跟RAM部分区载还有重叠吧?
应该保证BINFS在系统从default.hv和user.hv读取注册表前就可用,所以你要保证你的boot.hv,BINFS,FMD驱动到RAMIMAGE的region里面而不是NANDIMAGE!所以对BINFS和SMFLASH的驱动的注册表的值也应该在:
;HIVE BOOT SECTION
;END HIVE BOOT SECTION
这个设置你可以参考网站上很多资料。
----------------------
一直有关注这个帖子,看你们似乎已经到此为止了,提几个问题,希望你们再接再励,看了harktrip发了贴图,知道系统跑起来占用了11432K,实际上已经用了11M之多了,前面辛辛苦苦挤那么个1~2M,这里系统基本没跑自己的应用程序就占用了11M之多。实际上最终说起来可用于自己的应用程序的内存只剩下47M多点。还有个问题,启动时间还是缩短不了。对比远峰的产品,我看到可用于程序内存是61M,系统跑起来,跑了主界面应用之后,explorer,我通过控制面板看到它占用的程序内存不到6M,光这点比我们自己作出来的节省5M之多内存,还有就是它的启动速度。所以要达到这个水平看来现在这种做法还有很大距离。
---------------------
做这个完全不是为了提高启动速度,启动速度和很多有关系,自己加载的驱动多少,另外内存占用的大小也和你的驱动和模块的多少有关。 现在我的整个IMAGE达到了36M,当时候MULTI-BIN之后,最终使用的RAM也就10多M,这样怎么也省了个10M。如果真要做成那样,那就精简IMAGE吧
-----------------------
搞到现在,我自己觉得要加强的…
1. 2440在WINCE开机后,已先占用10MB (图中11M,是因为执行了抓图软件),
但2410的板子,却只占8MB. 但因为LCD BUFFER我都是抓到1MB,可降的空间有限,
不过还是可以再试试 (我没记错的话,远峰GPS开机后占用6MB)
2.关于XIPKERNEL的大小,其实想想,降到最低时,例如0.8~1 MB,
但启动WINCE时势必会因为要读取驱动程序,而拖延到开机时间,不过我现在的2.6MB是大了点.
3.就是开机时间了, 2440的现在送电到看到桌面=7秒, 2410的为9秒.
不过监看debugmessage ,有些过程的确需要再改进,
因为ETHERNET驱动和其它INIT的动作,有稍微停顿..|
我估计修正过后,再加上看到桌面前就跑自己的AP,可以到5秒左右. 就看这几天优化后的情况吧!
1. 2440在WINCE开机后,已先占用10MB (图中11M,是因为执行了抓图软件),
但2410的板子,却只占8MB. 但因为LCD BUFFER我都是抓到1MB,可降的空间有限,
不过还是可以再试试 (我没记错的话,远峰GPS开机后占用6MB)
2.关于XIPKERNEL的大小,其实想想,降到最低时,例如0.8~1 MB,
但启动WINCE时势必会因为要读取驱动程序,而拖延到开机时间,不过我现在的2.6MB是大了点.
3.就是开机时间了, 2440的现在送电到看到桌面=7秒, 2410的为9秒.
不过监看debugmessage ,有些过程的确需要再改进,
因为ETHERNET驱动和其它INIT的动作,有稍微停顿..|
我估计修正过后,再加上看到桌面前就跑自己的AP,可以到5秒左右. 就看这几天优化后的情况吧!
----------------------
楼上的兄弟,我现在研究的就是看到桌面前,到底做了哪些驱动INIT…
目前只确定s3c2440disp.dll 是一定要含在里面的
触控的也要含在内会比较恰当
enthernet(cs8900,dm9000) 当然就到桌面之后才init
另外FMD_INIT_DONE之后不知做啥了…也做太久了..至少停顿1秒
至于xipkernel变大..只要在3MB以内,都是我可接受的范围内
xipkernel的大小,我是放弃了,因为拼命搞到1MB吧,可是开机时间多了2-3秒,这不划算~~
目前只确定s3c2440disp.dll 是一定要含在里面的
触控的也要含在内会比较恰当
enthernet(cs8900,dm9000) 当然就到桌面之后才init
另外FMD_INIT_DONE之后不知做啥了…也做太久了..至少停顿1秒
至于xipkernel变大..只要在3MB以内,都是我可接受的范围内
xipkernel的大小,我是放弃了,因为拼命搞到1MB吧,可是开机时间多了2-3秒,这不划算~~
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/13771794/viewspace-566747/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/13771794/viewspace-566747/