2017-01-20 115 views
1

我試圖學習如何編寫一個sysfs模塊,並對基本初始化感到困惑。在查看kobject.h文件的this文檔中,有幾個與創建sysfs條目相關的不同功能。編寫一個Sysfs模塊

從它的外觀,功能「kobject_init_and_add」好像使用了正確的事情,這需要執行以下操作:

90 int kobject_init_and_add(struct kobject *kobj, 
91       struct kobj_type *ktype, struct kobject *parent, 
92       const char *fmt, ...); 

結構的kobject和結構kobj_type是簡單的就夠了,但我不明白*父母kobject和* fmt cstring應該是什麼。另外,在初始化這些對象之後,我需要在exit_module函數中刪除它們,但有兩個選項似乎是可能的:kobject_del和kobject_puts。這些有什麼區別?

我的一部分混亂來自這樣一個事實,即雖然用Google搜索答案,但我看到的教程說使用kobject_register之類的函數,但實際上並不存在。

回答

2

是有關於主線內核許多實例,你可以指你implementatin。對於你的疑惑我加入了一些示例代碼」

模塊探測器/ init函數

static struct kobject *module_kobject; 
module_kobject=kobject_create_and_add("module_status",NULL); 
sysfs_create_group(module_kobject,&module_attr); 

模塊刪除/退出功能

sysfs_remove_group(module_kobject,&module_attr); 
kobject_put(module_kobject); 

如果你想揭露不止用戶空間上的一個屬性;比您需要定義組還要好

static struct attribute_group module_attr={ 
.attrs = module_attribute, 
}; 

有一些更多的實施和功能,您可能需要像:

static ssize_t module_show_status(struct kobject *kobj,struct kobj_attribute *attr,char *buf); 
static ssize_t module_store__status(struct kobject *kobj,struct kobj_attribute *attr,const char *buf,size_t len); 

我想你可以根據上面的代碼開始你的sysfs模塊實現和隨意的任何幫助。

+0

因此,對於像sysfs_create_group示例中的&module_attr這樣的屬性,其中是否定義了&module_attr?因爲那似乎是我遇到麻煩的地方。我讀過你可以使用__ATTR宏,但這對我造成了錯誤。 – Zephyr

+0

您可以像下面的結構那樣定義 static struct attribute_group module_attr = { 。attrs = module_attribute, }; –

+0

瞭解,我的問題是,你使用的'module_attribute'是否需要事先定義,或者只是聲明? – Zephyr

0

有很多內核模塊可以創建sysfs條目。例如, http://lxr.free-electrons.com/source/net/bridge/br_sysfs_br.c 該模塊使用kobject_create_and_add(),該函數將sysfs_create_group()創建的參數作爲kobject實例。我相信,看看這個模塊,並試圖按照模塊中的模式逐步編碼,可以提供幫助。也期待在 http://lxr.free-electrons.com/source/Documentation/kobject.txt

拉米·羅森

+0

謝謝,我會試試這個。你知道任何這樣的例子,我可以看看實例化屬性?上面鏈接的sysfs有一個實例,其中幾個屬性一起綁定到一個屬性組中,然後進行分配,但我不太瞭解如何創建這些屬性。 – Zephyr