Avagy, PCI kezelés 2013-ban.
Korábbi bejegyzésemben írtam, hogy nekiláttam videot digitalizálni. Az örömöm csak addig tartott, míg az egyik újraindulás után a BIOS sikeresen kiosztotta ugyanazt a megszakítást ugyanazon PCI kártyán található, két eszköznek.
Aki átaludta volna a PC evolúció eme két csodáját, annak gyorstalpaló jelleggel: A PCI egyik nagy feature a korábbi buszrendszerekhez képest, hogy az ISA plug-n-play hányás továbbszármaztatásával az adott csatolóhoz tartozó megszakítások szabadon ki és megoszthatóak. Elviekben ez azt jelentené, hogy minden egyes PCI szabványú eszközön az operációs rendszer szabadon kioszthat megszakítást és/vagy két azonos megszakítással rendelkező eszközt is tud kezelni. Elméletben agy adott eszköz IRQ-ja az alábbiak alapján kerülhet meghatározásra:
A kártya megmondja melyik megszakítást akarja és kész.(Remek, mikor ISA elvek mentén tervezik az ilyen kártyát)
A APIC-n keresztül az OS beállítja, hogy az adott PCI slot melyik megszakítást használja. (a'la Win98)
A APCI BIOS gondoskodik az IRQ megosztásról, az OS meg ráhagyja. (a'la Windows XP)
Szofisztikált, nem?
Összegezve, ha mázlink van akkor nem lesz két eszközünk azonos IRQ-val, vagy ha lesz, akkor nem használnak azonos címtartomány és azonos PCI slot-ot.
A bt8xx alapú kártyák jellemzője, hogy egy tokon belül két eszköz található. Az egyik egy audió ADC a másik pedig egy video digitalizáló chip egy tokba integrálva ami egy PCI Arbiter segítségével osztozik a buszon. És itt kezdődnek a problémák mert, ez most valahogy, nem jött össze, oly mértékben, hogy a kártya beállt és se-kép, se hang, se Linux, se XP alatt. Linux alatt a kártya moduljai szépen betöltődnek, de a tuner PLL-jét már nem tudja beállítani. Ha olvasni akarja az ember a /dev/video eszközt, akkor a dmesg "Interrupt lockup" hibákkal tellik meg. XP alatt hasonló a helyzet, a driverek hibátlanul töltődnek, csak épp se kép, se hang.
Hosszas netes túrkálás alapján, egyetlen gyógyír a problémára a kártya kiszerelése és másik slotba történő áthelyezése. Ekkor bootnál a BIOS új megszakítást oszt ki az alacsonyabb PCI címmel rendelkező eszköznek. Itt is ez történt. Az video digit rész ment az IRQ10-re az audio digit maradt a IRQ 20-on. Hogy konzisztens legyen a szívás a kártyát visszaosztotta 20-20-ra, ha visszatettem az eredeti slotba.
Azért kíváncsiság nem hagyott nyugodni, és öreg gépről lévén szó, bootoltam egy sokat átkozott Win98-at. Klikk, klikk, klikk... és a hiba megszűnt, a következő bootig. Hihetetlen, hova fejlődik a technológia....
Hogy ne maradjak Linux szívás nélkül sem, próbaként lecseréltem, a 2.6-os Debian kernelt a gépen, egy kézzel fordított 3.7.5-re. Érdekesség, hogy a két kernel közt digitalizálás közben 10-12% teljesítmény különbség van a 2.6 javára.
Viszont az igazi vérbő szívatásra az ntfs-3g-vel futottam. A digitalizálás szépen ment 2,5 órán keresztül, mikor a mencoder "video buffer full - dropping frame" üzenetekkel nyomta tele a képernyőt. Kiderült, hogy valamilyen oknál fogva a fuse ntfs-3g dobott egy hátast és benyelte processzorteljesítmény 30%-át amitől hirtelen kevés lett a processzor a mencoder alatt. Hogy mi volt az ok, arról gőzöm sincs, mert nem emlékezett meg a lelki problémáiról egyik log fileban sem. Biztos elunta magát...