我试图学习如何编写sysfs模块,并对基本初始化感到困惑。在查看kobject.h文件的这文档中,有几个与创建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, ...);struct和struct非常简单,但是我不明白*父kobj_type和*fmt应该是什么。
此外,在初始化这些对象之后,我需要在exit_module函数中删除它们,但是有两个选项似乎是可能的: kobject_del和kobject_puts。它们之间有什么区别呢?
我混淆的部分原因是,在搜索答案时,我看到了一些教程,其中说要使用像kobject_register这样的函数,但是这个函数实际上并不存在。
发布于 2017-01-21 17:28:03
是的,在主线内核上有很多例子,您可以为您的实现提供参考。对于您的怀疑,我将添加一些示例代码“
模块探针/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模块实现,并随时提供帮助。
发布于 2017-01-20 21:41:44
有许多内核模块创建sysfs条目。例如,br.c这个模块使用kobject_create_and_add(),它作为参数获取由sysfs_create_group()创建的kobject实例。我相信,查看这样的模块,并按照该模块中的模式一步一步地编写代码,会有所帮助。还可以在http://lxr.free-electrons.com/source/Documentation/kobject.txt中查看
拉米·罗森
https://stackoverflow.com/questions/41776495
复制相似问题