我在Linux上编写了一个相当大的PCIe驱动程序,现在我需要在FreeBSD上移植它.我还不知道BSD版本,但我认为在这一点上它是无关紧要的,因为我想了解一般在移植过程中必须修改哪些主要项目.
好处是驱动程序被分区为独立于操作系统的“库”层(OSI)和操作系统,因此它已经有一个“框架”允许将其移植到其他操作系统上,我希望大部分工作都是专注于OSI方面.到目前为止,我看到了以下大块工作:
> init代码,即将“插入”驱动程序的特定于操作系统的代码
system(类似于init_module,cleanup_module在Linux中的作用)
>代码在内核的PCI核心子系统中注册驱动程序
>字符驱动程序注册码4)DMA操作
我还应该注意什么?此驱动程序是一个进行硬件加密的设备,因此它是卸载设备(来自NIC的入口数据包正常进入系统,然后转移到设备).
如果有有用的Web链接来描述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,here还有另一个快速入门文档,对那些已经熟悉驱动程序编写的人有帮助.
如果您希望从头开始,我认为FreeBSD Architecture Handbook将是一个有用的起点.
此外,还有Kirk McKusick,Robert Watson和George Neville-Neil的书,题为“FreeBSD操作系统的设计和实现”,此时的最新版本是第2版,第8章是详细的设备驱动程序.
大多数设备驱动程序只是硬件操作的包装器以适应OS接口,因此如今,分层良好的驱动程序应该相对容易移植.
如果您有疑问,或者是硬件供应商,您还可以加入各种FreeBSD邮件列表(freebsd-drivers @等).