2010-04-08 37 views
0

我改變內核空間變量,如何接取並從用戶空間

我以前發佈的查詢,我重複同樣的我想修改的IGMPv3(Linux)的 這是kernel2.6內置.--以便它從文件讀取一個值,並適當地決定主機發送的igmpv3工作區內的保留(res 1)值。

我想添加更多的上述問題,說這更多的是從用戶空間變更內核空間的變量 的通用問題。

在此先感謝您的幫助。

問候,

Bhavin

回答

1

所以通常不能。只有在/proc/sys或通過模塊參數暴露的結構才能在用戶空間中修改。

+0

如果我們在內核的igmpv3文件中使用filp_open,get_fs()和set_fs()並編譯linux,該怎麼辦。 – bhavin 2010-04-08 11:57:11

2

從用戶登陸程序的角度來看,您應該將驅動程序視爲具有定義良好的接口的「黑匣子」,而不是帶有要更改的變量的代碼。使用這個心智模型,有四種方法(即接口)將控制信息傳遞給驅動程序,您應該考慮:

  • 命令行選項。您可以將參數傳遞給初始化期間可用的內核模塊。
  • IOCTLs。這是將控制信息傳遞給驅動程序的傳統方式,但這種機制比使用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

相關問題