首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >编写Sysfs模块

编写Sysfs模块
EN

Stack Overflow用户
提问于 2017-01-20 14:30:40
回答 2查看 2.1K关注 0票数 1

我试图学习如何编写sysfs模块,并对基本初始化感到困惑。在查看kobject.h文件的文档中,有几个与创建sysfs条目相关的不同函数。

从它的外观来看,函数"kobject_init_and_add“似乎是正确的用法,它需要以下内容:

代码语言:javascript
复制
 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这样的函数,但是这个函数实际上并不存在。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-01-21 17:28:03

是的,在主线内核上有很多例子,您可以为您的实现提供参考。对于您的怀疑,我将添加一些示例代码“

模块探针/init函数

代码语言:javascript
复制
static struct kobject   *module_kobject;
module_kobject=kobject_create_and_add("module_status",NULL);
sysfs_create_group(module_kobject,&module_attr);

模块删除/退出函数

代码语言:javascript
复制
sysfs_remove_group(module_kobject,&module_attr);
kobject_put(module_kobject);

如果要在用户空间中公开多个属性,则也需要定义组。

代码语言:javascript
复制
static struct attribute_group module_attr={
.attrs = module_attribute,
};

您可能需要更多的实现和功能,例如:

代码语言:javascript
复制
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模块实现,并随时提供帮助。

票数 2
EN

Stack Overflow用户

发布于 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中查看

拉米·罗森

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41776495

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档