《驱动开发》创建三个设备节点分别控制三个LED灯

目录

设备节点介绍:

手动创建设备节点:

设备节点文件创建

创建和删除类

创建设备

代码:

demo.c

test.c

myled.h

执行结果:


设备节点介绍:

(1)在linux中一切皆是文件,对上层程序来说设备驱动程序不过就是设备文件,在我们向内核注册好驱动程序后,需要创建对应的设备节点,然后上层应用程序通过读写设备节点的方式去操作硬件;
(2)设备节点本质上就是文件,不是普通类型的文件,是字符设备文件、块设备文件、网络设备文件等特殊文件,但是都是用统一的open、read等函数去操作;
(3)设备节点在"/dev/"目录下。

手动创建设备节点:

(1)在驱动程序注册成功后,可以用mknod命令可以手动创建设备节点;
(2)比如:mknod /dev/com1 c 237 1,创建主设备号是237次设备号是1的设备节点/dev/com1;
补充:必须想办法知道驱动程序注册时候的主次设备号;

设备节点文件创建

自动创建设备节点文件,不需要手动操作,方便快捷。

创建和删除类

自动创建设备节点是在驱动程序的入口函数完成。自动创建需要创建类,具体接口如下:

struct class *class_create (struct module *owner, const char *name)

参数一共两个:owner 表示是属于这个模块。Name表示class的名字。

卸载驱动程序,需要删除掉类,类删除函数class_destroy,接口函数如下所示:

void class_destroy(struct class *cls);

创建设备

创建好类以后需要创建一个设备,才可以创建设备节点。Device_create是在类下创建设备,device_create函数原型如下:

struct device *device_create(struct class *class,struct device *parent,dev_t devt,void *drvdata,const char *fmt, ...)

class表示在那个类下创建设备,参数parent是父设备,可以设置NULL。

Devt是设备号。Drvdata是设备是可能会使用一些数据。

Fmt是设备名字,如果设置fmt=xxx,就会生成/dev/xxx的设备文件。

删除创建的设备,使用如下接口:

void device_destroy(struct class *class, dev_t devt)

class是删除的设备所处的类,devt是设备号。


代码:

demo.c

#include <linux/init.h>
#include <linux/module.h>
#include <linux/fs.h>
#include <linux/io.h>
#include <linux/cdev.h>
#include <linux/ioctl.h>
#include <linux/device.h>
#include <linux/uaccess.h>
#include<linux/slab.h>
#include"myled.h"
#define CNAME  "myled"

int minor=0;//次设备号从0开始
#if 0
unsigned int major = 0;//动态申请
#else
unsigned int major = 500;//静态指定设备号
#endif
char kbuf[128]={};//定义数组用于存放和用户之间拷贝的数据
gpio_t *vir_led1;
gpio_t *vir_led2;
gpio_t *vir_led3;
unsigned int * vir_rcc;
struct cdev *cdev;
struct class *cls;
struct device *dev;

const int count=3;//指定设备节点的个数为3
//定义互斥体
struct mutex mut
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值