《驱动开发》通过platform总线驱动实现按键中断

目录

驱动代码:pdrv.c

应用层代码:test.c


驱动代码:pdrv.c

#include <linux/init.h>
#include <linux/module.h>
#include <linux/platform_device.h>
#include <linux/mod_devicetable.h>
#include <linux/of.h>
 
#include <linux/uaccess.h>
#include <linux/gpio.h>
#include <linux/of_gpio.h>
#include <linux/interrupt.h>
#include <linux/irq.h>
#include <linux/of_irq.h>
 
#include <linux/device.h>
#include "myled.h"
#include <linux/io.h>
#include <linux/ioctl.h>
#include <linux/poison.h>
#include <linux/slab.h>
#include <linux/cdev.h>
 
struct resource *res;
int irqno;
struct gpio_desc *desc;
struct gpio_desc *desc1;
 
wait_queue_head_t head;
unsigned int condition;
unsigned char number;
 
struct cdev *cdev;
 
struct class* cls;
struct device* dev;
dev_t dev1;
unsigned int major;
unsigned int minor;
 
//操作方法结构体
ssize_t mycdev_read(struct file *file, char __user *ubuf, size_t size, loff_t *loff)
{
    int ret;
    if(file->f_flags&O_NONBLOCK)
    {
        return -EINVAL;
    }else
    {
        ret=wait_event_interruptible(head,condition);
        if(ret)
        {
            printk("接收阻塞,休眠\n");
            return ret;
        }
    }
    if(size>sizeof(char))
        size=sizeof(char);
    ret=copy_to_user(ubuf,&number,size);
    if(ret)
    {
        pri
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值