2012-06-23 48 views
3

我打算在Linux內核上編寫一個新的設備驅動程序。我打算寫的設備將是一個設備,它將數據傳入另一臺計算機,相同的設備。編寫一個新的Linux設備驅動程序

因此,在短期的設備將是可讀/寫,並應通過network.I溝通知道這聽起來像一個插座,但想法是實現殼接口,這樣,如果你鍵入

[email protected]$ echo "Hi" >> mydevice 

會將Hi這個詞傳送給網絡另一端的系統(並可能將其配置爲存儲文件)。

這是一個閒暇時間的項目,我打算做的,這聽起來很像插座等現有implementations.Well關於設計,設備實現的問題是:

  1. 我應該使用塊或字符設備?我看到的塊設備的優點是,如果我是通過設備啓動完整的文件傳輸(以後我會傾向於支持),那麼速度會很快。
  2. 如何在網絡上寫入數據?我熟悉套接字和東西,但在內核中使用套接字會帶來性能問題(我在某處讀過套接字,畢竟套接字是設計用於用戶空間的)。是否使用netfilter或其他東西工作?也許製作數據包直接會幫助:-)?任何創新都是值得歡迎的
  3. 如何配置驅動程序,比如如何讓它知道它應該連接到用戶空間程序中的特定主機,我們通常通過配置文件完成此操作,但要更改驅動程序的連接設置你如何管理它? (sysfs ??坦率地說,我從來沒有使用過sysfs或proc /)
  4. 現在,因爲設計規定所有的文件傳輸都在內核空間中。當我通過內核空間傳輸大量數據時,它會減慢系統嗎?這個設計不應該讓系統過載,在一個預先優化的內核中這樣做會有所幫助,但是我還應該注意其他一些特性,以使設計儘可能高效(我正在使用最新的Linux內核) ?
  5. 我不想留下巨大的內存印記,所以有什麼辦法可以在傳輸數據時減少它,可能是在磁盤上緩存數據?
  6. 我將不得不設計一個用戶空間程序來協調驅動程序不是我嗎?我不能讓司機獨自完成整個任務,那將是單調乏味的。
+0

經過大量的代碼和文檔之後,我想不出比Linux中的Network Filesystem實現更好的東西。實際上,我的每一個需求都是由這個完成的(除了可能是內核空間部分,不知道nfs如何在這方面工作)。所以現在我已經得出結論,在Linux中構建一個字符驅動程序,它將完成上述幾乎所有的任務。所以問題1下。 – Malice

回答

1

看看linux內核中的tun/tap driver,我認爲它會滿足你的需求。

+1

Tun/tap是一個網絡設備。但是我想創建一個字符/塊設備。有些部分仍然適用謝謝 – Malice

+1

tun/tap像char設備和網絡設備一樣查看用戶空間。所以你可以通過char設備將數據寫入tun/tap,並且它將像內核網絡一樣在內核中進行處理。這不是,你想要什麼? –

相關問題