2010-07-14 60 views
5

我需要編寫一個不是設備驅動程序的內核模塊。該模塊將與某些用戶空間進程進行通信。因爲我不想使用ioctl(),所以我在/ proc目錄中創建文件或在/ dev目錄中創建設備文件。何時使用/ proc和何時/ dev

問題:我如何在/ proc和/ dev之間做出決定。這只是一個判斷呼籲,還是在使用這兩個方面有任何不成文的協議。

+0

正如sarnold指出,/ dev /中表示的對象不一定是「真正的「設備。如果您的驅動程序暴露POSIX類型的接口(打開/讀取/寫入),則沒有理由不使用它。 你計劃在用戶和內核空間之間進行什麼樣的通信? – stsquad 2010-07-14 11:07:20

+0

我們軟件的一部分會造成太多影響系統性能的系統調用。爲了避免這些調用的負擔,我們計劃將其移入內核空間。本質上,內核和用戶空間之間的通信將涉及大量的數據傳輸。如果任何人可以提出任何其他技術解決此問題,我將非常感激。 – binW 2010-07-14 13:02:26

+1

您不太可能會發現內核空間中的系統調用速度顯着加快 - 至少不夠,這樣它們就會超過向內核空間複製大量數據的額外成本。也就是說,調查實現'mmap'的字符設備文件。 – caf 2010-07-14 13:57:42

回答

6

將一個新接口添加到/ proc /中會遇到很多困難。內核開發人員不滿意它已成爲各種接口的傾倒地,除非您實際上通過/ proc/pid /修改了有關進程的某些內容,否則我認爲您將難以說服內核社區接受它。

/dev /中的設備文件可以接受,即使對於不是真正的設備驅動程序的模塊也是如此。 (例如,/ dev/kvm,/ dev/pts,/ dev/ecryptfs,/ dev/fuse,/ dev/kmsg,/ dev/ptmx等)。但是,設備文件太易於操作ioctl ),如果可以的話,我認爲你是對的。

內核圈的當前趨勢是sysfs或自定義文件系統。 sysfs方法基於單值每文件語義,旨在用echo和cat進行操作。如果它適合您,它對用戶來說非常棒。自定義文件系統允許您編寫非常具體的支持二進制的接口,而fs/libfs.c應該可以幫助您根據自己的需要編寫自己的文件系統。 (我不知道誰使用過configfs,但我一直認爲它看起來很整潔,也許它適合你的模塊?)