2015-08-22 63 views
2

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

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

  1. 初始化代码,即在特定的操作系统的代码是“塞”司机到 系统(类似于init_module的,在cleanup_module确实在Linux中)
  2. 代码在内核
  3. 字符驱动程序的注册码的PCI核心子系统注册驱动器4)DMA操作

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

如果有有用的网页链接到BSD驱动发展的描述/移植(类似于LDD),我会高兴地接受它:)

+2

在[手册](http://www.freebsd.org/doc/en/books/arch-handbook/driverbasics.html)中有一章,关于[pci devices]的更具体部分(http: //www.freebsd.org/doc/en_US.ISO8859-1/books/arch-handbook/pci.html),并在FreeBSD的一个例子['的/ usr /共享/示例/ KLD/cdev'](HTTPS:/ /svnweb.freebsd.org/base/head/share/examples/kld/cdev/)。还有一些书籍,如“FreeBSD操作系统的设计和实现”和“FreeBSD设备驱动程序:Intrepid指南”。 – kdhp

+0

@kdhp,感谢您的评论。编写FreeBSD 6.x和9.x/10.x版本驱动程序是否有重大差异? – Mark

+1

'/ usr/share/examples/kld/cdev/module'中的最新文件已经9年了,所以_basics_应该是相同的。值得注意的是,在FreeBSD源代码树中有许多许可的许可示例,包含很长的SVN历史记录。另外,第9部分的手册页是“FreeBSD内核开发者手册”的一部分,大多数内核API在那里被记录。 – kdhp

回答

7

在2011年,杰夫·罗伯逊(后来Mellanox公司)增加了一些垫片来轻松移植Linux驱动程序,这使得大部分代码可以按原样使用,当他将Linux InfiniBand驱动程序移植到FreeBSD时。因此,假设我是从Linux驱动开发世界一些新人,我会通过看开始:

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

在哪里,你会发现许多的实现所需的Linux驱动程序的API和他们的FreeBSD的天然对应。

有约翰 - 马克,here,对于那些谁已经熟悉的司机写作有帮助的另一种快速启动文件。

如果您愿意从头开始,我觉得FreeBSD Architecture Handbook将是一个有益的起始点。

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

大多数设备驱动程序仅仅是硬件操作的包装,以适应OS接口,因此一个良好分层驱动程序应该是比较容易移植时下。

如果您有疑问,或者是硬件的供应商,你也可以加入各种邮件列表里(FreeBSD的司机@等)。

相关问题