我是Linux內核模塊編程的新成員。從我迄今閱讀材料,我已經發現,有3種方式爲用戶程序來請求服務或/ dev中 我們對用戶程序和Linux內核模塊之間的通信有什麼選擇?
- 設備文件進行通信在/ proc文件系統
- ioctl()調用
問題:我們對用戶程序和Linux內核模塊之間的通信有什麼其他選擇?
我是Linux內核模塊編程的新成員。從我迄今閱讀材料,我已經發現,有3種方式爲用戶程序來請求服務或/ dev中 我們對用戶程序和Linux內核模塊之間的通信有什麼選擇?
問題:我們對用戶程序和Linux內核模塊之間的通信有什麼其他選擇?
您的選項3)實際上是選項1)的子選項 - ioctl()
是與設備文件交互的一種方式(read()
和write()
是常用方式)。
兩個值得考慮其他的方法是:
sysfs
文件系統;基本上,許多標準的IPC機制 - 比較。 http://en.wikipedia.org/wiki/Inter-process_communication - 可用於:
文件和存儲器映射的文件:設備文件(如上述)或類似的特殊文件中的/ dev,PROCFS,sysfs中,debugfs,或自己的文件系統,笛卡兒積具有讀/寫,IOCTL,MMAP
可能信號(使用與KTHREAD)
套接字:使用所選擇的協議:TCP,UDP(CF 。knfsd
,但可能不會太容易),PF_LOCAL,或網絡鏈路(多子接口 - 基礎網絡鏈路,genetlink,連接器,...)
此外,
4. 系統調用(不雖然真的可以使用)
5. 網絡接口(類似於tun)。 //git.netfilter.org/libmnl(用戶空間側)
工作網絡鏈路的例子 - - 僅舉幾可以在例如
您的權利鏈接包含大量有用的信息,但鏈接不是答案。請參閱http://stackoverflow.com/questions/how-to-answer這解釋了爲什麼簡單鏈接不是我們想要的。 – stsquad 2012-01-12 12:32:06
我回答了你的「」我們有什麼其他的選擇用於用戶程序和linux內核模塊之間的通信?「」問題的一部分..如果你問了其他選項,它們是如何工作的,我會寫幾個關於他們的網頁,我爲什麼給你這個鏈接,因爲它有他們的工作實例,我認爲這是自我解釋。 – Santi1986 2012-01-16 10:09:07
由於stackoverflow頁面解釋了外部頁面的鏈接可能是暫時的。如果鏈接頁面消失,答案突然變得毫無用處。沒有人建議你需要寫一篇文章,但總結選項會使它成爲一個更有用的答案。 – stsquad 2012-01-16 14:30:12
This Linux document給出了一些的,其中內核和用戶空間可以互動的方式(通信)。他們是以下。
Procfs
,sysfs
和類似的機制。這也包括/dev
條目,以及內核空間在用戶空間中公開文件的所有方法(/ proc,/ dev等等,條目基本上是從內核空間公開的文件)。Socket
based mechanisms。 Netlink
是一種套接字,專門用於用戶空間和內核空間之間的通信。System calls
。Upcalls
。內核在用戶空間中執行代碼。例如產生一個新的過程。mmap
- 存儲器映射內核存儲器的區域到用戶空間。這允許內核和用戶空間讀/寫同一個內存區域。除了這些,下面的列表中增加了我知道的一些其他機制。
Interrupts
。用戶空間可以引發中斷與內核空間通信。例如,一些CPU使用int80
進行系統調用(而其他CPU可能使用不同的機制,如syscall
指令)。內核必須事先定義相應的中斷處理程序。vDSO/vsyscall
- 這些都是在Linux內核機制以優化一些系統調用的執行。這個想法是有一個共享內存區域,當進程進行系統調用時,用戶空間庫從該區域獲取數據,而不是實際調用相應的系統調用。這節省了上下文切換開銷。
網絡鏈路插座看好,但一直沒能找到它使用的netlink套接字工作的例子。管理寫我自己但仍然很多問題沒有答案。 – binW 2010-07-23 11:18:03