input子系統處理輸入事務,任何輸入裝置的驅動程式都可以通過input輸入子系統提供的介面註冊到核心,利用子系統提供的功能來與使用者空間互動。輸入裝置一般包括鍵盤,滑鼠,觸控螢幕等,在核心中都是以輸入裝置出現的。下面分析input輸入子系統的結構,以及功能實現。
一. input子系統結構與功能實現
1. input子系統是分層結構的,總共分為三層: 硬體驅動層,子系統核心層,事件處理層。
(1)其中硬體驅動層負責操作具體的硬體裝置,這層的**是針對具體的驅動程式的,需要驅動程式的作者來編寫。
(2)子系統核心層是鏈結其他兩個層之間的紐帶與橋梁,向下提供驅動層的介面,向上提供事件處理層的介面。
(3)事件處理層負責與使用者程式打交道,將硬體驅動層傳來的事件報告給使用者程式。
2. 各層之間通訊的基本單位就是事件,任何乙個輸入裝置的動作都可以抽象成一種事件,如鍵盤的按下,觸控螢幕的按下,滑鼠的移動等。事件有三種屬性:型別(type),編碼(code),值(value),input子系統支援的所有事件都定義在input.h中,包括所有支援的型別,所屬型別支援的編碼等。事件傳送的方向是 硬體驅動層-->子系統核心-->事件處理層-->使用者空間
3. 以觸控螢幕為例說明輸入子系統的工作流程:
注:mini2440的觸控螢幕驅動所用驅動層對應的模組檔案為:s3c2410_ts.c,事件處理層對應的模組檔案為 evdev.c
(1)s3c2410_ts模組初始化函式中將觸控螢幕註冊到了輸入子系統中,於此同時,註冊函式在事件處理層煉表中尋找事件處理器,這裡找到的是evdev,並且將驅動與事件處理器掛載。並且在/dev/input中生成裝置檔案event0,以後我們訪問這個檔案就會找的我們的觸控螢幕驅動程式。
(2)應用程式開啟裝置檔案/dev/input/event0,讀取裝置檔案,呼叫evdev模組中read,如果沒有事件程序就會睡眠。
(3)當觸控螢幕按下,驅動層通過子系統核心將事件(就是x,y座標),傳給事件處理層也就是evdev,evdev喚醒睡眠的程序,將事件傳給程序處理。
為什麼沒有我要的插座?
我想不通一件事情,為什麼到現在還沒有我想要的插座 乙個usb控制的電源插座,它可以用這樣的語句來從電腦控制開和關 set objlamp createobject plug.lamp objlamp.on true 更多的帶晶元的電器不夠,還要能互相連線的 更進一步,就是為什麼現在在網路上面可以遠端...
為什麼我的 dev event沒有檔案或目錄
input子系統處理輸入事務,任何輸入裝置的驅動程式都可以通過input輸入子系統提供的介面註冊到核心,利用子系統提供的功能來與使用者空間互動。輸入裝置一般包括鍵盤,滑鼠,觸控螢幕等,在核心中都是以輸入裝置出現的。下面分析input輸入子系統的結構,以及功能實現。一.input子系統結構與功能實現 ...
為什麼我的Jquery引入沒有效果
為什麼我的jquery引入沒有效果 在這裡插入描述 在這裡插入描述 在這裡插入描述 我的電腦裡面已經有這個js檔案了 你好!這是你第一次使用markdown編輯器所展示的歡迎頁。如果你想學習如何使用markdown編輯器,可以仔細閱讀這篇文章,了解一下markdown的基本語法知識。全新的介面設計,...