sys/class文件节点的制作

来源:互联网 发布:键盘侠网络暴力的危害 编辑:程序博客网 时间:2024/05/21 08:02

制作一个/sys/class/下的文件节点;

1. 定义变量

struct class *oled_bklight_class;struct device *oled_bklight_dev;

2.  定义需要操作的函数;

static ssize_t oled_bklight_show(struct device *dev,                                     struct device_attribute *attr, char *buf){    return sprintf(buf, "%s ok\n", __func__);}static ssize_t oled_bklight_store(struct device *dev,                                      struct device_attribute *attr, const char *buf, size_t size){    switch (buf[0])    {    case '0':        printk(KERN_INFO "%s: turn off bklight\n", __func__);        ssd1305fb_full_screen(global_par, 0);        gpio_set_value(global_par->bklight, 0);        break;    case '1':        printk(KERN_INFO "%s: turn on bklight\n", __func__);        ssd1305fb_update_display(global_par);        gpio_set_value(global_par->bklight, 1);        break;    default:        printk(KERN_INFO "%s: err paramater\n", __func__);        break;    }    return size;}static struct device_attribute oled_bklight_on_off_attr = {.attr = {.name = "oled_bklight_on_off",.mode = S_IRUSR | S_IWUSR,},.show = oled_bklight_show,.store = oled_bklight_store,};

3.  创建节点:

    oled_bklight_class = class_create(THIS_MODULE, "oled_bklight");    if (IS_ERR(oled_bklight_class))    {        dev_err(&client->dev, "Failed to create class!\n");    }    oled_bklight_dev = device_create(oled_bklight_class, NULL, 0, NULL, "enable");    if (device_create_file(oled_bklight_dev, &oled_bklight_on_off_attr) < 0)    {        dev_err(&client->dev, "Failed to create device file(%s)!\n", oled_bklight_on_off_attr.attr.name);    }

4. remove掉创建的节点:

    device_create_file(oled_bklight_dev, &oled_bklight_on_off_attr);    device_destroy(oled_bklight_class, 0);    class_destroy(oled_bklight_class);



0 0
原创粉丝点击