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

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

好的是,驱动程序被划分成独立于操作系统的“库”层(OSI)和操作系统相关的,所以它已经有了一个允许在其他操作系统上移植的“框架”,我希望大部分的努力侧重于OSI方面。 到目前为止,我看到以下大块的工作:

  1. init代码,即将驱动程序“插入”到系统中的特定于操作系统的代码(与Linux中的init_module,cleanup_module类似)
  2. 代码在内核的PCI核心子系统中注册驱动程序
  3. 字符驱动注册码4)DMA操作

还有什么我应该关注的? 该驱动程序是进行硬件encryption的设备,因此它卸载了设备(来自NIC的入口数据包正常进入系统,然后转向设备)。

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

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

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

在哪里可以找到许多所需的Linux驱动程序API和它们的FreeBSD原生对应的实现。

John-Mark还有一个快速启动的文件, 这对那些已经熟悉驾驶员写作的人有帮助。

如果你更喜欢从头开始,我认为FreeBSD体系结构手册将是一个有用的起点。

此外,Kirk McKusick,Robert Watson和George Neville-Neil撰写了一本名为“FreeBSD操作系统的设计和实现”的书籍,最新版本是第二版,第八章是详细的设备驱动程序。

大多数设备驱动程序只是硬件操作的封装,以适应操作系统接口,所以一个良好的分层驱动程序应该相对容易移植现在。

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