免费企业网站源码,专门做问卷的网站,网站域名无法访问,久就建筑网http://www.cnblogs.com/we-hjb/archive/2008/12/15/1280822.html http://blog.chinaunix.net/u1/49088/showart.php?id1279989 工欲善其事#xff0c;必先利其器。做WinCE驱动的开发已有一段时间了#xff0c;WinCE驱动调试助手也跟着更新了很多功能。现在只要做驱动#… http://www.cnblogs.com/we-hjb/archive/2008/12/15/1280822.html http://blog.chinaunix.net/u1/49088/showart.php?id1279989 工欲善其事必先利其器。做WinCE驱动的开发已有一段时间了WinCE驱动调试助手也跟着更新了很多功能。现在只要做驱动DM是必须用的。最近在调试WinCE6.0下的驱动所以又针对WinCE6.0增加了新的功能也修正了原来的一些BUG。 先介绍一下WinCE驱动调试助手V2.5的功能。驱动调试助手的主要功能是动态加载卸载流驱动以达到简化驱动调试的目的节省开发时间整体分成两部分注册表操作和驱动调试。 1.注册表操作 V2.5中新增了对整行注释和行尾注释的处理这样在导入注册表之前就无须进行手动处理方便导入。先前的版本如果直接导入带注释的文件会崩溃的。^_^ V2.5中新增了通过导入注册表删除键和键值的功能。删除键的方法如[-HKEY_USERS\DMTest]即在键名前加一-,删除键值的方法是Default-与PC上的方法一样。这也是一个方便使用的功能。 V2.5中新建键、值以及删除、修改键值的功能都做了提示尽量减少因误操作而引起的不必要的麻烦如果操作出错会给出错误的ID方便开发者找出原因。 V2.5中完善了二进制的编辑控件。先前的版本在使用输入法时不能正确输入二进制格式的数据现在已经能兼容各系统对输入法也没有限制了。二进制数据的显示也做了改善显示更规范确保每行8字节。另外发现鼠标在输入面板上向左滑动时相当于按下了Backspace向右滑动时相当于按下空格。有点意思。 V2.5的导入导出功能在WinCE5.0和6.0上测试未发现问题在4.2中测试时有问题原因没有细究所以在4.2下有保留的使用吧。附带的视频中演示了6.0下测试导出导入注册表的过程。即全部导出再全部导入然后软重启。需要说明一下的是在导出注册表文件时最好先不保存到外部存储器中否则很费时间也很占资源。 总之在注册表操作这一块V2.5中除了没有实现对注册表键的重命名和查找的功能之外其他的常用功能都有了。重命名键如果真的有需要可以手动完成。方法是先导出需要重命名的键到文件在文件中替换要重命名的内容再导入修改后的文件最后删除原先的注册表键。有点绕但要在程序中实现大概也是如此确实烦。^_^查找的功能当然也可以手动实现了。导出文件然后在文件中查找。这个还比较简便吧。 2.驱动调试 V2.5中新增了对系统启动时加载的设备驱动的管理。这个功能类似与PC下的设备管理器。这突破了先前只能管理手动加载的驱动的限制从而增强了驱动调试的功能。当然这个功能只能在6.0和5.0中使用4.2是不支持的。附带的视频中演示了停用Storage Card设备的方法。该功能与先前的功能一起在驱动列表中操作。 V2.5中在处理驱动加载和卸载的过程中如果遇到问题会出给ERROR ID一般这个ID都是有参考价值的。在5.0和6.0中测试没有发现问题。但在4.2上测试时同时加载两个以上设备的驱动经常会出现Error ID为0的情况再试几次又能正常。不管怎样这个Error ID还是有一定的参考意义而不象以前只知道出错了至于原因就蒙在鼓里。这个小细节也让助手更称职了。^_^ V2.5中在程序退出时会加载所有本次卸载掉的系统的驱动也会卸载掉本次手动加载的驱动。所以在使用助手调试驱动时不能退出该程序加载完驱动后最小化然后做你想做的事情。一旦退出程序你的系统又恢复成程序运行前的状态了。希望我已把这个小细节讲清楚了。^_^ 综上所述,除了增加了设备管理器的功能外V2.5的主要更新都是细节的完善只希望它能越来越好用也能为更多CE的开发者使用。 WinCE驱动调试助手V2.5的下载地址http://files.cnblogs.com/we-hjb/DM.rar 演示视频的下载地址http://files.cnblogs.com/we-hjb/DMAVI.rar 博客园的文件存储空间快用完了所以这个中间版本已被清理。 请到这里下载http://files.cnblogs.com/we-hjb/WINCEDM.rar 这段时间在学习wince驱动开发但是每次wince编译都要很久浪费很多时间。经过网上搜索和自己摸索发现了两个不错的方法。编译驱动更新程序都是非常的快。 1.单独编译驱动然后再build os菜单下选择make run-time image这个仅仅需要1分钟左右时间 单独编译驱动的方法如下 1.在build os菜单下进入open release dictionary然后再进入你的驱动的目录执行build就ok。 因为make image仅仅操作release目录如果是第一次加入驱动需要改动reg文件和bib文件这个修改后要copy到Release目录下如果加入应用程序也可以一起copy到这个目录下面。其实也可以不用自己copy到release目录按菜单BUILD OS-- COPY FILE TO RELEASE 就可以了。 2.按make run-time image就生产nk文件了。 2这一种方法更方便。是网上一位大哥写的。并且还专们写了一个程序当然如果不写程序的话也可以通过应用程序实现。我在wince5测试ok。 文章我直接贴过来了 Windows CE下流驱动的动态加载 我想很多WinCE的开发人员尤其是刚入门并且做驱动开发的工程师都曾碰到这样一个问题要编写一个外围设备的驱动拿最简单的GPIO驱动来说编写驱动本身可能只花了一会儿功夫可要把编译生成的DLL打包到先前做好的操作系统映像当中最简单也得MakeImg一下还要修改BIB文件、注册表文件以让系统启动的时候就加载该驱动所有工作都做完了还得花几分钟下载整个操作系统到内存去运行这也得要个好几分钟。能力强的人一次成功不走回头路也就算了。 如果驱动编写得有问题那又得改代码重新编译把刚刚所做的事情再做一遍。说出来不怕大家笑话我刚开始做驱动时就这样反反复复半天下来才调试好一个简单的驱动。而事实上很大一部分时间都浪费在重复操作上。这种调试驱动的方法实在效率太低了。想到Linux下面的驱动调试多方便直接INSMOD一下应用程序就可以调用出现问题就RMMOD根本无须来回倒腾操作系统的映像文件。那么WinCE下难道就没有这么简便的方法嘛答案是肯定的。 闲话少说进入正题。查找EVC的帮助发现函数ActivateDevice可用来加载驱动程序。而这个函数的使用是相当简单的。我就不多说了贴上一段帮助最能说明问题。当然你也可以用ActivateDeviceEx。 HANDLE ActivateDevice ( LPCWSTR lpszDevKey, DWORD dwClientInfo ); Parameters lpszDevKey [in] Pointer to the registry path string of the devices driver key under HKEY_LOCAL_MACHINE. A driver key contains the DLL name, the device prefix, friendly name, and other device information. dwClientInfo [in] Data that will be stored in the devices Active key in the ClientInfo value. The registry path to the drivers Active key is passed in as the context parameter to the devices XXX_Init function. The value in dwClientInfo is stored in the registry before XXX_Init is called. Return Values On success, ActivateDevice returns a handle to the device that can be used in subsequent calls to DeactivateDevice. Remarks This function is superseded by ActivateDeviceEx. ActivateDevice loads a device driver. ActivateDevice reads the registry key specified in lpszDevKey to get the DLL name, device prefix, index, and other values. Next it adds the device to the active device list in the registry branch HKEY_LOCAL_MACHINE\Drivers\Active, and stores the relevant values there. If no device index was specified in the key named in lpszDevKey, then it assigns a free index. Then it loads the device driver DLL in the process space of the Device Manager. Then it broadcasts a WM_DEVICECHANGE message for the new device and triggers a NOTIFICATION_EVENT_DEVICE_CHANGE event in the application notification system to notify applications of the presence of the new device. 从上面的描述中可以看到在使用该函数时我们只要给出第一个参数就可以而这个参数是注册表中的一个路径字符串。所以要想很方便的动态加载任意一个驱动我们还要了解一下有关注册表的内容。但其中最核心的就是一条把你驱动的相关注册表信息放到HKEY_LOCAL_MACHINE下主要内容包括Prefix、DLL、Index、Order等信息。这里就不展开说明了。 自己起初费了那么多冤枉时间实在很郁闷。原理摸清后就做了一个小工具实现动态加载流驱动以提高开发效率也能方便后来人。下面就详细介绍这个小工具的使用过程让大家体验一下动态加载流驱动是多么畅快的一件事情。 我们假设已经做好一个简单的流驱动DrvDemo.dll其对应的注册表文件为DrvDemo.reg用来测试驱动的应用程序DrvDemo.exe。我们把这三个文件和驱动调试助手(DM.exe)都拷贝到WinCE系统上如下图所示。 首先运行DrvDemo.exe点击打开设备或者其他按钮我们发现打开设备失败很正常此时DrvDemo.dll还没有工作呢。 运行驱动调试助手软件DM.exe点击“驱动调试”菜单——选择“导入注册表”浏览到我们准备好的注册表文件DrvDemo.reg选中并点击OK按钮这样DrvDemo.reg中的内容就已经导入到系统中了相应的信息能在“操作信息回显”中看到。 此时你可以直接点击“驱动调试”菜单下的“激活驱动”当然你也可以打开“驱动调试”——“驱动列表”进而选择激活该驱动。正常情况下操作回显中就会提示你“加载驱动成功”。 这时再到DrvDemo.exe点击打开设备就完全没有问题了。 如果在测试时发现驱动有问题那么你可以选择“卸载驱动”然后将修改好的新的驱动拷贝过来再点击“激活驱动”菜单。如此往复直至调试成功。 至此我们采用了通过导入注册表文件的方法激活驱动。下面再说说在没有注册表文件时直接通过浏览DLL文件本身来加载驱动的方法。先把刚刚加载的驱动卸载了。 运行驱动调试助手软件点击“驱动调试”菜单——选择“浏览DLL文件”浏览到我们准备好的DrvDemo.dll文件。在弹出的对话框中设置正确的Prefix、Order、Index信息点击“确定”。 同样此时你可以直接通过“驱动调试”下的“激活驱动”直接激活该驱动或者从“驱动列表”中激活. 其余的操作跟上面讲的完全一样了不再重复。 怎么样这种方法就很类似于Linux下的Insmod和Rmmod了吧 其实如果在注册表中已经有了相应的键你甚至可以直接选中它然后在“驱动调试”中选择“激活驱动”如果一切正常也可以达到上面两种方法的效果但这样就连导入文件都省了。有兴趣的同志可以自己试一下。 好了我相信到这里大家应该对动态加载流驱动的原理和方法都了解了也能从此摆脱不断MakeImg和Download的梦魇节省很多宝贵的开发时间。 最后针对驱动调试助手简单说明一下几个要注意的地方。 1. 在调试驱动时加载完驱动后千万不要关闭驱动调试助手最小化就行否则它会在关闭时自动卸载掉你所加载的驱动。 2. 在WinCE4.2中有关中断的驱动是无法直接用此方法来动态加载的而在5.0和6.0中不会有此限制。这是因为WinCE4.2中的中断处理机制所致。 3. 驱动调试助手可以同时加载几个驱动这时候建议将所有注册表信息写到一个文件中并导入。剩下的工作就是从驱动列表中选择加载你所需要的驱动了。 4. 驱动调试助手中的注册表编辑功能经过几番修改已基本完善编辑、导入、导出都没有问题。如果系统支持HIVE-REG在退出驱动调试助手时可以选择保存此次的注册表修改。 5. 上面的截图是在WinCE6.0的模拟器上面做的应该算是内核态的驱动至于用户态的驱动也可以通过该方法加载但是需要设定相应的注册表信息。 6. 做这样一个小工具主要是想提高自己的工作效率。现在贴出来希望也能为同道中人所用。在使用该程序时有任何问题请发邮件到 我会尽力解决。本篇中的视频录像和最新版的驱动调试助手可以在http://files.cnblogs.com/we-hjb/WINCEDM.rar下载到。 上面所讲的并不是新鲜或者高深的技术但相信对某些技术人员还是有一定的帮助。当然文中有不尽如人意处还请你见谅。以后争取多写一点东西跟大家一起学习Windows Embedded。