有没有人知道部分或完全自动化驱动程序测试安装的方法?
我是驱动程序开发的新手,并且习惯于在更高级别的语言中使用更多的测试驱动方法,因此转向我无法轻松测试的环境对我来说是一个进步。我在我的测试环境中使用Virtual PC,目前必须重置它,打开设备管理器,选择设备,点击一堆“你真的确定你不会安装其中一个系统驱动程序“键入对话框,然后在测试环境启动时,在主机重启WinDbg的同时最终重置测试环境...... argh。
重复这个过程很多次之后,肯定有一个更好的方法吗?商业驱动程序开发人员在测试环境中使用哪些工具/方法/技巧来运行其驱动程序?
注意,这不是关于单元测试驱动程序,我还没有到达那个阶段或者知道它是否可能。这只是为了启动附加WinDbg的测试环境,以确保我可能做的一些小改变正在做我期望的事情。
答案 0 :(得分:8)
在我看来,虚拟化软件+“mock objects”(分层)方法(由Aaron Digulla建议)+脚本(由Sergius建议)可以简化设备驱动程序的开发。
但是如果您使用Visual Studio开发用户级应用程序,您也可以使用它来进行内核设备驱动程序开发VisualDDK(+ VirtualKD来调试命名管道,这比通过虚拟COM端口),具体解决您提到的烦恼;从它的主页:
...这个项目带来了简单和 Windows应用程序的便利性 发展到司机发展 世界。不再需要手动创建 构建脚本,复制驱动程序 文件,从INF安装驱动程序, 在WinDbg和。之间切换 源编辑或等待秒 由于超慢,每一步之后 虚拟COM端口。只需创建一个驱动程序 项目使用方便的驱动程序 向导,选择一个虚拟机,然后 喜欢直接调试您的驱动程序 来自Visual Studio。 想要测试一下 更改?通常按Shift-F5, 修改你的驱动程序,重建它 再次发布。 VisualDDK将卸载 旧驱动程序,安装新驱动程序 并自动快速加载。 厌倦了WinDbg加载符号文件 几分钟,查找符号 秒?让VisualDDK优化 这适合你使用自己的DIA 符号引擎。在C ++中使用C ++ / STLPort 你的司机? VisualDDK将原生于此 可视化所有STL容器和 字符串,和Visual Studio一样好 用于用户模式的应用程序。 ...
答案 1 :(得分:6)
您可以编写一些shell脚本(使用sc.exe和devcon.exe)来自动执行部署任务(无需打开设备管理器,单击按钮等)。并使系统的快照准备好进行调试(无需等待系统启动)。
不要忘记使用DriverVerifier检查您的驱动程序!
我自己的脚本示例:)
sc create FsFilter type= filesys binPath= c:\FSFilterDrv.sys
sc start FsFilter
pause
sc stop FsFilter
sc delete FsFilter
答案 2 :(得分:4)
按照我给出的建议here。基本上,尽可能少地使用真实系统进行测试。
在您的情况下,我还有另一个提示:Virtual PC正在使用虚拟硬盘(可能是您真实硬盘上的文件)。
您无需安装驱动程序,只需更换虚拟硬盘中的新文件即可。这在运行系统中通常是不可能的,但在虚拟系统中,您可以打开虚拟磁盘文件并进行更改(因为Windows未将文件锁定在其中)。
我不确定Virtual PC,但其他模拟器附带了处理虚拟磁盘映像的工具。如果VPC无法做到,请查看VirtualBox。
答案 3 :(得分:3)
这完全取决于你正在写什么样的驱动程序。但在许多情况下,编写适当的makefile(或类似的东西)来处理驱动程序的安装,启动/停止和启动测试工具已经足够了。
我还将所有测试机器配置为自动登录(AutoAdminLogon),映射网络驱动器,并在启动后启动适当的命令提示符。然后,运行特定测试只需输入一个命令即可。
关于VirtualPC的一句话:VirtualPC对于内核模式开发非常方便,但不要忘记它只模拟单处理器机器 - 所以一定要定期在多处理器机器上测试代码。也就是说,VHD技巧可能看起来很方便,但它在某种程度上将你与Virtual PC联系在一起 - 编写适当的脚本,这些脚本在VirtualPC上同样适用于真机,因此对我来说似乎是一种更好的方法。
最后,认为它是一个无耻的插件,但如果您正在寻找Windows内核模式代码的单元测试框架,我写了一个:cfix。
答案 4 :(得分:2)
我认为DevCon实用程序(在this OSR Online article中描述)会对您有所帮助。您应该能够设置只需单击即可完成工作的批处理文件。
可以免费注册osronline.com,您可能需要注册才能获得该文章。如果您正在编写驱动程序,则需要注册。这些人已经做了很长时间了,这个网站上有很多非常好的信息。