benage
驱动牛犊
驱动牛犊
  • 注册日期2004-03-05
  • 最后登录2006-12-25
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
阅读:1843回复:8

如何提高启动速度?(100)

楼主#
更多 发布于:2005-02-22 16:46
使用WinCE.NET做了一个产品(PC104工控模块),发现启动速度较慢。从NK.BIN加载算起,直至出现桌面,不包含BIOS引导时间,约需15秒。

1.各位做的产品,对应的启动时间是多少?
2.发现,在启动过程中,WinCE.NET有些不必要的动作,浪费时间:
 a.PnP ISA InitBusInfo : 0 card(s) found,产品没有PnP ISA设备当然不需要查询,如何去掉这个环节?
 b.PS2PORT,WinCE.NET的ps2、8042是一个驱动程序,我不需要PS2鼠标,但它还是要查,如何去掉?(如果插上个PS2鼠标,则能减少5秒的启动时间)
 c.产品不向用户暴露WinCE.NET的桌面,只有我的应用程序的界面。能不能去掉Shell.exe? 另外,调试时需要桌面,所以最好能在启动时,根据注册表的某个值,动态地决定是否加载Shell(注册表是永久存储的,应用程序可以读写注册表),怎么能做到呢?

每个问号都有分。谢谢。
wwei_wang
驱动大牛
驱动大牛
  • 注册日期2002-06-07
  • 最后登录2006-06-23
  • 粉丝0
  • 关注0
  • 积分77分
  • 威望9点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-02-23 15:28
1.我也用过PC104模块,启动时间也是15秒左右,和你的差不多,因为我的系统对启动时间没有太严格的要求。启动时间和你flash的大小、nk.bin的大小都有关系。
2.
a.和b.: 这两个是否可以通过修改bios来实现。
c:
(1)通过修改[HKEY_LOCAL_MACHINE\\init]下的键值\"Launch10\"=\"shell.exe\"可以屏蔽或使能对Shell.exe的加载。
(2)“另外,调试时需要桌面,所以最好能在启动时,根据注册表的某个值,动态地决定是否加载Shell(注册表是永久存储的,应用程序可以读写注册表),怎么能做到呢?”
请问,你说在启动时根据注册表的某个值,动态地决定是否加载Shell,那么这个注册表的某个值是什么时候设置的?我想只能是上次关机之前通过应用程序或者手动修改的。另外,要想使修改后的注册表在系统冷启动之后仍然有效,你要实现hive base registry功能,这部分你可以看看pb帮助里的文档。
Come on, let us drive the world.
benage
驱动牛犊
驱动牛犊
  • 注册日期2004-03-05
  • 最后登录2006-12-25
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-02-23 16:02
感谢wwei_wang。

我会去bios里找找看,试着修改,如有问题,再请教。

“(1)通过修改[HKEY_LOCAL_MACHINE\\init]下的键值\"Launch10\"=\"shell.exe\"可以屏蔽或使能对Shell.exe的加载。”这样生成的NK.BIN就不能再加载桌面了吧?

你描述的“那么这个注册表的某个值是什么时候设置的?我想只能是上次关机之前通过应用程序或者手动修改的”,就是我现在的设想,hive base registry已经实现了,可以永久存储,冷启动之后仍然有效。

现在的问题是,如何能在启动时负责加载Shell.exe的那部分代码中,插入读注册表并决定是否加载的代码;能给些提示吗,比如这部分代码在什么文件,什么位置?
wwei_wang
驱动大牛
驱动大牛
  • 注册日期2002-06-07
  • 最后登录2006-06-23
  • 粉丝0
  • 关注0
  • 积分77分
  • 威望9点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-02-24 13:22
你看这样行不行:
(1)不管有是否加载桌面,系统启动后都自动运行你的应用程序,这个功能很容易实现;
(2)另外,在你的应用中留个用户接口(如菜单命令或按钮等),通过它用户可以修改注册表以决定下一次启动的时候是否加载shell.exe。
Come on, let us drive the world.
benage
驱动牛犊
驱动牛犊
  • 注册日期2004-03-05
  • 最后登录2006-12-25
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2005-02-24 14:19
你看这样行不行:
(1)不管有是否加载桌面,系统启动后都自动运行你的应用程序,这个功能很容易实现;
(2)另外,在你的应用中留个用户接口(如菜单命令或按钮等),通过它用户可以修改注册表以决定下一次启动的时候是否加载shell.exe。


是的,我就想这样实现。第1条已做到;第2条,用户可以通过我的应用改写注册表选项;现在的问题是,WinCE.NET启动时,如何去读这个注册表选项,并决定是否加载Shell.exe? 在哪部分代码里增加这个判断呢?

另外,我反复察看了Bios,没有找到能够关闭ISA PnP和PS2的选项

[编辑 -  2/24/05 by  benage]
wwei_wang
驱动大牛
驱动大牛
  • 注册日期2002-06-07
  • 最后登录2006-06-23
  • 粉丝0
  • 关注0
  • 积分77分
  • 威望9点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2005-02-25 08:53
在你的应用中做个按钮或菜单命令,当需要下一次加载shell的时候,就修改[HKEY_LOCAL_MACHINE\\init]下的键值,增加\"Launch10\"=\"shell.exe\";如果下一次不需要加载shell,那么删掉这一行就行了。
Come on, let us drive the world.
benage
驱动牛犊
驱动牛犊
  • 注册日期2004-03-05
  • 最后登录2006-12-25
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2005-02-25 14:39
在你的应用中做个按钮或菜单命令,当需要下一次加载shell的时候,就修改[HKEY_LOCAL_MACHINE\\init]下的键值,增加\"Launch10\"=\"shell.exe\";如果下一次不需要加载shell,那么删掉这一行就行了。


的确可行,已经实现。50分,不成敬意。请继续关注前两个问题。谢谢。
wwei_wang
驱动大牛
驱动大牛
  • 注册日期2002-06-07
  • 最后登录2006-06-23
  • 粉丝0
  • 关注0
  • 积分77分
  • 威望9点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2005-02-28 09:39
对于前两个问题,我觉得应该是这样:
在系统启动的时候,首先要对即插即用的设备进行检测(这需要一定的时间),对于检测到的设备则加载相应的驱动。如果想屏蔽对某一设备的检测,那么直接屏蔽对应的检测代码就行了。现在关键问题是找到这段代码。
Come on, let us drive the world.
benage
驱动牛犊
驱动牛犊
  • 注册日期2004-03-05
  • 最后登录2006-12-25
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2005-03-01 17:01
谢谢提示。

在启动过程中,读出NK.BIN后,直至出现WinCE桌面,这个期间系统都做了什么,我不是很清楚,能不能给个介绍?

另:我分别用硬盘、CF卡,比较了NK.BIN读出后,到WinCE桌面出现之间的黑屏时间,分别是7秒和11秒;也就是说,因为CF卡的速率低,所以多用了4秒。如果忽略硬盘的读取时间(NK.BIN的大小是9M),这7秒里,系统在做什么?
总共11秒的黑屏,真是难受,用户会做何感想?我想至少应该做一个保持到桌面出现的splash screen,或者叫logo画面,如有经验,也请给指点。

[编辑 -  3/1/05 by  benage]
游客

返回顶部