獲得在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
。 我見過的所有函數都需要一個指向kobject
或kset
的指針來開始遍歷。但我沒有指針,甚至沒有指向sysfs
或內核對象的根目錄,所以我無法開始遍歷樹來獲取類指針。
任何人都可以指出我正確的方向嗎?
你所引用的鏈接描述了從未進入Linux內核補丁 - 這就是爲什麼你不能調用'class_find'。這裏是相關的LKML線程:https://lkml.org/lkml/2004/9/16/83。 – 2014-03-26 17:50:35
嗨,你有沒有解決這個問題?我也陷入了這個問題。 – xianyu1337 2014-05-21 12:30:09