2015-08-22 51 views
2

我有寫在/爲Linux一個相當大的PCIe驅動程序,現在我需要將它移植在FreeBSD。我還不知道BSD版本,但我認爲在這一點上它是無關緊要的,因爲我希望大致瞭解在移植過程中必須修改哪些主要項目。移植的PCIe驅動程序從Linux到FreeBSD的

好的是,驅動程序被劃分爲與操作系統無關的「庫」層(OSI)和操作系統相關的,因此它已經有了一個允許將其移植到其他操作系統上的「框架」,我希望大部分這些努力將側重於OSI方面。到目前爲止,我看到了以下工作大塊:

  1. 初始化代碼,即在特定的操作系統的代碼是「塞」司機到 系統(類似於init_module的,在cleanup_module確實在Linux中)
  2. 代碼在內核
  3. 字符驅動程序的註冊碼的PCI核心子系統註冊驅動器4)DMA操作

還有什麼我應該注意什麼?該驅動程序是進行硬件加密的設備,因此它卸載了設備(從NIC進入數據包後正常進入系統,然後轉向設備)。

如果有有用的網頁鏈接到BSD驅動發展的描述/移植(類似於LDD),我會高興地接受它:)

+2

在[手冊](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

+0

@kdhp,感謝您的評論。編寫FreeBSD 6.x和9.x/10.x版本驅動程序是否有重大差異? – Mark

+1

'/ usr/share/examples/kld/cdev/module'中的最新文件已經9年了,所以_basics_應該是相同的。值得注意的是,在FreeBSD源代碼樹中有許多許可的許可示例,包含很長的SVN歷史記錄。另外,第9部分的手冊頁是「FreeBSD內核開發者手冊」的一部分,大多數內核API在那裏被記錄。 – kdhp

回答

7

在2011年,傑夫·羅伯遜(後來Mellanox公司)增加了一些墊片來輕鬆移植Linux驅動程序,這使得大部分代碼可以按原樣使用,當他將Linux InfiniBand驅動程序移植到FreeBSD時。因此,假設我是從Linux驅動開發世界一些新人,我會通過看開始:

https://svnweb.freebsd.org/base/head/sys/ofed/include/linux/

在哪裏,你會發現許多的實現所需的Linux驅動程序的API和他們的FreeBSD的天然對應。

有約翰 - 馬克,here,對於那些誰已經熟悉的司機寫作有幫助的另一種快速啓動文件。

如果您願意從頭開始,我覺得FreeBSD Architecture Handbook將是一個有益的起始點。

此外,還有Kirk McKusick,Robert Watson和George Neville-Neil編寫的題爲「FreeBSD操作系統的設計和實現」的書,此時的最新版本是第2版,第8章詳細說明設備驅動程序。

大多數設備驅動程序僅僅是硬件操作的包裝,以適應OS接口,因此一個良好分層驅動程序應該是比較容易移植時下。

如果您有疑問,或者是硬件的供應商,你也可以加入各種郵件列表裏(FreeBSD的司機@等)。

相關問題