驱动添加设备节点/sys/class/
来源:互联网 发布:泸州市网络问政 编辑:程序博客网 时间:2024/05/16 14:20
现在我有一个驱动文件xxx.c 编译加载后可以在 /dev/ 看到已经加载ok ,现在想要添加 sys/class/ 的设备节点 ,就是想做这件事情而已
假如 现在需要添加一个 gpio节点,配置gpio_control的属性文件接口
比如 echo 1 > /sys/class/gpio/gpio_control 可以设置某个io高电平
#include <linux/cdev.h>
。。。
+struct class *my_class;
+struct cdev mydev;
+int gpio_major = 240;
+int gpio_minor = 0;
第一步是devno
dev_t devno;
devno = MKDEV(gpio_major, gpio_minor);
if (gpio_major)
{
result = register_chrdev_region(devno,number_devices, "gpio");
} else
{
result =alloc_chrdev_region(&devno, 0, number_devices,"gpio");
gpio_major = MAJOR(devno);
}
第二步是mydev
cdev_init(&mydev, &gpio_fops);
mydev.owner = THIS_MODULE;
cdev_add(&mydev , devno , 1);
第三步是生成节点
my_class = class_create(THIS_MODULE, "gpio"); //生成节点
device_create(my_class, NULL, MKDEV(gpio_major,gpio_minor), NULL, "gpio");
第四步生成节点文件
我们准备添加的文件的名字是gpio_control
class_create_file(my_class, &class_attr_gpio_control);
在class_attr_gpio_control
这个文件可以链接到my_gpio_control 函数
static CLASS_ATTR(gpio_control, 0666,NULL, my_gpio_control);
函数的格式
static ssize_t my_gpio_control(struct class *cls,struct class_attribute *attr, const char *_buf, size_t _count)
{
int cmd = 0;
cmd = simple_strtol(_buf, NULL, 10);
switch(cmd)
{
case 1:
gpio_direction_output(gpio, 1);
break;
。。。
default:
break;
}
return _count;
}
这部分的code的添加可以放到 probe 也可以放到 init,加载驱动的时候运行了就可以
然后启动后可以看到/sys/class/gpio/gpio_control 文件
echo 1 > /sys/class/gpio/gpio_control
就可以控制io 输出高电平
这样做的好处可以看一下参数,比如很多mtd参数或者是其他驱动类似
还有就是一些 cmd可以手动简单设置,不用在写一个应用或者app上层jni 的搭建。
读的函数也可以自行添加。
- 驱动添加设备节点/sys/class/
- Linux设备驱动--添加设备节点
- linux驱动自动添加设备节点
- 读取设备节点/sys/class/XX :Android java.io.FileNotFoundException: open failed: EACCES (Permission denied)
- 驱动设备模型---sys文件系统
- 驱动设备模型---sys文件系统
- 在Linux DeviceTree添加dtsi文件并在驱动中读取节点信息写入sys文件系统
- sys/class 下文件节点创建实例
- sys/class文件节点的制作
- 在/sys/class下创建访问节点
- 设备驱动之class
- TP驱动的sys节点建立
- TP驱动的sys节点建立
- TP驱动的sys节点建立
- 驱动学习--SYS属性节点创建
- Android驱动利用sys节点进行调试
- Linux设备节点、设备和设备驱动
- /sys/bus一个总线设备驱动
- Python3.0+学习记录-字典
- matlab 图像处理--高斯滤波器
- 反射的简单介绍
- Spring3.X jdk8 java.lang.IllegalArgumentException
- Go标准容器之List
- 驱动添加设备节点/sys/class/
- hdu1869—六度分离(floyed)
- C#知识点
- JS高级---原型链(一看就懂,但18岁以下请绕道)
- 数据结构——C1.1 数据结构的概念
- 一些访谈
- 游戏的物理和数学:Unity中的弹道和移动目标提前量计算
- python学习之——常见错误汇总
- CaffeOnSpark安装和使用教程系列三:集群环境下使用CaffeOnSpark进行MNIST数据集的测试