zoukankan      html  css  js  c++  java
  • sysfs参考代码

    #include <linux/module.h>
    #include <linux/types.h>
    #include <linux/kobject.h>
    
    static ssize_t sysfs_read(struct kobject *kobj, struct kobj_attribute *attr, char *buf)
    {
        return sprintf(buf, "%s
    ", "sysfs test read,created by vincent");
    }
    
    static ssize_t sysfs_write(struct kobject *kobj, struct kobj_attribute *attr, const char *buf,ssize_t  count)
    {
        printk("
    from user,length=0x%X,content=%s
    ",count,buf);
        
        if(count)
            return count;
        else
            return 1 ;
    }
    
    //static struct kobj_attribute my_sysfs_read = __ATTR(read, S_IRUGO, sysfs_read, NULL);
    //static struct kobj_attribute my_sysfs_write = __ATTR(write, S_IWUGO, NULL,sysfs_write);
    static struct kobj_attribute my_sysfs_read = __ATTR(aaa, 0664, sysfs_read, NULL);
    static struct kobj_attribute my_sysfs_write = __ATTR(bbb, 0664, NULL,sysfs_write);
    
    static struct attribute *my_sysfs_test[] = {
        &my_sysfs_read.attr,
        &my_sysfs_write.attr,
        NULL,
    };
    
    static struct attribute_group my_attr_group = {
        .attrs = my_sysfs_test,
    };
    
    static int sysfs_status = 0 ;
    
    struct kobject *soc_kobj = NULL;
    
    int my_sysfs_init(void)
    {
        int ret = 0;
    
        printk("my_sysfs_init: %s
    ",__func__);
    
        soc_kobj = kobject_create_and_add("my_sysfs", NULL);
        if (!soc_kobj)
            goto err_board_obj;
    
        ret = sysfs_create_group(soc_kobj, &my_attr_group);
        if (ret)
            goto err_soc_sysfs_create;
        
        sysfs_status = 1;
        /* init func must contain a return vaule,otherwise meet warning when insmod this module */
        return 0;
    
        sysfs_status = 0;
        
    err_soc_sysfs_create:
        kobject_put(soc_kobj);
        sysfs_remove_group(soc_kobj, &my_attr_group);
        printk("
     sysfs_create_group ERROR : %s
    ",__func__);
        return 0;
        
    err_board_obj:
        printk("
     object_create_and_add ERROR : %s
    ",__func__);
        return 0;
    }
    
    void my_sysfs_exit(void)
    {
        printk("
     my_sysfs_exit : %s
    ",__func__);
    
        if(sysfs_status == 1)
        {
            sysfs_status = 0;
            kobject_put(soc_kobj);
            sysfs_remove_group(soc_kobj, &my_attr_group);
        }
    }
    
    MODULE_AUTHOR("derek yi");
    MODULE_LICENSE("Dual BSD/GPL");
    
    module_init(my_sysfs_init);
    module_exit(my_sysfs_exit);
  • 相关阅读:
    显示Unicode 字节的对应字符的小技巧
    apktool 打包解包apk的总结
    Android Studio下载新的AVD映像把C盘给占满了
    微信开发记录
    node.js版本升级
    Cordova+FrameWork7开发简单教程
    centos安装 Falcon+
    centos7安装 go
    bash: /home/aprilpeng/.bashrc: Permission denied
    git push问题 objects/pack/tmp_pack_XXXXXX': Permission denied
  • 原文地址:https://www.cnblogs.com/soul-stone/p/7862980.html
Copyright © 2011-2022 走看看