Soros kártya manuális IRQ vagy sharing tiltás

Fórumok

Sziasztok!

Problémám van egy 2 portos PCI soros kártyával Fedora 16 alatt.
1. ttyS2-őn van a soros eszköz és újraindítom a gépet
2. stty nem tudja beállítani ttyS2-őt: IO hibával kilép
3. kihúzom a soros eszközt, átdugom ttyS1-re
4. stty segítségével beállítom ttyS1-et és működik
5. újraindítom a gépet
6. stty nem tudja beállítani ttyS1-et: IO hibával kilép
7. kihúzom a soros eszközt, átdugom ttyS2-re
8. stty segítségével beállítom ttyS2-őt és működik
És ez mókuskerékben, ami sajnos nem mehet így mivel ez egy beágyazott x86-os gép.

Ha sikerül egyszer véletlenül setserial /dev/ttySx irq 0 segítségével pollingra váltanom, akkor királyul működik. De ez legtöbbször nem sikerül (IO hiba).

A probléma az, hogy két PCI slot van és bármelyikbe dugom egy olyan IRQ-t kap, amivel osztoznia kell valami alaplapi eszközzel (proc/interrupts) és szerintem ezt nem tudja a kártya.

Hogyan lehetne a kártya IRQ-ját módosítani Fedora 16 alatt?
Hogyan lehetne az IRQ sharingot tiltani erre a PCI kártyára?

Próbáltam például a setserial /dev/ttyS1 irq 10 parancsot, amit el is fogad néha, de ilyenkor a kernel kiköpi hogy "Disabling IRQ #17" és nincs válasz a porton.

Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled
0000:05:04.0: ttyS1 at I/O 0xbc00 (irq = 17) is a 16550A
0000:05:04.0: ttyS2 at I/O 0xbc08 (irq = 17) is a 16550A

05:04.0 Serial controller: Timedia Technology Co Ltd PCI2S550 (Dual 16550 UART) (rev 01) (prog-if 02 [16550])
Subsystem: Timedia Technology Co Ltd SER4037A (2x RS232 port)
Control: I/O+ Mem- BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping+ SERR- FastB2B-

Hozzászólások

A BIOS-ban nem lehet kizárólagossá tenni azt az interuptot amit a kártya használna. Így, az alaplap más része fog osztozni egy IRQ-n. Egy próba. Nekem volt olyan alaplapom (Acorp) ami AUTO-n a video, audio, LAN kártyát egy IRQ-ra tette. Kézzel kellett kiigazítani. Egyébként ment amúgy is, csak szaggatott a hang.

Nincs avval a soros cuccal valami probléma amit feldugsz? Érdemes lenne utána nézni miért mindig az a port nem indul amire fel van dugva.

  • Lehet már boot közben is van rajta forgalom, és kernel ebbe belehal?
  • Vagy valamelyik modem kontrol lábat fogja, és ez nem tetszik a kernelnek?

Esetleg megnézni nem használja e a BIOS valamire? Ekkor lehet ütközés a BIOS által meghagyott állapot és a kernel által elvárt között.

Okozhatja a konfliktust valamilyen soros portot használó alkalmazás is. Pl. CUPS printert keres a soros vonalon vagy ilyesmi.

Talán érdemes lenne átolvasni a kernel forrását. Töltsd el az snav-ng -t, etesd meg vele a kernel forrást. Így egyszerűbb kitúrni ki-kivel van.

Még valami, szintén a BIOS-ban keress olyat "Plug and Play OS". Ezt ha engedélyezed, az alaplap átadja az interupt kezelést az operációs rendszernek. Talán ekkor már sikeresebben tudsz "hegeszteni", már egyáltalán kell.

Isten hozott a PCI IRQ sharing világában.

A gyors megoldás: Kibaszod az egészet az ablakon és elfelejted.

Működő, gyors megoldás: Veszel 2db. RS-232 donglet.

Lassú, szopással teli módszer:
Megpróbálod BIOS szinten beállítani a megszakításokat az adott PCI slothoz.
Megpróbáld meg célzottan beállítani a port IRQ-ját:
setserial /dev/ttyS1 irq 3 port 0xbc00 autoconfig
setserial /dev/ttyS2 irq 4 port 0xbc08 autoconfig

Ezzel, a kártyán lévő két soros PCI eszköznek, más és más IRQt állítasz be, elméletileg. Elméletileg, mert még a nap-hold együttállástól is függ, hogy kezeli ezt a kerneled.
Hint: A régi PC-knél az 1,3 és a 2,4-es soros port megosztotta az IRQ-t, tehát elképzelhető, hogy ttyS1, ttyS3 kombó működhet annak függvényében, hogy milyen kőkorszaki agyhalottságot hagytak a fejlesztők a kernelben.
Ha nem megy, acpi és apic kernel opciók amiket kapcsolgathatsz:
http://www.rigacci.org/wiki/doku.php/doc/appunti/linux/sa/irq_acpi_apic
Ha régi az alaplap: acpi=force,
IRQ megadása a PCI slotokhoz: acpi_irq_pci=irq-number
2.6-os kerneleknél lehet próbálkozni a CONFIG_SERIAL_8250_SHARE_IRQ=y és a CONFIG_SERIAL_8250_SHARE_IRQ=n opciókkal, ezzel elméletileg a soros eszközök IRQ megosztását lehet konfigurálni.

És végül a vicc kategória:
Hogy mennyire jó az eszközkezelés a Linux kernelben, semmi sem példázza jobban, mint ez:
http://tldp.org/HOWTO/Plug-and-Play-HOWTO-4.html#ss4.8

--
"Maradt még 2 kB-om. Teszek bele egy TCP-IP stacket és egy bootlogót. "

Koszi szepen, sajnos setserial-t probaltam: IO hibat dob es csak nagyon ritkan fut le. Ha lefut akkor is csak IRQ 0, azaz polling segitsegevel megy a kommunikacio. Ha pedig mas IRQ-ra allitom egyszeruen sosem jon adat.

A vicc az hogy nekem polling is jo lenne, de nem tudom megbizhatoan beallitani azt sem. Megfelelo rcX.d-be mar 100-as ciklusba raktam sleep 0.05-tel setserial parancsot, de van mikor igy is ujrainditas kell.

Lehet usb-serial dongle lesz ebbol..

SZERK:
Úristen! Elolvastam a Windows Configures részt..

subs.
off: code-taget zárd le kérlek