【问题标题】:Porting PCIe driver from Linux to FreeBSD将 PCIe 驱动程序从 Linux 移植到 FreeBSD
【发布时间】:2015-08-22 12:33:16
【问题描述】:

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

好消息是驱动程序被划分为独立于操作系统的“库”层(OSI)和依赖于操作系统的层,因此它已经有一个“框架”允许将其移植到其他操作系统上,我希望大多数努力将集中在 OSI 方面。到目前为止,我看到了以下大块的工作:

  1. init 代码,即将驱动程序“插入”到的特定于操作系统的代码 系统(类似于 Linux 中的 init_module、cleanup_module 所做的)
  2. 内核的 PCI 核心子系统中的代码注册驱动程序
  3. 字符驱动注册码 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


【解决方案1】:

2011 年,Jeff Roberson(以及后来的 Mellanox)在将 Linux InfiniBand 驱动程序移植到 FreeBSD 时,添加了一些 shim 来简化 Linux 驱动程序的移植,这使得大部分代码都可以按原样使用。所以,假设我是 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章详细介绍了设备司机。

大多数设备驱动程序只是为了适应操作系统接口而封装的硬件操作,因此如今分层良好的驱动程序应该相对容易移植。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-19
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-27
    相关资源
    最近更新 更多