Parallel port kezelés

Fórumok

Írtam egy nagyon bonyolult parallel port "piszkálót".
Timer felügyelet alatt folyamatosan inkrementálja a portra kitett bájtot.
A gépen alaplapi parallel port van a szokásos 0x378 -as címre állítva (BIOS).
Ha a gépen fut a parport és a parport_pc driver akkor szépen működik a dolog, ha viszont kiveszem ezeket a modulokat, akkor nem működik - a port lábakon nincs változás, a program működik, de nem a portot írja.
Mi lehet ez? Mi olyat csinálnak ezek a driverek, amitől a portok "megjelennek" a szokványos címeken?
A következő lépés az lenne, hogy írjak egy über primitív drivert, ami ugyanezt a "feladatot" végezné, viszont a "register_regiion" elzavar ha be akarom foglalni a parport címeket - ki kell vennem a drivereket - úgy viszont nincs port.
Egy másik gépen is próbálkoztam, ott egy add-on kártyán van a parallel port (egy SUNIX 2S+1P cucc a parallel port címe 0xd050) itt akár benn vannak a driverek akár nem működik a programka.

OFF:
Már fáradt vagyok, holnap megnézem mit is csinálhatnak ezek a driverek. De jó lenne ha tudnám mit is kell keresnem a kódban.

Hozzászólások

Anélkül, hogy meg akarnám érteni, mit és hogyan csináltál, egy kósza gondolat. A párhuzamos port szerintem csak írható, olvasásnál az a gyanúm, a lebegő busz jön vissza. Tehát csinálnod kell egy tükör változót, ezt inkrementálhatod, meg amit akarsz, módosítást követően pedig a tényleges fizikai portra kell írnod az értékét.

És még egy. Azt hiszem, volatile kell legyen a port, mert különben simán optimalizálhatja a fordító, hogy írás történik, olvasás soha, tehát nincs rá szükség, így írni sem kell.

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

Elvileg olvasáskor visszaadja a beírt értéket.
Az "kiírás" nagyjából így néz ki:


outb(global_byte,0x378);
global_byte++;

Amint írtam, ha benn van a parport és a parport_pc driver akkor működik, ha kiveszem a drivereket nem. A kimenetek mind "1" (vagy lebegnek) - a port elvileg kétirányú. Ahogy ezt leírtam, az is lehet hogy a control regisztert kell le ellenőrizni, mert inputra van állítva? - fura de lehet.

* Én egy indián vagyok. Minden indián hazudik.

> De jó lenne ha tudnám mit is kell keresnem a kódban.

Végigbogarászod a drivert a belépési pontnál kezdve. Nem olyan nagyon nagy kód.

Kezd valami derengeni.
Ha megnézem az lspci kimenetét, a parallel port nincs is benne.
Így sem cím, se irq - nincs is parallel port.
A parport.ko kerneldrivertől sem jelenik meg, csak ha a parport_pc.ko -t is behúzom.
A parport_pc.c molyolása közben már találtam kódrészeket ami az alaplapi "multi I/O chip" felingerléséről szól.
Nem akartam ilyen mélységekig lenyúlni :(

* Én egy indián vagyok. Minden indián hazudik.

Törölve.
*** Közben látom, hogy mondtad már, hogy volt ioperm ...

Mikor az én gyerekkoromban ezek a párhuzamos portok még divatban voltak, mindenféle üzemmódokat lehetett kapcsolgatni rajtuk, hogy standard/EPP/SPP/ECP, uni-/bidirectional... Még az is lehet, hogy a kerneldriver betöltése előtt a párhuzamos port meditatív állapotban pihen, és azért nem tudod használni.

Edit: random link,google találta: http://computer.howstuffworks.com/parallel-port2.htm

"a párhuzamos port meditatív állapotban pihen"
Majdnem pontosan így van. A parport_pc modul/driver konfigurálja fel, azután lehet használni, így viszont az interrupt "befoglalásakor" hibával kilép a "driverem".
Persze, ki elehet emelni a komplett kódot a parport_pc driverből, de most iunkább elővettem egy add-on parport kártyát, az nem csinál ilyeneket, legfeljebb szokatlan IO címe van 0xd050.

* Én egy indián vagyok. Minden indián hazudik.