ITPub博客

首页 > Linux操作系统 > Linux操作系统 > NandFlash 分区实现快速启动(zhuan)

NandFlash 分区实现快速启动(zhuan)

原创 Linux操作系统 作者:cifra_guokun 时间:2009-03-11 10:25:23 0 删除 编辑
这个确实可以做到,我尝试了一种做法,在生成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,又更进步了。
------------------------- 

当我使用单个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 
这个时候又能正常的启动!
-----------------------
我是用你的来改的,先用你第2组的,先跑出来,
( KERNEL放了不少…除了硬件驱动和字型外,几乎都放了)

然后再把RAM 的起点改成和NK一样,长度改一下,这样就OK啦
不过真正的问题真的来了
原本开机8秒,现在要15秒
-------------------------
看下你的RAMIMAGE里面有没有包含:fsdmgr.dll  还有relfsd.dll
-------------------------
都含了

现在先开启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
--------------------------
现在修改了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部分区载还有重叠吧?
-------------------
应该保证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秒左右. 就看这几天优化后的情况吧!

----------------------
楼上的兄弟,我现在研究的就是看到桌面前,到底做了哪些驱动INIT…
目前只确定s3c2440disp.dll 是一定要含在里面的
触控的也要含在内会比较恰当
enthernet(cs8900,dm9000) 当然就到桌面之后才init

另外FMD_INIT_DONE之后不知做啥了…也做太久了..至少停顿1秒

至于xipkernel变大..只要在3MB以内,都是我可接受的范围内

xipkernel的大小,我是放弃了,因为拼命搞到1MB吧,可是开机时间多了2-3秒,这不划算~~

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/13771794/viewspace-566747/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2008-04-07

  • 博文量
    92
  • 访问量
    305871