我改變內核空間變量,如何接取並從用戶空間
我以前發佈的查詢,我重複同樣的我想修改的IGMPv3(Linux)的 這是kernel2.6內置.--以便它從文件讀取一個值,並適當地決定主機發送的igmpv3工作區內的保留(res 1)值。
我想添加更多的上述問題,說這更多的是從用戶空間變更內核空間的變量 的通用問題。
在此先感謝您的幫助。
問候,
Bhavin
我改變內核空間變量,如何接取並從用戶空間
我以前發佈的查詢,我重複同樣的我想修改的IGMPv3(Linux)的 這是kernel2.6內置.--以便它從文件讀取一個值,並適當地決定主機發送的igmpv3工作區內的保留(res 1)值。
我想添加更多的上述問題,說這更多的是從用戶空間變更內核空間的變量 的通用問題。
在此先感謝您的幫助。
問候,
Bhavin
所以通常不能。只有在/proc
和/sys
或通過模塊參數暴露的結構才能在用戶空間中修改。
從用戶登陸程序的角度來看,您應該將驅動程序視爲具有定義良好的接口的「黑匣子」,而不是帶有要更改的變量的代碼。使用這個心智模型,有四種方法(即接口)將控制信息傳遞給驅動程序,您應該考慮:
sysfs
稍微麻煩一些。proc
過程信息僞文件系統。 proc
在/proc
目錄中創建文件,用戶登陸程序可以讀取並且有時可以寫入。過去,這個界面被用來與司機溝通。儘管proc
看起來與sysfs
類似,但更新的驅動程序(Linux 2.6)應該使用sysfs
,因爲proc
的目的是報告進程的狀態。sysfs
是一個僞文件系統,用於導出有關驅動程序和設備的信息。有關更多詳細信息和代碼示例,請參閱內核文檔(Documentation/filesystems/sysfs.txt)。對於您的特殊情況,請注意「存儲」方法。取決於當你需要與司機(即初始化,運行時間)進行溝通,你應該添加任何新的命令行選項或一個新sysfs
項更改驅動程序如何處理在保留字段的值數據包。
關於filp_open
,函數的評論是
/**
* This is the helper to open a file from kernelspace if you really
* have to. But in generally you should not do this, so please move
* along, nothing to see here..
*/
意味着還有比這更好的方式做你想做的。關於爲什麼驅動程序通常不應該打開文件的更多信息,請參閱this SO question。
如果我們在內核的igmpv3文件中使用filp_open,get_fs()和set_fs()並編譯linux,該怎麼辦。 – bhavin 2010-04-08 11:57:11