2

我正在尝试为我在 android 中的实现创建一个 sysfs,并坚持在CLASS.

我的要求:

/sys/class/example_class/my_sysfs_directory/file_one.

代码:

    #include<linux/module.h>
    #include<linux/kernel.h>
    #include<linux/device.h>
    #include <linux/err.h>

    MODULE_LICENSE("GPL");
    MODULE_AUTHOR("Manoj");

    static ssize_t sysfs_demo_show(struct class *class,
        struct class_attribute *attr, char *buf)
    {
    pr_info("%s [%d]: \n", __func__, __LINE__);
    return sprintf(buf, "%s \n", __func__);
    }

    static ssize_t sysfs_demo_store(struct class *class,
    struct class_attribute *attr, const char *buf, size_t size)
    {
    pr_info("%s [%d]: \n", __func__, __LINE__);
    return size;
    }

    static CLASS_ATTR(file_one, 0777, sysfs_demo_show, sysfs_demo_store);
    int  sysfs_my_dev_uevent(struct device *dev, struct kobj_uevent_env *env)
    {
    pr_info("%s [%d]: \n", __func__, __LINE__);
    return 0;
    }

    struct class *example_class;

    int sysfs_demo_init(void)
    {
    int ret;
    pr_info("%s [%d]: \n", __func__, __LINE__);
    example_class = class_create(THIS_MODULE, "demo");
    if (IS_ERR(example_class)) {
    pr_err("Failed to create sys_class\n");
    return -1;
    }
    example_class->dev_uevent = sysfs_my_dev_uevent;
    ret = class_create_file(example_class, &class_attr_file_one);
    if (ret) {
    pr_err("Failed to create class file @ parent class dirs\n");
    return -1;
    }
    return 0;
    }

    void sysfs_demo_exit(void)
    {
    pr_info("%s [%d]: \n", __func__, __LINE__);
    class_remove_file(example_class, &class_attr_file_one);
    class_destroy(example_class);
    }


    module_init(sysfs_demo_init);
    module_exit(sysfs_demo_exit);

我在这里粘贴了我的代码,请在这方面帮助我。

4

2 回答 2

4

不建议“手动”创建 sysfs 目录/文件。

每个 sysfs 属性都应该与一个设备相关联。如果您的目标是设备驱动程序,那么您迟早会使用结构体device。这里有一个相关的答案

于 2013-10-30T00:44:25.780 回答
0

请参阅有关如何在内核源代码中完成此操作的示例代码。
samples/kobject/kobject-example.c
您可以通过创建嵌入结构 kobject 的新数据结构并使用 kobject 的父级机制在 sysfs 中创建层次结构。

于 2021-10-06T14:41:45.923 回答