我需要一个自定义PCIe驱动程序开发的小build议。 驱动程序必须同时支持Windows CE 6.0和Windows桌面(准备好时xp,7和8)。
我们有很多开发Windows CE的驱动程序的经验,但是对于Windows桌面没有。 我非常肯定,我们可以开发一个好的,稳定的Windows CE驱动程序,但是我认为我们无法在没有外部帮助的情况下为Windows桌面执行相同的操作。 我认为我们有两个select:
1)使用现有的驱动程序框架,如Jungo WinDriver,它允许我们开发一次驱动程序,并编译到多个平台。 这也有一个好处,那就是大部分的开发将会在用户空间中,所以它应该使开发过程更简单。
2)获得一些外部帮助,以build立一个良好的Windows桌面驱动程序,所有的pipe道工作已经完成,我们只需要添加与我们的主板通信的代码,并公开相关的IOControls。 也许尽可能将代码移到用户空间库中。
每个选项的好处和坏处是什么? 你会推荐替代方法吗?
使用Windriver开发Windows / Linux驱动程序,我想回答这个问题。
我更喜欢Windriver,如果使用驱动程序的应用程序也将由你写。 既然你提到你正在开发一个自定义的驱动程序,我假设你也将自己编写应用程序。 在这种情况下,Windows和Windows CE之间的应用程序不需要太多的改变,因为大多数的驱动程序功能都是由Windriver自己生成的。 这就像调用标准库函数,而不是使用IOCTLs等
过去,我使用windriver生成基本的驱动程序接口代码,并开发了使用windriver生成代码的应用程序(主要是诊断应用程序)。 几乎没有修改,我们能够使用Windows和Linux之间的驱动程序和应用程序。 我不是主张使用Jungo,但它很容易使用。
由于这个问题是在征求意见,所以很难提供确切的答案,我只是分享我的意见。
正如前一段所要求的那样,在我提出原来的问题之后的一年多,我将尽力分享我的经验。 我们决定使用Windriver,但到目前为止我们只写了Windows CE 6.0的驱动程序,所以我不能评论跨平台的支持。
在Windows CE 6.0上使用Windriver具有优点和缺点。 这意味着我们所有的驱动程序代码现在都在库中,所以开发和调试起来更容易(与需要Platform Builder的标准驱动程序相比)。 所以从发展的角度来看,这是很好的。 性能也很好。 开始学习Windriver API以及如何使用它,特别是在DMA和中断方面,有一些开销,但我认为这比学习原始的Windows CE 6.0 PCI API差。
我能想到的唯一真正的缺点是,与使用Windriver创建的库相比,“真实”的驱动程序更容易在多个进程之间共享。 在我们的应用程序(带有一个进程的嵌入式系统)中,这不是一个真正的问题,但是创建在主进程背后的硬件上运行的调试/开发实用程序却更加困难。 我们使用这种方法在其他平台上进行测试/调试,但是在这里做一些更复杂的事情。
总而言之,我认为我们做出了正确的选择,我很高兴我们有能力在我们需要的时候用(很希望)很少的努力将我们的“驱动程序”移植到Windows桌面上。