1. 程式人生 > >《5.linux驅動開發-第5部分-5.8.input子系統基礎之按鍵》

《5.linux驅動開發-第5部分-5.8.input子系統基礎之按鍵》

《5.linux驅動開發-第5部分-5.8.input子系統基礎之按鍵》

第一部分、章節目錄
5.8.1.什麼是input子系統
5.8.2.input裝置應用層程式設計實踐1
5.8.3.input裝置應用層程式設計實踐2
5.8.4.input子系統架構總覽1
5.8.5.input子系統架構總覽2
5.8.6.輸入核心層原始碼分析1
5.8.7.輸入核心層原始碼分析2
5.8.8.輸入事件驅動層原始碼分析
5.8.9.輸入裝置驅動層原始碼分析1
5.8.10.輸入裝置驅動層原始碼分析2
5.8.11.中斷方式按鍵驅動實戰1
5.8.12.中斷方式按鍵驅動實戰2

第二部分、章節介紹
5.8.1.什麼是input子系統
本節全面介紹input子系統的概念和來源、解決的主要問題,目的是讓大家對linux中輸入類裝置有一個全面瞭解
5.8.2.input裝置應用層程式設計實踐1
本節實踐編寫應用層程式,操作鍵盤和滑鼠這些常見input類裝置,目的是讓大家先學會使用輸入類裝置,後面再來分析驅動。
5.8.3.input裝置應用層程式設計實踐2
本節接著上節對讀上來的資料進行解析,分析其規律並且和裝置本身特性進行關聯分析。
5.8.4.input子系統架構總覽1
本節詳細介紹input子系統的三層結構以及各層的功能特點。
5.8.5.input子系統架構總覽2
本節介紹input子系統下編寫驅動的路線和方法。
5.8.6.輸入核心層原始碼分析1
本節分析輸入核心層,主要是模組裝載和開放給其他層的介面的分析。
5.8.7.輸入核心層原始碼分析2
本節接著分析輸入核心層,主要是handler和device的匹配、安裝部分的原始碼分析。
5.8.8.輸入事件驅動層原始碼分析
本節對輸入事件層原始碼分析,主要以evdev.c為例分析了event handler的安裝函式、資料上報函式的實現。
5.8.9.輸入裝置驅動層原始碼分析1
本節分析輸入裝置驅動層,以x210自帶的按鍵驅動為例進行分析。
5.8.10.輸入裝置驅動層原始碼分析2
本節接著分析按鍵驅動,主要是一些原始碼細節探究。
5.8.11.中斷方式按鍵驅動實戰1
本節開始按鍵驅動實戰,先找到核心提供的模版,並且對模版程式進行分析講解。
5.8.12.中斷方式按鍵驅動實戰2
本節以模版驅動為基礎,結合x210開發板的情況進行驅動移植、編譯、測試、修改。

第三部分、隨堂記錄
5.8.1.什麼是input子系統
5.8.1.1、何為輸入裝置
5.8.1.2、linux中輸入裝置的程式設計模型
(1)命令列介面的輸入類裝置應用介面
(2)GUI介面帶來的麻煩、不同的輸入類裝置也會帶來麻煩
(3)struct input_event
5.8.1.3、input子系統簡介
(1)linux的input子系統解決了什麼問題
(2)input子系統分4個部分:應用層 + input event + input core + 硬體驅動
(3)input子系統如何工作
(4)事件驅動型GUI框架,如QT、VC等。

5.8.2.input裝置應用層程式設計實踐1
5.8.2.1、確定裝置檔名
(1)應用層操作驅動有2條路:/dev目錄下的裝置檔案,/sys目錄下的屬性檔案
(2)input子系統用的/dev目錄下的裝置檔案,具體一般都是在 /dev/input/eventn
(3)用cat命令來確認某個裝置檔名對應哪個具體裝置。我在自己的ubuntu中實測的鍵盤是event1,而滑鼠是event3.

5.8.2.2、標準介面開啟並讀取檔案
5.8.2.3、解析struct input_event

5.8.3.input裝置應用層程式設計實踐2
5.8.3.1、解析鍵盤事件資料
5.8.3.2、解析滑鼠事件資料

5.8.4.input子系統架構總覽1
5.8.4.1、input子系統分為三層
(1)最上層:輸入事件驅動層,evdev.c和mousedev.c和joydev.c屬於這一層
(2)中間層:輸入核心層,input.c屬於這一層
(3)最下層:輸入裝置驅動層,drivers/input/xxx 資料夾下
5.8.4.2、input類裝置驅動開發方法
(1)輸入事件驅動層和輸入核心層不需要動,只需要編寫裝置驅動層
(2)裝置驅動層編寫的介面和呼叫模式已定義好,驅動工程師的核心工作量是對具體輸入裝置硬體的操作和效能調優。
(3)input子系統不算複雜,學習時要注意“標準模式”四個字。

5.8.5.input子系統架構總覽2

5.8.6.輸入核心層原始碼分析1
5.8.6.1、核心模組註冊input_init
(1)class_register
(2)input_proc_init
(3)register_chrdev
5.8.6.2、裝置驅動層的介面函式
(1)input_allocate_device
(2)input_set_capability
(3)input_register_device

5.8.7.輸入核心層原始碼分析2
5.8.7.1、handler和device的匹配
(1)input_attach_handler
input_match_device 匹配device和handler
handler->connect(handler, dev, id) 連線device和handler
5.8.7.2、事件驅動層的介面函式
(1)input_register_handler
(2)input_register_handle

5.8.8.輸入事件驅動層原始碼分析
5.8.8.1、input_handler
5.8.8.2、evdev_connect
5.8.8.3、evdev_event

5.8.9_10.輸入裝置驅動層原始碼分析1_2
5.8.9.1、先找到bsp中按鍵驅動原始碼
(1)鎖定目標:板載按鍵驅動
(2)確認廠家提供的BSP是否已經有驅動
(3)找到bsp中的驅動原始碼
5.8.9.2、按鍵驅動原始碼初步分析
(1)模組裝載分析
(2)平臺匯流排相關分析
(3)確定重點:probe函式
5.8.9.3、原始碼細節實現分析
(1)gpio_request
(2)input_allocate_device
(3)input_register_device
(4)timer

5.8.11.中斷方式按鍵驅動實戰1
5.8.11.1、模板
(1)input類裝置驅動模式非常固定,用參考模版修改即可
(2)新建驅動專案並貼上模版內容
5.8.11.2、模板驅動的解析
5.8.11.3、著手移植驅動

5.8.12.中斷方式按鍵驅動實戰2
5.8.12.1、驅動移植細節
5.8.12.2、驅動實踐