wince_lover
驱动中牛
驱动中牛
  • 注册日期2007-01-10
  • 最后登录2010-12-20
  • 粉丝0
  • 关注0
  • 积分1103分
  • 威望735点
  • 贡献值2点
  • 好评度279点
  • 原创分1分
  • 专家分0分
阅读:4067回复:3

OEMInit到加载第一个驱动,系统作了什么工作?

楼主#
更多 发布于:2008-12-24 16:29
在WINCE5下,OEMInit执行结束到加载第一个驱动系统做了些什么工作?我的系统从OEMInit执行结束到加载第一个驱动,一共用了3秒多,请问如何可以缩短这段时间?
high
论坛版主
论坛版主
  • 注册日期2002-08-10
  • 最后登录2010-07-26
  • 粉丝4
  • 关注0
  • 积分60分
  • 威望655点
  • 贡献值0点
  • 好评度56点
  • 原创分0分
  • 专家分60分
沙发#
发布于:2008-12-25 16:30
nand flash吗? 加载nand驱动时候, nand驱动包含了FAL, 这个部分在初始化时候会扫描磁盘,建立逻辑扇区地址隐射表,会耽误比较久时间。可以对比一下:去除hive,不加载nand驱动情况下的耗时,看看节省多少时间。

(虽然nand驱动也是驱动, 但是他可能并不是device.exe加载的。由注册表AutoLoad设置让filesys进行提前加载。这种情况下,它是在所有其它驱动前被加载。)
wince_lover
驱动中牛
驱动中牛
  • 注册日期2007-01-10
  • 最后登录2010-12-20
  • 粉丝0
  • 关注0
  • 积分1103分
  • 威望735点
  • 贡献值2点
  • 好评度279点
  • 原创分1分
  • 专家分0分
板凳#
发布于:2008-12-25 18:26
还没有加载NAND驱动,从OEMInit完成到开始加载NAND就用了3秒多
high
论坛版主
论坛版主
  • 注册日期2002-08-10
  • 最后登录2010-07-26
  • 粉丝4
  • 关注0
  • 积分60分
  • 威望655点
  • 贡献值0点
  • 好评度56点
  • 原创分0分
  • 专家分60分
地板#
发布于: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.后面的事情是另一波了。
游客

返回顶部