gpt4 book ai didi

linux - 编写 Sysfs 模块

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:08:28 28 4
gpt4 key购买 nike

我正在尝试学习如何编写 sysfs 模块,但对基本的初始化感到困惑。在 this查看 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 kobject 和 struct kobj_type 足够简单,但我不明白 *parent kobject 和 *fmt cstring 应该是什么。

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

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

最佳答案

是的,在主线内核上有很多示例,您可以引用这些示例来实现。对于您的疑问,我添加了一些示例代码”

模块探测/初始化函数

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

关于linux - 编写 Sysfs 模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41776495/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com