2013-04-20 73 views
5

獲得在Linux內核模塊得到指針在Linux內核模塊的現有設備類(結構類)

大家好現有設備類(struct class)指針!

我試圖在現有的設備類註冊的設備,但我有麻煩,取得指向現有的類。內核版本是Linux 3.3.6。 我可以在一個模塊中創建一個類,得到的指針,然後用它來將設備與註冊:

*cl = class_create(THIS_MODULE, className); 
dev_ret = device_create(*cl, NULL, *dev, NULL, driverName); 

但是我需要註冊與其他模塊相同的類另一設備,但我不能找不到獲取指向現有類的指針的方法。而且我無法在其他模塊中再次創建類,因爲因爲類已存在,所以class_create返回NULL,而不是指向device_create所需的類的指針。 我發現:

http://lwn.net/Articles/102500/

,通過它的名字返回一個指向A類功能:

struct class * class_find(char * name) 

然而,當我嘗試編譯功能編譯器說,它不存在。 我認爲這個函數是由內核導出的(我的模塊有許可證GPL),但它似乎不是。 也許我需要包含一些標題?

我試過,因爲其代碼列表上面的鏈接改寫這個功能。但是,當我試圖遍歷超過class_subsys

list_for_each_entry(this_class, &class_subsys.kset.list, subsys.kset.kobj.entry) 

現在符號class_subsys是找不到的。我再次認爲它被導出到內核。

我不確定缺少什麼。某些標題? 我做錯了嗎? 還有另外一個功能可以做到嗎?

我想,如果我能穿越sysfs從開始我能得到一個指向現有的類。 但我也沒有找到如何開始遍歷sysfs。 我見過的所有函數都需要一個指向kobjectkset的指針來開始遍歷。但我沒有指針,甚至沒有指向sysfs或內核對象的根目錄,所以我無法開始遍歷樹來獲取類指針。

任何人都可以指出我正確的方向嗎?

+1

你所引用的鏈接描述了從未進入Linux內核補丁 - 這就是爲什麼你不能調用'class_find'。這裏是相關的LKML線程:https://lkml.org/lkml/2004/9/16/83。 – 2014-03-26 17:50:35

+0

嗨,你有沒有解決這個問題?我也陷入了這個問題。 – xianyu1337 2014-05-21 12:30:09

回答