博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
sys/class文件节点的制作
阅读量:4284 次
发布时间:2019-05-27

本文共 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/

你可能感兴趣的文章
OK6410A 开发板 (八) 18 linux-5.11 OK6410A start_kernel 功能角度 第二阶段之idle进程
查看>>
OK6410A 开发板 (八) 19 linux-5.11 OK6410A start_kernel 功能角度 第三阶段之init进程
查看>>
OK6410A 开发板 (八) 20 linux-5.11 OK6410A start_kernel 功能角度 第三阶段之kthreadd进程
查看>>
OK6410A 开发板 (八) 21 linux-5.11 OK6410A schedule 的 __switch_to 部分
查看>>
OK6410A 开发板 (八) 22 linux-5.11 OK6410A start_kernel 功能角度 第一阶段
查看>>
OK6410A 开发板 (八) 23 linux-5.11 OK6410A start_kernel 功能角度 第二阶段
查看>>
OK6410A 开发板 (八) 24 linux-5.11 OK6410A start_kernel 功能角度 第三阶段
查看>>
OK6410A 开发板 (八) 25 linux-5.11 OK6410A 进程角度 裸机和进程的区别
查看>>
getopt 解析
查看>>
文章标题
查看>>
linux前后台切换
查看>>
nmap
查看>>
uboot执行顺序main_loop
查看>>
uboot编译内容详解
查看>>
uboot Makefile 分析
查看>>
uboot网络验证
查看>>
烧写uboot
查看>>
QT安装
查看>>
QtCreator介绍
查看>>
QT工程实例
查看>>