Android系统 linux内核按键驱动开发

Android系统 linux内核按键驱动开发

前言

刚入门的小白,在csdn的帮助下完成了第一个按键驱动,特写此文记录学习并分享给有需要的人。

1.修改设备树.dts

我是用的开发板是rp-rk3288,Android8.1的源码。路径是rk3288-android8.1/kernel/arch/arm/boot/dts/rp-rk3288.dts。
在dts文件里面配置要使用的gpio。具体如何配置不同开发板是不一样的,可以参考同节点下其他gpio的配置,大多数都是大同小异的。
gpio_num = <&gpio5 15 GPIO_ACTIVE_LOW> : 代 表 设 置 gpio5_B7 为 低 电 平 ,.
将GPIO_ACTIVE_LOW 改成 GPIO_ACTIVE_HIGH 就是设置为高电平
gpio_function = <0>:0 代表设置为输出模式,1代表输入模式
在这里插入图片描述

2.创建驱动文件

在rk3288-android8.1/kernel/drivers/目录下创建目录hby,在hby下创建驱动文件hby.c


#include <linux/init.h>
#include <linux/module.h>
#include <linux/delay.h>
#include <linux/input.h>
#include <linux/irq.h>
#include <linux/sched.h>
#include <linux/slab.h> 
#include <linux/workqueue.h>
#include <linux/interrupt.h>
#include <linux/err.h>
#include <linux/gpio.h>
#include<linux/kdev_t.h>//获取一个设备的设备编号,应当使用<linux/kdev_t.h>中定义的宏
//定义输入设备指针
struct input_dev *inputdev ;
 struct rk3288_key_struct {
    
     int key_gpio;// GPIO编号
     int key_code; // 按键能产生的键值
     struct work_struct work; // 按键的工作队列  
 };
 struct rk3288_key_struct keys_list[] ={
   //按键列表,有多个按键就可以在这里加上
    {
   .key_code = KEY_BACK, .key_gpio = 167},
    //{.key_code = KEY_VOLUMEUP, .key_gpio = 166},
    //{.key_code = KEY_VOLUMEDOWN, .key_gpio = 223}
};
static irqreturn_t rk3288_key_intnerrupt(int irq, void *dev_id, struct pt_regs *regs){
    //中断上半部分
    int i= 
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值