我试图学习如何编写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这样的函数,但该函数实际上并不存在。
答案 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
拉米罗森