适用于 Windows CE 和 Windows 桌面的 PCIe 驱动程序
Posted
技术标签:
【中文标题】适用于 Windows CE 和 Windows 桌面的 PCIe 驱动程序【英文标题】:PCIe driver for Windows CE and Windows Desktop 【发布时间】:2011-11-18 16:09:21 【问题描述】:我需要一些关于开发定制 PCIe 驱动程序的建议。该驱动程序必须同时支持 Windows CE 6.0 和 Windows Desktop(xp、7 和 8 准备就绪)。
我们在为 Windows CE 开发驱动程序方面拥有丰富的经验,但没有为 Windows 桌面开发驱动程序的经验。我很确定我们可以开发一个好的、可靠的 Windows CE 驱动程序,但我认为如果没有一些外部帮助,我们将无法为 Windows 桌面做同样的事情。我认为我们有两个选择:
1) 使用现有的驱动框架,例如 Jungo WinDriver,它允许我们一次开发驱动并编译到多个平台。这也有一个优点,即大部分开发将在用户空间中进行,因此它应该使开发过程更简单。
2) 获得一些外部帮助来设置一个好的 Windows 桌面驱动程序,其中所有管道都已完成,我们只需要添加与我们的开发板通信的代码并公开相关的 IOControl。也许将尽可能多的代码移动到用户空间库中。
每个选项的优缺点是什么?您会推荐其他方法吗?
【问题讨论】:
Allan 以获得更好的机会获得答案,您应该也用“windows”标记您的问题。我认为您仅在 windows-ce 部分获得答案的机会很小。我还建议您查看 Jan Axelson 的书 USB Complete Fourth Edition - www.lvr.com,您将从那里获得很好的信息。就我个人而言,我会尝试使用 WinDriver,作为备份解决方案的外部帮助。 感谢有关“windows”标签的说明和您的一般建议。但是,我看不出一本关于 USB 的书将如何帮助我做出有关 PCI 驱动程序的决定?我有你推荐的书的第三版,据我所知,它主要是关于 USB 协议,而关于驱动程序的内容很少(提到了 USB 的 WinDriver,但仅此而已)。 对我来说这本书很有帮助。但是您的设备属于哪种 USB 类/子类?是隐藏的吗?它到底是什么?至少在一般情况下可以获得更好的想法。 Sorry Allan 我没有足够的关注,我专注于 USB,我过去使用 Jungo for USB。 您可能会尝试从使用过 WinDriver 的人那里获取 cmets(可能会问一个特定的问题)。如果它满足您的所有需求,那么致力于这样一个框架可能是一件幸事,但是如果缺少一些您需要的东西,那么所有的地狱都会崩溃。请查看 KMDF 和 WDK 中为您正在开发的驱动程序提供的示例 【参考方案1】:根据刚才的要求,在我提出最初的问题一年多之后,我将尝试分享我的经验。我们决定使用 Windriver,但到目前为止我们只为 Windows CE 6.0 编写了一个驱动程序,所以我无法评论跨平台支持。
在 Windows CE 6.0 上使用 Windriver 既有优点也有缺点。这意味着我们所有的驱动程序代码现在都在库中,因此开发和调试更容易(与需要 Platform Builder 的标准驱动程序相比)。所以从发展的角度来看,它一直很好。性能也很好。在开始学习 Windriver API 以及如何使用它时有一些开销,尤其是 DMA 和中断,但我认为这并不比学习原始的 Windows CE 6.0 PCI API 更糟糕。
我能想到的唯一真正的缺点是“真正的”驱动程序比我们使用 Windriver 创建的库更容易在多个进程之间共享。在我们的应用程序(具有一个进程的嵌入式系统)中,这并不是一个真正的问题,但是创建在主进程后面的硬件上运行的调试/开发实用程序更加困难。我们已经使用这种方法在其他平台上进行测试/调试,但在这里做起来有点复杂。
总而言之,我认为我们做出了正确的选择,我很高兴我们能够在需要时将“驱动程序”移植到 Windows 桌面(希望如此)。
【讨论】:
【参考方案2】:使用Windriver开发过Windows/Linux驱动,想回答一下这个问题。
如果使用驱动程序的应用程序也将由您编写,我更喜欢 Windriver。由于您提到您正在开发自定义驱动程序,因此我假设您也将自己编写应用程序。在这种情况下,应用程序不需要在 windows 和 windows CE 之间进行太多更改,因为大多数驱动程序功能将由 Windriver 本身生成。这就像调用标准库函数而不是使用 IOCTL 等。
过去,我使用windriver生成基本的驱动程序接口代码,并开发了使用windriver生成代码的应用程序(主要是诊断应用程序)。稍加修改,我们就可以在 windows 和 linux 之间使用驱动程序和应用程序。我不提倡使用 Jungo,但它很容易使用。
由于这个问题是关于征求建议的,很难提供准确的答案,我只是分享我的反馈。
【讨论】:
以上是关于适用于 Windows CE 和 Windows 桌面的 PCIe 驱动程序的主要内容,如果未能解决你的问题,请参考以下文章
适用于 Windows XP 和 2003 的 Windows 批处理选择命令