Linux 驱动开发 六十:《input.txt》翻译
文檔路徑:linux-imx-4.1.15\Documentation\input\input.txt。
一、介紹
這是一個驅動進程集合,旨在支持 Linux 下的所有輸入設備。雖然它目前僅用于 USB 輸入設備,但未來的使用(例如 2.5 / 2.6)預計將擴展到取代大多數現有的輸入系統,這就是為什幺它位于 drivers/input/ 而不是 drivers/usb/ 中的原因。
輸入驅動器的中心是輸入模塊,它必須在任何其他輸入模塊之前加載 - 它用作兩組模塊之間的通信方式:
1、設備驅動進程
這些模塊與硬件通信(例如通過 USB),并向輸入模塊提供事件(擊鍵、鼠標移動)。
2、事件處理進程
這些模塊從輸入中獲取事件,并通過各種接口將它們傳遞到需要的地方 - 擊鍵到內核,鼠標通過模擬的 PS/2 接口移動到 GPM 和 X 等等。
二、簡單用法
對于最常見的配置,使用一個 USB 鼠標和一個 USB 鍵盤,您必須加載以下模塊(或將它們內置到內核中):
- input
- mousedev
- keybdev
- usbcore
- uhci_hcd or ohci_hcd or ehci_hcd
- usbhid
在此之后,USB 鍵盤將立即工作,USB鼠標將作為主設備號 13,次設備號 63 上的字符設備提供:
crw-r--r-- 1 root root 13, 63 Mar 28 22:45 mice必須創建此設備。
手動創建它的命令是:
cd /dev mkdir input mknod input/mice c 13 63之后,您必須將 GPM(文本模式鼠標剪切/粘貼工具)和 XFree 指向此設備才能使用它 GPMv應該像這樣調用:
gpm -t ps2 -m /dev/input/mice在 X 中:
Section "Pointer"Protocol "ImPS/2"Device "/dev/input/mice"ZAxisMapping 4 5 EndSection完成上述所有操作后,您可以使用 USB 鼠標和鍵盤。
三、詳細說明
1、設備驅動進程
設備驅動進程是生成事件的模塊。但是,如果不處理這些事件,這些事件就沒有用處,因此您還需要使用 3.2 節中的一些模塊。
1、usbhid
usbhid 是整個套件中最大,最復雜的驅動進程。它處理所有 HID 設備,并且由于它們種類繁多,并且由于 USB HID 規范并不簡單,因此它需要如此之大。
目前,它處理 USB 鼠標,操縱桿,手柄,方向盤鍵盤,軌跡球和數字記錄儀。
然而,USB 也將 HID 用于顯示器控制、揚聲器控制、ups、lcd 和許多其他用途。
顯示器和揚聲器控件應該很容易添加到 hid/input 界面中,但對于 UPS 和 LCD來說,這沒有多大意義。為此,設計了隱藏式界面。有關它的詳細信息,請參閱 Documentation/hid/hiddev.txt。
usbhid 模塊的使用非常簡單,它不需要參數,自動檢測所有內容,當插入 HID 設備時,它會適當地檢測到它。
然而,由于設備的差異很大,您可能碰巧有一個設備不能很好地工作。在這種情況下,\#define DEBUG 在 hide -core.c 的開始,并發送給我 syslog 跟蹤。
2、usbmouse
對于嵌入式系統,對于具有損壞的 HID描述符的小鼠以及當 usbhid不是一個好的選擇時的任何其他用途,都有 usbmouse 驅動進程。它僅處理 USB 鼠標。它使用更簡單的 HIDBP 協議。這也意味著鼠標必須支持這種更簡單的協議。并非所有人都這樣做。如果您沒有任何強烈的理由使用此模塊,請改用 usbhid。
3、usbkbd
與 usbmouse 非常相似,該模塊使用簡化的 HIDBP 協議與鍵盤通信。它較小,但不支持任何額外的特殊鍵。如果沒有任何特殊原因使用它,請改用 usbhid。
4、wacom
這是 Wacom Graphire 和 Intuos 平板電腦的驅動程序。Wacom 的 PenPartner 不是,那個是由 HID 驅動程序處理的。盡管 Intuos 和 Graphire 平板電腦聲稱它們也是 HID 平板電腦,但它們不是,因此需要這個特定的驅動程序。
5、iforce
I-Force 操縱桿和輪子的驅動程序,通過 USB 和 RS232。它現在包含了對 ForceFeedback 的支持,盡管 Immersion Corp 認為該協議是商業機密,不會透露任何信息。
2、事件處理進程
事件處理進程根據需要將事件從設備分發到用戶空間和內核。
1、keybdev
keybdev 目前是一個相當難看的 hack,它將輸入事件轉換為特定于體系結構的鍵盤原始模式(x86 上的 xlatated AT Set2),并將它們傳遞給 keyboardc 模塊的句柄掃描碼函數。這在 keybdev 可以生成 rawmode 的所有體系結構上都能很好地工作,其他體系結構也可以添加到其中。
正確的方法是直接將事件傳遞給 keyboardc,最好是 keyboardc 本身是一個事件處理程序。這是在輸入補丁中完成的,可以在下面提到的網頁上找到。
2、mousedev
Mousedev 也是一個讓使用鼠標輸入的程序工作的 hack。它從鼠標或 digitizerstablet 中獲取事件,并將 PS/2-style (/dev/psaux)鼠標設備提供給用戶域。理想情況下,程序可以使用更合理的接口,例如 evdev。
/dev/input 中的鼠標開發設備(如上所示)是:
crw-r--r-- 1 root root 13, 32 Mar 28 22:45 mouse0 crw-r--r-- 1 root root 13, 33 Mar 29 00:41 mouse1 crw-r--r-- 1 root root 13, 34 Mar 29 00:41 mouse2 crw-r--r-- 1 root root 13, 35 Apr 1 10:50 mouse3 ... ... crw-r--r-- 1 root root 13, 62 Apr 1 10:50 mouse30 crw-r--r-- 1 root root 13, 63 Apr 1 10:50 mice每個 “mouse”設備都被分配到一個單獨的鼠標或數字化設備上,除了最后一個 “mice” 。這個單一字符設備由所有鼠標和數字化設備共享,即使沒有連接,設備也存在。這對于熱插拔 USB 鼠標非常有用,這樣即使在沒有鼠標的情況下,程序也可以打開設備。
內核配置中的 MOUSEDEV SCREEN [XY] 是 XFree86 中屏幕的大小(像素)。如果你想在 X 中使用數字化器,這是必要的,因為它的移動是通過虛擬 PS/2 鼠標發送到X,因此需要相應地縮放。如果只使用鼠標,則不會使用這些值。
鼠標指令將生成 PS/2、ImPS/2(微軟智能鼠標)或資源管理器 PS/2(智能鼠標資源管理器)協議,具體取決于讀取數據的進程希望的內容。您可以將 GPM 和 X 設置為其中任何一個。如果要使用 USB 鼠標上的滾輪,則需要 ImPS/2,如果要使用額外的(最多 5 個)按鈕,則需要 ExplorerPS/2。
3、joydev
Joydev 實現了 v0.x 和 v1.x Linux 操縱桿 API,這與早期版本中的 drivers/char/joystick/joystick.c 非常相似。有關詳細信息,請參閱文檔子目錄中的 joystick-api.txt。 只要連接了任何操縱桿,就可以在 /dev/input 中訪問它:
crw-r--r-- 1 root root 13, 0 Apr 1 10:50 js0 crw-r--r-- 1 root root 13, 1 Apr 1 10:50 js1 crw-r--r-- 1 root root 13, 2 Apr 1 10:50 js2 crw-r--r-- 1 root root 13, 3 Apr 1 10:50 js3 ...以此類推,直到 js31。
4、evdev
evdev 是通用輸入事件接口。它將內核中生成的事件直接傳遞給進程,并帶有時間戳。API 仍在不斷發展,但現在應該可以使用。它在第 5 節中進行了描述。
這應該是 GPM 和 X 獲取鍵盤和鼠標事件的方式。它允許在 X 中使用多頭,而無需任何特定的多頭內核支持。事件代碼在所有體系結構上都是相同的,并且與硬件無關。
設備位于 /dev/input 中:
crw-r--r-- 1 root root 13, 64 Apr 1 10:49 event0 crw-r--r-- 1 root root 13, 65 Apr 1 10:50 event1 crw-r--r-- 1 root root 13, 66 Apr 1 10:50 event2 crw-r--r-- 1 root root 13, 67 Apr 1 10:50 event3 ...以此類推,直到事件 31。
4、驗證它是否有效
在鍵盤上輸入幾個鍵應該足以檢查 USB 鍵盤是否工作,并正確連接到內核鍵盤驅動程序。
執行 "cat /dev/input/mouse0" (c, 13, 32) 將驗證鼠標是否也被模擬;如果你移動它,字符應該出現。
您可以使用 “jstest” 實用程序測試操縱桿模擬,該實用程序可在操縱桿包中獲得(參見 Documentation/input/joystick.txt)。
您可以使用 LinuxConsole 項目 CVS 存檔中提供的 “evtest” 實用進程測試事件設備(請參閱下面的 URL)。
5、事件接口
如果你想添加事件設備支持到任何應用程序(X, gpm, svgalib…) vojtech@ucw.cz將很高興為您提供任何我能提供的幫助。這里是對事物當前狀態的描述,它將被擴展,但不會隨著時間的推移而發生不兼容的變化:
您可以使用阻止和非阻止讀取,也可以在 /dev/input/eventX 設備上選擇,并且讀取時將始終獲得大量輸入事件。它們的布局是:
struct input_event {struct timeval time;unsigned short type;unsigned short code;unsigned int value; };“time” 是時間戳,它返回事件發生的時間。例如,類型是相對時刻的EV_REL,EV_KEY是按鍵或釋放。在包含 /linux/input.h 中定義了更多類型。
“code” 是事件代碼,例如 REL_X 或 KEY_BACKSPACE,完整列表同樣在包含 /linux/input.h 中。
“value” 是事件承載的值。EV REL 的相對變化,EV ABS (操縱桿…)的絕對新值,或釋放的 EV KEY 為 0,按鍵為 1,自動重復為 2。
總結
以上是生活随笔為你收集整理的Linux 驱动开发 六十:《input.txt》翻译的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 易语言操作java窗口,易语言调用JAV
- 下一篇: 文件打开方式关联错误解决方法