阅读:4067回复:3
OEMInit到加载第一个驱动,系统作了什么工作?
在WINCE5下,OEMInit执行结束到加载第一个驱动系统做了些什么工作?我的系统从OEMInit执行结束到加载第一个驱动,一共用了3秒多,请问如何可以缩短这段时间?
|
|
沙发#
发布于:2008-12-25 16:30
nand flash吗? 加载nand驱动时候, nand驱动包含了FAL, 这个部分在初始化时候会扫描磁盘,建立逻辑扇区地址隐射表,会耽误比较久时间。可以对比一下:去除hive,不加载nand驱动情况下的耗时,看看节省多少时间。
(虽然nand驱动也是驱动, 但是他可能并不是device.exe加载的。由注册表AutoLoad设置让filesys进行提前加载。这种情况下,它是在所有其它驱动前被加载。) |
|
板凳#
发布于:2008-12-25 18:26
还没有加载NAND驱动,从OEMInit完成到开始加载NAND就用了3秒多
|
|
地板#
发布于:2009-01-01 02:54
http://chenyq2008.spaces.live.com/blog/cns!F73164AC8D0D8D50!256.entry
[回顾启动流程] Mdarm.c文件的最后一个函数NKStartup()就是kern.dll的入口点。 NKStartup() ARMSetup() OEMInitDebugSerial() OEMInit() KernelFindMemroy() KernelStart() KernelInit() APICallInit(); HeapInit(); InitMemoryPool(); PROCInit(); VMInit(g_pprcNK); THRDInit(); MapfileInit(); FirstSchedule(); THRDInit()初始化了第一个线程是SystemStartupFunc, 所以FirstSchedule开始第一次调度, 就调度到SystemStartupFunc函数开始执行: SystemStartupFunc() KernelInit2(); LoaderInit(); PagePoolInit(); LoggerInit(); SysDebugInit(); CreateKernelThread(Monitor1); InitMsgQueue(); InitWatchDog(); CreateKernelThread(PowerHandlerGuardThrd); CreateKernelThread(RunApps); While(1) { NKWatiForSingleObject(ONE_DAY); } RunApps()里面就是启动filesys.exe了, 在ce6是filesys.dll.后面的事情是另一波了。 |
|