编写Sysfs模块

时间:2017-01-20 14:30:40

标签: linux linux-kernel sysfs

我试图学习如何编写sysfs模块,并对基本初始化感到困惑。在查看kobject.h文件的this文档中,有几个与创建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 kobject和struct kobj_type非常简单,但我不明白* parent kobject和* fmt cstring应该是什么。

此外,在初始化这些对象之后,我需要在exit_module函数中删除它们,但是有两个看起来可能的选项:kobject_del和kobject_puts。这些之间有什么区别?

我的一些困惑来自这样一个事实:当谷歌搜索答案时,我看到教程说使用像kobject_register这样的函数,但该函数实际上并不存在。

2 个答案:

答案 0 :(得分:2)

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

模块探测/初始化功能

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模块实现,并随时提供任何帮助。

答案 1 :(得分: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

拉米罗森

相关问题