本文共 1731 字,大约阅读时间需要 5 分钟。
制作一个/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);
转载地址:http://zpngi.baihongyu.com/