Linux Dev. Driver konyv
Szigeti Szabolcs
szigi at ik.bme.hu
Tue Dec 18 17:14:03 CET 2001
> Bocs, kapkodtam. Hardware. :) Tulajdonkeppen a kernelrol szol a
> konyv, de sok hardverkezelest kernelmodulon keresztul erdemes
> csinalni. Pl. megszakitast lekezelni nem nagyon tudom, hogy le-
> hetne-e mashogy.
Nem. Valoban nehez. De nem is szokas.
A device-driver valo arra, hogy a az interruptokat, meg az io portokat
kezelje. Alakamazoi szoftverbol nem szokas.
A unix jellegu oprendszerek a kovekezo modon csinaljak:
Minden hardver eszkoz egy file (a /dev katalogusban vannak, es ez igy nem is
teljesen igaz, mert pl. a halozat kezeles az tipikusan nem a filekent megy,
bar mehetne, csak nem az terjedt el, mert nehezkez.)
A megfelelo device driver hozza van rendelve az adott fajlhoz, egy, a
kernelben levo tablazaton keresztul.
Az alkamazasnak a kovetkezo lehetosegei vannak: open - megnyitja a filet,
close, lezarja, read/write -olvassa, irja, ioctl - eszkoz fuggo vezerlest
csinal. (van meg par, de most nem erdekes)
Megnyitas, lezaras eseten tulajdonkeppen a drivered donti el, hogy mit kell
csinalni. Pl. inicializalni az eszkozt, stb.
Iras/olvasas eseten ha lehetseges, akkor elvegzi a muveletet, ha nem
lehetseges, mert varni kell az eszkozre, vagy mert nincsen meg adat, akkor a
programod blokkol, es mas taszk futhat addig. Ha beerkezett az interrupt,
mert pl. erkezik uj adat, akkor a driver (a kernel) ujra futokepesse teszi a
taszkodat, aki megkapja a kert adatot. Ebbol az kovetkezik, hpgy a progamod
nem figyel semmifele interruptot, o csak azt latja, hogy probal olvasni, es
hopp megjon az adat. (van ra lehetoseg, hogy ne blokkoljon, ha nincs adat,
akkor megfelelo visszateresi ertekkel jelzi, hogy nem volt adat. Ekkor ha
akarod, figyelheted folyamatosan. Egyebkent meg van ra lehetoseg, hogy
idozito lekettyenesevel visszaterjen, ha addig nem jott adat). Ezt egyebkent
meg lehet mas esetben, pl. ioctl hivasnal is csinalni, gyakori, hogy olyan
harver eszkozket, amiket nem lehet ertelemsen irassal olvasassal vezerelni,
azt ioctl-lel vezerik.
A kernelben ez ugy nez ki, hogy a driverhez hozza van kotve az interrupt,
amelyik az IT bekovetkeztekor meghivodik, es elvegzi a dolgat.
Vagyis, ha drivert akarsz irni, akkor tuajdonkeppen "felfele" meg kell irni
az open/close/read/write/ioctl hivast, "lefele" meg az interrupt, meg egyeb
kernel dolgokat.
Szabolcs
More information about the Elektro
mailing list