【发布时间】:2015-08-22 12:33:16
【问题描述】:
我有一个相当大的 PCIe 驱动程序在 Linux 上/为 Linux 编写,现在我需要将它移植到 FreeBSD 上。我还不知道 BSD 版本,但我认为这无关紧要,因为我想大致了解在移植工作期间必须修改哪些主要项目。
好消息是驱动程序被划分为独立于操作系统的“库”层(OSI)和依赖于操作系统的层,因此它已经有一个“框架”允许将其移植到其他操作系统上,我希望大多数努力将集中在 OSI 方面。到目前为止,我看到了以下大块的工作:
- init 代码,即将驱动程序“插入”到的特定于操作系统的代码 系统(类似于 Linux 中的 init_module、cleanup_module 所做的)
- 内核的 PCI 核心子系统中的代码注册驱动程序
- 字符驱动注册码 4) DMA 操作
我还应该注意什么?该驱动是做硬件加密的设备,所以它是卸载设备(从网卡进来的数据包正常进入系统,然后转向设备)。
如果有描述 BSD 驱动程序开发/移植(类似于 LDD)的有用网络链接,我很乐意接受:)
【问题讨论】:
-
handbook 中有一个章节,pci devices 中有更具体的部分,FreeBSD 的
/usr/share/examples/kld/cdev中有一个示例。还有像“FreeBSD 操作系统的设计和实现”和“FreeBSD 设备驱动程序:Intrepid 指南”这样的书。 -
@kdhp,感谢您的评论。 FreeBSD 6.x 和 9.x/10.x 版本的编写驱动程序有显着差异吗?
-
/usr/share/examples/kld/cdev/module中的最新文件已有 9 年历史,所以 基础 应该是一样的。值得注意的是,在 FreeBSD 源代码树中有许多具有长期 SVN 历史的许可示例。此外,第 9 节中的手册页是FreeBSD Kernel Developer's Manual的一部分,其中记录了大多数内核 API。
标签: linux freebsd porting device-driver pci-e