2013-02-06 67 views
1

這是我的實驗任務之一:我要在這裏建立一個proc入口:的/ proc/sys目錄/內核/我必須寫一個系統調用來操縱一個用戶空間變量,用於我剛剛添加的proc條目的不同值。例如,用戶空間變量爲1,proc項爲0或1.現在系統調用應該將用戶空間變量加1(如果proc項爲0/off)或將其乘以2(如果proc項是1/on)在內核空間如何訪問內核參數

我做了以下操作來添加proc條目:我通過在kernel/sysctl.c文件的kernel ctl table部分下添加一個struct來創建了一個xxx條目。編譯內核,系統用這個內核啓動。該條目還作爲/ proc/sys/kernel/xxx添加到proc目錄中。 我現在能夠從用戶空間讀取或寫入它。我做了貓和回聲讀寫resp。

我在系統調用中做了如下操作:我寫了一個系統調用來讀取用戶空間變量。我還完成並測試了access_ok,copy_from用戶,copy_to_user等等。我還完成了操作用戶空間變量以始終增加(現在)。

問題我面臨:現在,我必須添加一個if條件來檢查「xxx」值以決定是否應增加或乘以用戶空間變量。這是我卡住的地方。不用寫系統調用。我不知道如何閱讀這個proc條目「xxx」。

  1. 我可以使用文件處理嗎?
  2. 如果是這樣,我應該在我的系統調用中使用open()系統調用嗎?它會起作用嗎?

當我檢查,有sysctl的系統調用,但現在看來過時了。這IBM tutorial談到閱讀proc條目。但是create_proc_entry不適用於/ proc/sys/kernel目錄裏面的參數吧?如果是這樣,我該如何使用讀取proc入口函數?

+0

還有另一個[問題](http://stackoverflow.com/questions/4400200/how-to-read-write-from-to-a-linux-proc-file-from-內核空間)與此類似,但他們特別使用create_proc_entry作爲/ proc下的條目。但是,我直接編輯sysctl.c以獲取/ proc/sys/kernel下的條目。所以,我不確定這個答案在這裏也適用。 –

+1

您可以創建一個將被導出的變量(對其他內核翻譯單元可見)並將反映參數的當前值。你將不得不在你實現的新的sysctl處理程序中更新它,並添加系統調用來讀取它的值。如果您的問題更具體,請隨時更新問題。 –

+0

@MichaelFoukarakis我對此很新穎。那麼你能解釋一下嗎,你的意思是由變量和sysctl處理程序嗎?我編輯了這個問題,以更好地解釋我做了什麼以及我在找什麼。 –

回答

1

「但是,現在我必須編寫系統調用來讀取xxx的值。」

我懷疑術語「系統調用」是正式使用的,而且您被要求向內核添加一個新的系統調用(類似於open,read,mmap,signal等)值。

參見Adding a new system call in Linux kernel 3.3

+0

是的,在形式上,我必須編寫一個系統調用並將其添加到內核中。我知道如何將它添加到內核。我編輯了這個問題,更具體一些。請看一下。謝謝 –