我有一个相当大的PCIe驱动程序写在Linux上,现在我需要将它移植到FreeBSD上。 我还不知道BSD的版本,但我认为在这一点上是无关紧要的,因为我想大致了解在移植过程中必须修改哪些主要项目。
好的是,驱动程序被划分成独立于操作系统的“库”层(OSI)和操作系统相关的,所以它已经有了一个允许在其他操作系统上移植的“框架”,我希望大部分的努力侧重于OSI方面。 到目前为止,我看到以下大块的工作:
还有什么我应该关注的? 该驱动程序是进行硬件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 @等)。