2014-07-22 45 views
1

我正在編寫一個內核模塊,需要在另一個設備(「目標」設備)上執行相當於ioctl的內核模塊。目標設備是安裝在dev/something處的輸入設備。從內核模塊獲取對輸入設備的引用

我知道一種方法是從我的模塊打開目標設備,然後按照this SO question中所述調用ioctl。但是我明白這是一個黑客攻擊,並且可能有更好的方法。

是否有可能從我的內核模塊檢索到struct *input_dev,給定目標模塊名稱或目標設備的安裝點?

+0

爲什麼需要你的代碼需要一個內核模塊? –

+0

如果它內置到內核中,它會有幫助嗎?我看到了同樣的問題。 – Grodriguez

+0

對不起,爲什麼需要你的代碼在內核中? –

回答

1

選項1: 打開目標設備節點的第一個選項是更好的選擇。 我以前做過2-3次。 但是,它只有在文件系統安裝完畢後才能使用,然後測試模塊才能打開該模塊。

struct file* test; 
test = filp_open("/dev/targetDevice",O_RDWR,0); 

現在,在通話的ioctl

test->f_op->unlocked_ioctl(test,IOCTL_MACRO,params); 

選項2:

另一種解決方案,我在想,如果目標模塊是你的控制之下,然後從該目標模塊,使該指針EXPORT_SYMBOL()並訪問您的測試模塊。

選項3:

另一種選擇是,而不是出口的該指針結構只是出口目標模塊的任何功能,並執行從該任務所需。

+0

你能舉一些例子代碼嗎? (順便說一句,目標模塊不在我的控制之下) – Grodriguez

+0

@Grodriguez如果不能在目標模塊中進行更改,那麼我的兩個建議都沒有用。 –

+0

爲什麼我需要控制目標模塊才能打開設備節點? – Grodriguez