制作一个/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);