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代表输入模式
Android系统 linux内核按键驱动开发_第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>//获取一个设备的设备编号,应当使用中定义的宏
//定义输入设备指针
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

你可能感兴趣的:(android,linux,内核,嵌入式,驱动程序)