31

我需要一些关于开发定制 PCIe 驱动程序的建议。驱动程序必须同时支持 Windows CE 6.0 和 Windows Desktop(准备就绪时的 xp、7 和 8)。

我们有很多开发 Windows CE 驱动程序的经验,但没有开发 Windows Desktop 驱动程序的经验。我很确定我们可以开发一个好的、可靠的 Windows CE 驱动程序,但我认为如果没有一些外部帮助,我们将无法为 Windows 桌面做同样的事情。我认为我们有两个选择:

1)使用现有的驱动框架如Jungo WinDriver,它允许我们一次开发驱动并编译到多个平台。这还有一个好处,即大部分开发将在用户空间中进行,因此它应该使开发过程更简单。

2) 获得一些外部帮助来设置一个好的 Windows 桌面驱动程序,所有管道都已完成,我们只需要添加与我们的电路板通信的代码并公开相关的 IOControl。也许将尽可能多的代码移动到用户空间库中。

每个选项的优点和缺点是什么?你会推荐替代方法吗?

4

2 回答 2

2

根据刚才的要求,在我提出原始问题一年多之后,我将尝试分享我的经验。我们决定使用 Windriver,但到目前为止我们只为 Windows CE 6.0 编写了一个驱动程序,因此我无法评论跨平台支持。

在 Windows CE 6.0 上使用 Windriver 既有优点也有缺点。这意味着我们所有的驱动程序代码现在都在库中,因此开发和调试更容易(与需要 Platform Builder 的标准驱动程序相比)。所以从开发的角度来看,它一直很好。性能也很好。在开始学习 Windriver API 以及如何使用它时有一些开销,尤其是 DMA 和中断,但我认为这并不比学习原始的 Windows CE 6.0 PCI API 更糟糕。

我能想到的唯一真正的缺点是“真正的”驱动程序比我们使用 Windriver 创建的库更容易在多个进程之间共享。在我们的应用程序(具有一个进程的嵌入式系统)中,这并不是一个真正的问题,但是创建在主进程后面的硬件上运行的调试/开发实用程序更加困难。我们已经使用这种方法在其他平台上进行测试/调试,但在这里做起来有点复杂。

总而言之,我认为我们做出了正确的选择,我很高兴我们能够在需要时(希望)很少的努力将我们的“驱动程序”移植到 Windows 桌面。

于 2012-10-22T19:44:16.070 回答
1

使用 Windriver 开发 Windows/Linux 驱动程序后,我想回答这个问题。

如果使用驱动程序的应用程序也将由您编写,我更喜欢 Windriver。由于您提到您正在开发自定义驱动程序,因此我假设您也将自己编写应用程序。在这种情况下,应用程序不需要在 windows 和 windows CE 之间进行太多更改,因为大多数驱动程序功能将由 Windriver 本身生成。这就像调用标准库函数而不是使用 IOCTL 等。

过去,我使用 windriver 生成基本的驱动程序接口代码,并开发了使用 windriver 生成代码的应用程序(主要是诊断应用程序)。稍加修改,我们就可以在 windows 和 linux 之间使用驱动程序和应用程序。我不提倡使用 Jungo,但它很容易使用。

由于问题是关于征求建议的,很难提供准确的答案,我只是分享我的反馈。

于 2012-10-12T23:16:43.300 回答