将PCIe驱动程序从Linux移植到FreeBSD

时间:2015-08-22 12:33:16

标签: linux freebsd porting device-driver pci-e

我在Linux上编写了一个相当大的PCIe驱动程序,现在我需要在FreeBSD上移植它。我还不知道BSD版本,但我认为在这一点上它是无关紧要的,因为我想了解一般在移植过程中必须修改哪些主要项目。< / p>

好处是驱动程序被分区为独立于操作系统的#34;库&#34;层(OSI)和OS依赖,所以它已经有一个&#34;框架&#34;允许将其移植到其他操作系统上,我希望大部分工作都集中在OSI方面。到目前为止,我看到了以下大块工作:

  1. 初始化代码,即&#34;插入&#34;司机进去 system(类似于init_module,cleanup_module在Linux中的作用)
  2. 在内核的PCI核心子系统中注册驱动程序
  3. 字符驱动程序注册码4)DMA操作
  4. 我还应该注意什么?此驱动程序是一个执行硬件加密的设备,因此它是卸载设备(来自NIC的入口数据包正常进入系统,然后转移到设备)。

    如果有关于BSD驱动程序开发/移植(类似于LDD)的描述的有用的web链接,我很乐意接受它:)

1 个答案:

答案 0 :(得分:9)

2011年,Jeff Roberson(以及后来的Mellanox)增加了一些垫片来简化移植Linux驱动程序,当他将Linux InfiniBand驱动程序移植到FreeBSD时,大部分代码都按原样使用。所以,假设我是Linux驱动程序开发世界的新手,我首先看一下:

https://svnweb.freebsd.org/base/head/sys/ofed/include/linux/

您可以在哪里找到许多必需的Linux驱动程序API及其FreeBSD原生对应的实现。

John-Mark还有另一篇快速入门的文章here,对那些已经熟悉驾驶员写作的人有帮助。

如果您希望从头开始,我认为FreeBSD Architecture Handbook将是一个有用的起点。

此外,还有Kirk McKusick,Robert Watson和George Neville-Neil的书,题为“FreeBSD操作系统的设计与实现”,此时的最新版本是第2版,第8章详细设备驱动程序。

大多数设备驱动程序只是硬件操作的包装器,以适应操作系统界面,因此现在应该相对容易移植分层良好的驱动程序。

如果您有疑问,或者是硬件供应商,您还可以加入各种FreeBSD邮件列表(freebsd-drivers @等)。