我有写在/为Linux一个相当大的PCIe驱动程序,现在我需要将它移植在FreeBSD。我还不知道BSD版本,但我认为在这一点上它是无关紧要的,因为我希望大致了解在移植过程中必须修改哪些主要项目。移植的PCIe驱动程序从Linux到FreeBSD的
好的是,驱动程序被划分为与操作系统无关的“库”层(OSI)和操作系统相关的,因此它已经有了一个允许将其移植到其他操作系统上的“框架”,我希望大部分这些努力将侧重于OSI方面。到目前为止,我看到了以下工作大块:
- 初始化代码,即在特定的操作系统的代码是“塞”司机到 系统(类似于init_module的,在cleanup_module确实在Linux中)
- 代码在内核
- 字符驱动程序的注册码的PCI核心子系统注册驱动器4)DMA操作
还有什么我应该注意什么?该驱动程序是进行硬件加密的设备,因此它卸载了设备(从NIC进入数据包后正常进入系统,然后转向设备)。
如果有有用的网页链接到BSD驱动发展的描述/移植(类似于LDD),我会高兴地接受它:)
在[手册](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
@kdhp,感谢您的评论。编写FreeBSD 6.x和9.x/10.x版本驱动程序是否有重大差异? – Mark
'/ usr/share/examples/kld/cdev/module'中的最新文件已经9年了,所以_basics_应该是相同的。值得注意的是,在FreeBSD源代码树中有许多许可的许可示例,包含很长的SVN历史记录。另外,第9部分的手册页是“FreeBSD内核开发者手册”的一部分,大多数内核API在那里被记录。 – kdhp