Drivers beviteli eszközök

Nézzük a figyelmünket, hogy a vezetők közös beviteli eszközöket, például billentyűzetek, egerek és érintőképernyők. De először vessünk egy rövid pillantást kész a hozzáférés a berendezés, ami elérhető a bemeneti vezetők.

Serio szinten kínál könyvtári rutinok hozzáférni az örökölt I, mint például az i8042-kompatibilis billentyűzet vezérlők és soros port. PS / 2 billentyűzet és egér csatlakozik az első, és érintse meg a vezérlők, soros porttal ez utóbbival csatlakoztatott. Ahhoz, hogy kölcsönhatásba lépnek a berendezések kiszolgált Serio, például átvitelére parancsokat PS / 2 egér előírt visszahívási eljárás Serio keresztül rögzített serio_register_driver ().

Új vezető részeként Serio segítségével serio_register_port () vagy bejelentkezve nyílt belépési ponton () / close () / start () / stop () / write (). Például lásd a drivers / input / Serio / serport.c.

Mint látható, a 7.1 ábra, Serio - ez csak az egyik útvonal való hozzáférés alacsony szintű hardver. Néhány bemeneti eszközmeghajtók inkább támaszkodnak az alacsony szintű támogatást a busz szinten, mint például az USB vagy SPI.

Billentyűzet

Billentyűzetek mindenkinek - régebbi PS / 2, USB, Bluetooth, infra, és így tovább. Mindegyik típus egy speciális vezető beviteli eszköz, de mind ugyanazt a sofőr billentyűzet eseményeket, és ezáltal az egységes felületet kínál a felhasználóknak. Pilóta billentyűzet események azonban van egy sajátossága, összehasonlítva más vezetők esetén: továbbítja az adatokat egy másik alrendszer kernel (tty szinten), nem pedig a felhasználói térben keresztül csomó / dev.

PC billentyűzet

PC billentyűzet (más néven billentyűzet PS / 2 vagy AT billentyűzet) kommunikál a processzorral i8042-kompatibilis billentyűzet vezérlő. PC-k jellemzően külön billentyűzet vezérlő, de a laptopok kölcsönhatás a billentyűzet egyik feladatait egy általános célú beépített vezérlőt (lásd: „Beágyazott vezérlők” 20. fejezet, „Kiegészítő eszközök és illesztőprogramok”). Amikor megnyom egy gombot a számítógép billentyűzetén, ez egy ilyen utat:

1. A billentyűzet vezérlő (vagy egy beágyazott vezérlő), vizsgál, és dekódolja a billentyűzet mátrix és törődik árnyalatok, mint lebontási kapcsolatok.

2. Kezelő eszközmeghajtó keresztül Serio minden nyomja meg és engedje el a kulcsot a billentyűzet vezérlő kiolvassa a nyers vizsgálati kódokat. A különbség lenyomásával és felengedésével a legjelentősebb bit, amely be van állítva az utóbbi esetben. Ha például lenyomva az „a” tesz egy pár leolvasó kódok 0x1e és 0x9e. Különleges gombok használatával szűrünk 0xE0. úgyhogy nyomja meg a jobb nyíl gombot, hogy a szekvencia (0xE0 0x4D 0xE0 0xCD). használhatja showkey segédprogram (miután szimbólum → megy magyarázatot) a felügyeleti kialakulóban a vezérlő leolvasó kódok:

bash> showkey -s
cl-ra volt UNICODE módban
[Ha próbálják ezt X alatt, lehet, hogy nem működik olyan jól, mint a
X szervert is olvas / dev / console]

Nyomja meg bármelyik gombot (a program befejeződik múlva 10s
Az elmúlt egy gombnyomással).
.
0x1e 0x9e → megnyomásával az "a" gombot

3. A billentyűzet eszközmeghajtó átalakítja a kapott leolvasó-kódok keycode alapuló beviteli módot. Látni, hogy a kulcs megfelelő kódot kulcs „a”:

bash> showkey
.
megnyomásával kód 30 → megnyomásával az „a”
Gombkód 30 kiadás → kioldása az „a” gombot

Jelenteni ezeket kulcskódokat felfelé, a vezető generál bemeneti esemény, amely átadja a vezérlést a vezető, a billentyűzet eseményeket.

4. Pilóta billentyűzet esemény veszi át a munkát a kulcs kódkonverziót függően sorsjegyet kulcskódokat. (Lásd a Súgó loadkeys és térkép-fájlokat a / lib / kbd / keymaps.) Ellenőrzi, hogy a konvertált kód kulcsfontosságú cselekvésekre váltás egy virtuális konzolra vagy indítsa újra a rendszert. Ehelyett a rendszer újraindításához válaszul a Ctrl + Alt + Del lit LED CAPSLOCK és NUMLOCK. hozzá a felvezető Ctrl + Alt + Del kulcsfontosságú esemény driver, drivers / char / billentyűt melyik. következő:

static void fn_boot_it (struct vc_data * vc, struct pt_regs * sorból)
<
+ set_vc_kbd_led (kbd, VC_CAPSLOCK);
+ set_vc_kbd_led (kbd, VC_NUMLOCK);
- ctrl_alt_del ();
>

5. A szokásos gombok lenyomását átalakított kódot küld a kapcsolódó virtuális terminál és a fegyelem N_TTY sor. (Megbeszéltük a virtuális terminálok és vonalak fegyelem 6. fejezet, „Serial Port Driver”.) Drivers / char / billentyűt melyik teszi az alábbiak szerint:

/ * Add meg a gombot kódot váltott buffer * /
tty_insert_flip_char (TTY, kulcskód, 0);
/ * * Azt tervezzük /
con_schedule_flip (TTY);

7.3 ábra mutatja a mozgás adatokat, amikor a billentyűk a billentyűzeten, amíg megérkezik a virtuális konzolra. A bal fele az arány függ az eszközök, és a jobb fele az általános jellegű. Összhangban a céllal, a bemeneti alrendszer, a mögöttes hardver interfész átlátszó a vezető és a billentyűzet események tty szinten. Ennek megfelelően a mag belépési és világosan definiált interfészek események pajzs felhasználók belépjenek gépek árnyalatokat.

Drivers beviteli eszközök

7.3 ábra. Az adatáramlás a PS / 2-kompatibilis billentyűzet.

USB és Bluetooth billentyűzet

USB leírások, a kapcsolódó eszközöket humán interakció (HID), feltéve, hogy a protokoll, amely az interfész egy USB billentyűzet, egér, készlet gombok és más perifériális beviteli eszközök. Linux, ez megtörtént az USB usbhid ügyfél driver. amely felelős az osztály USB HID (0x03). Usbhid regisztrálja magát, mint egy beviteli eszköz driver. Ez megfelel az API bemeneti és jelentések lényeges fejleményekről bemenete HID.

Ahhoz, hogy megértsük a kódot utat egy USB billentyűzet, menjen vissza a 7.3 ábra és változik a hardver-függő bal felét. Cserélje ki a billentyűzet vezérlő a dobozban „Input berendezések” az USB-vezérlő, Serio az USB magszintű és szögletes „driver beviteli eszköz” a vezető usbhid.

Ahhoz, hogy cserélje ki a Bluetooth billentyűzet ábrán 7.3 billentyűzet vezérlő egy sor Bluetooth chip, SERIO szintje Bluetooth mag és szögletes „vezető bemeneti eszköz” a vezető Bluetooth hidp.

USB és Bluetooth részletezzük 11. fejezet, „Universal Serial Bus” és 16. fejezet, „A Linux vezetékek nélkül”, ill.

Egerek, mint a billentyűzet, vannak különböző lehetőségek és a különböző lehetőségek interakció. Nézzük általánosan használt.

Egerek létrehoz a relatív mozgás a tengelyek X és Y. Ezen túlmenően, ezek egy vagy több gombot. Néhányan közülük is van egy görgető kerék. Illesztőprogram beviteli eszköz régebbi PS / 2 kompatibilis egér, hogy kölcsönhatásba lépnek a szabályozó, mégpedig Serio szinten. Pilóta bemeneti eseményeket az egerek, az úgynevezett mousedev. Az egér események alkalmazás kódját a / dev / input / egerekben.

Példa vezető: Egér-kerék

Egy eszközmeghajtó egy egér-kerék, végre Listing 7.3 munkák ablakos rendszerek, mint a Windows-X. Látni, hogy a vezető kijelenti, hogy képességei hasonló az egér, megnézzük roller_mouse_init (). Ezzel szemben a járművezető a forgó kerék Listing 4.1 fejezet 4 kerekű egér illesztőprogram nem szükséges módszerek read () vagy poll (). események miatt jelentettek bemeneti API-t. Processzor megszakítja kerék roller_isr () is ennek megfelelően változott. Betakarítás hivatalos cselekményeket végzett megszakítás kezelő használja a várakozási sor spin-lock és store_movement () eljárást, hogy támogassa a read () és poll ().

A nyomat 7,3, + és - az elején sor eltérést mutatnak a vezető kerék nyomaték végre 4. lista fejezetek 4.1.

Nyomtatása 7.3. Pilóta egér kerék

Kapcsolódó cikkek