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