WinCE流驱动加载的控制

      前段时间整理了《WinCE下调试串口的动态复用》,基本实现了调试串口与普通功能串口之间的动态切换。其中实现的方法有点欠缺,在重新烧录或者升级系统后,导致系统无法正常启动。这算是个BUG。该功能加上才几天,就陆续有好几个同事碰到。本来想着使用方便的,没想到反而增添了一些麻烦。

      这个问题在实现时曾考虑到,发布版本的日志里也加了说明,如果启用了调试串口,那么在烧录或者升级系统前,须禁用调试串口。说实在的,确实有点麻烦,不小心就忘了做这个工作。而问题的根源是实现机制不太合理。调试串口的配置被分散在两处,一处是存储在NAND Flash的特定区域,另一处是注册表中。系统启动时,OAL根据Flash中保存的状态,确定是否启用调试串口,而驱动加载时又根据注册表的状态,确定是否加载调试串口的驱动。两处保存的状态不同步时,问题就出现了。问题分析清楚了,解决方法自然就有了,保证两处的状态一致即可。

      调试串口的配置由存储在NAND Flash中的参数决定,系统启动时根据该值,动态修改调试串口对应的注册表配置,确保在启用调试串口时,不再加载它所对应的驱动,也就不会产生冲突,导致系统无法正常启动了。

      在驱动注册表中,Flags是用于控制流驱动的加载行为的。其中DEVFLAGS_NOLOAD即表示不要加载该驱动。所以,在合适的地方添加如下代码,即可控制调试串口驱动的加载。

 1 void DisableDebugSerial(BOOL bDisable)
 2 {
 3     HKEY Key;
 4     DWORD Status;
 5     DWORD Disposition;
 6     DWORD Value;
 7     DWORD Flags;
 8 
 9     Status = RegCreateKeyEx(HKEY_LOCAL_MACHINE, L"Drivers\\BuiltIn\\Serial3", 0, NULL, 0, 0, NULL, &Key, &Disposition);
10 
11     if (Status == ERROR_SUCCESS)
12     {
13         Value = bDisable ? DEVFLAGS_NONE : DEVFLAGS_NOLOAD;
14         RegSetValueEx(Key, DEVLOAD_FLAGS_VALNAME, 0, DEVLOAD_FLAGS_VALTYPE, (PBYTE)&Value, sizeof(Value));
15         RegCloseKey(Key);
16     }
17 }

       如果禁用了调试串口,则将Flag是设置为DEVFLAGS_NONE,设备管理器将正常加载驱动。如果没有禁用调试串口,则将Flags设置为DEVFLAGS_NOLOAD,设备管理器就不会加载该驱动。

      通过以上方法的改进,调试串口的动态复用就更方便了。

时间: 2024-09-29 06:37:45

WinCE流驱动加载的控制的相关文章

WinXP系统驱动加载失败如何解决

  故障可能性一.造成驱动加载失败的原因其中包括驱动程序本身就不完全,其次就是在下载更新驱动的时候没有下载完全,一些被杀毒软件或者防火墙给拦截掉.还有就是可能是你的驱动版本不对,或者驱动文件损坏.没安装好,直接重新安装一次驱动程序试试.可能是要先用VPN拨号上到专门的网络才行的你具体看下软件安装说明,这里推荐大家使用驱动人生去自动更新驱动程序. 这种情况的解决方法很简单,尝试将一些杀毒软件及系统自带的防火墙暂时关闭一会儿.关于这些第三方软件比如360安全卫士及QQ电脑管家之类的关闭相信大家都是比

WinXP系统驱动加载失败怎么办

  WinXP系统驱动加载失败怎么办          这种情况的解决方法很简单,尝试将一些杀毒软件及系统自带的防火墙暂时关闭一会儿.关于这些第三方软件比如360安全卫士及QQ电脑管家之类的关闭相信大家都是比较了解. 故障可能性二.电脑驱动程序被破坏所导致的. 先找到你的驱动人间或者是驱动文件夹.这里在C:WINDOWSsystem32drivers上找到DokeeDriver.sys 驱动文件及DokeeDriver.sys文件夹,将文件删除掉.如图所示: 温馨提示:如果驱动文件删除不掉的话,

驱动加载失败有什么原因

  故障可能性一.造成驱动加载失败的原因其中包括驱动程序本身就不完全,其次就是在下载更新驱动的时候没有下载完全,一些被杀毒软件或者防火墙给拦截掉.还有就是可能是你的驱动版本不对,或者驱动文件损坏.没安装好,直接重新安装一次驱动程序试试.可能是要先用VPN拨号上到专门的网络才行的你具体看下软件安装说明,这里推荐大家使用驱动人生去自动更新驱动程序. 这种情况的解决方法很简单,尝试将一些杀毒软件及系统自带的防火墙暂时关闭一会儿.关于这些第三方软件比如360安全卫士及qq电脑管家之类的关闭相信大家都是比

驱动加载失败故障原因及解决方法

故障可能性一.造成驱动加载失败的原因其中包括驱动程序本身就不完全,其次就是在下载更新驱动的时候没有下载完全,一些被杀毒软件或者防火墙给拦截掉.还有就是可能是你的驱动版本不对,或者驱动文件损坏.没安装好,直接重新安装一次驱动程序试试.可能是要先用VPN拨号上到专门的网络才行的你具体看下软件安装说明,这里推荐大家使用驱动人生去自动更新驱动程序. 这种情况的解决方法很简单,尝试将一些杀毒软件及系统自带的防火墙暂时关闭一会儿.关于这些第三方软件比如360安全卫士及qq电脑管家之类的关闭相信大家都是比较了

Intel 6系芯片组Windows XP AHCI驱动加载方法

  1. 通过intel官网下载对应AHCI驱动包: 2. 制作驱动软盘 1)如用户使用纯净版非OEM光盘,下载驱动后直接解压至软驱根目录即可. 2)如用户使用OEM版操作系统,需要在更目录下放置AHCI后,另外创建$OEM$文件夹,在该文件夹下创建Textmode文件夹,并在此文件夹中放置一份对应驱动. 3. 加载驱动 在安装系统过程中(分区界面之前)连续敲击F6键,选择: Intel(R) Desktop/Workstation/Server Express Chipset SATA AHC

驱动加载失败怎么办

  原因一.电脑驱动程序遭到破坏. 首先找到你的驱动文件或者是驱动文件夹.我们在C:WINDOWSsystem32drivers上找到 DokeeDriver.sys 驱动文件及 DokeeDriver.sys 文件夹,删除掉这个文件.如下图: 注意:假如驱动文件删除不掉的话,我们可以按照下面的方法来进行删除,先在桌面上新建一个记事本文档,然后在文档中输入以下命令: DEL /F /A /Q ?%1 RD /S /Q ?%1 接着将文件另存为".bat"的后缀名,如下图所示: 这时候在

asp+access+masonry实现瀑布流异步加载

问题描述 asp+access+masonry实现瀑布流异步加载 用asp实现瀑布流异步加载,有谁有简单的代码吗?点击一下加载一页,5页后不再加载! 解决方案 动态更新的内容如何以瀑布流masonry重新布局瀑布流masonry布局API瀑布流waterfall jquery插件动态读取数据示例

ce6的sd驱动加载失败-CE6 的驱动加载不成功?

问题描述 CE6 的驱动加载不成功? 这两天给CE6的系统加入SD卡驱动,结果发现启动后,SD卡驱动不运行.检查了编译的库文件(sdhc.dll)及目标板中的文件(sdhc.dll),都正常的,不知道是什么原因.不知有没有那位遇到过相同的情况?

linux驱动加载后能找到设备,但是/dev下不能找到设备文件

问题描述 linux驱动加载后能找到设备,但是/dev下不能找到设备文件 linux驱动加载后能找到设备,但是/dev下不能找到设备文件,我用的是动态分配设备号,insmod也能通过,但是/dev下就是找不到设备文件,加载后也不能通过测试程序我基本上直接用的板子例程,静态动态我都试了,就是不行,日志文件里面也什么都没有,板子是2410的,主机是红帽的,希望大神能够指点迷津/*****************************************Copyright (c)********