Linux input子系統二 驅動程式的編寫

2021-08-20 08:14:32 字數 2430 閱讀 9180

本文主要以分析通用gpio按鍵驅動:gpio_keys.c檔案為主,將其中牽涉到linux驅動架構流程,以及架構設計思想進行分析。

【概述】gpio_keys是基於input架構實現的乙個通用gpio按鍵驅動。該驅動基於pladform_driver架構,實現了驅動和裝置分離,減少了程式的耦合性,同時提高程式的可移植性。符合linux裝置驅動模型的設計思想。工程中一般都會基於gpio_keys來寫。下面我們來理清程式的整體流程思路。

【驅動程式的分析】

step1:根據linux驅動模型,驅動檔案中該有的flow給他加上

step2:當驅動driver模組載入成功,根據compatible屬性(name)與device 匹配match成功之後,進入驅動的主入口函式probe

具體程式如下:

static

int__devinit gpio_keys_probe(structplatform_device *pdev)  

platform_set_drvdata(pdev,ddata);  

/* 設定input裝置屬性 */

input->name= pdev->name;  

input->phys= "gpio-keys/input0"

;  input->dev.parent= &pdev->dev;  

input->id.bustype= bus_host;  

input->id.vendor= 0x0001;  

input->id.product= 0x0001;  

input->id.version= 0x0100;  

/*enable auto repeat feature of linux input subsystem */

if(pdata->rep)  

__set_bit(ev_rep,input->evbit);  

ddata->input= input;  

for(i = 0; i nbuttons; i++)   

/* 把gpio設為輸入 */

error= gpio_direction_input(button->gpio);  

if(error 

/*獲取gpio對應的中斷*/

irq= gpio_to_irq(button->gpio);  

if(irq 

/*註冊中斷 */

error= request_irq(irq, gpio_keys_isr,  

irqf_shared |  

irqf_trigger_rising | irqf_trigger_falling,  

button->desc ? button->desc :"gpio_keys"

,  bdata);  

if(error)   

if(button->wakeup)  

wakeup= 1;  後續討論

/*設定裝置對事件的支援,比如設定對鍵1和鍵2的支援*/

input_set_capability(input,type, button->code);  

}  /*註冊input裝置*/

error= input_register_device(input);  

if(error)   

device_init_wakeup(&pdev->dev,wakeup);  

return0;  

……  

returnerror;  

}  1、

2、【最終實現】還需要設定具體的platform device的實現:高通和mtk平台是在dtsi裡面配置的

結構體中標綠色的項是讀取dts檔案屬性配置,其他的,如value,active_low等在**中設定。反正都是需要設定完成才能使用。

struct gpio_keys_button ,  

Linux Input子系統 概述

輸入裝置總類繁雜,包括按鍵,鍵盤,觸控螢幕,滑鼠,搖桿等等,它們本身都是字元裝置,不過核心為了能將這些裝置的共性抽象出來,簡化驅動的開發,建立了乙個input子系統。input子系統分為三層,從下至上分別是輸入裝置驅動層,輸入核心層以及輸入事件驅動層。這三層中的輸入核心層和輸入事件驅動層都是核心已經...

Linux INPUT子系統實驗

按鍵 滑鼠 鍵盤 觸控螢幕都屬於輸入裝置,針對這些裝置linux核心提供了乙個叫做input的子系統框架來處理輸入時間,本質上還是字元裝置,只是在此基礎上加上了input框架,使用者只需要負責上報輸入事件,input核心層負責處理這些事件。input子系統分為input驅動層 input核心層 in...

linux input 子系統例項分析

一,前言 1,近日要寫乙個很特殊的鍵盤驅動,故對linux的input子系統分析了一番,寫下分析筆記,以防不日即忘。2,使用input子系統的一般流程為 input allocate device 申請乙個input dev裝置 初始化該input dev input register device...