用于Windows CE和Windows Desktop的PCIe驱动程序



我需要一些关于开发自定义PCIe驱动程序的建议。驱动程序必须支持Windows CE 6.0和Windows Desktop (xp, 7和8准备好了)。

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

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

2)获得一些外部帮助来设置一个良好的Windows Desktop驱动程序,其中所有管道都完成了,我们只需要添加与我们的董事会通信的代码并暴露相关的iocontrol。也许可以将尽可能多的代码移到用户空间库中。

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

根据之前的要求,在我提出最初的问题一年多之后,我将尝试分享我的经验。我们决定使用Windriver,但到目前为止我们只写了一个Windows CE 6.0的驱动程序,所以我不能评论跨平台支持。

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

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

总而言之,我认为我们做出了正确的选择,我很高兴我们有能力将我们的"驱动程序"移植到Windows Desktop,当我们需要它时(希望)很少的努力。

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

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

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

由于这个问题是征求意见的,很难给出确切的答案,我只是分享我的反馈。

最新更新