Soros multiport kártya

Komoly 390,- Ft/db áron kaptam 4 portos soros kártyát :) Na persze ez azért is mert nincs hozzá kábel és a csatlakozó felület egy 3 soros 44 pólusú DSUB csati. A cuccot a "Brain Boxes" csinálta és ez az UC-260B modell. Megtaláltam a honlapjukat, van win és Linix driver (sajna 2.4.x -es kernelhez) és kézikönyv, viszont pont evvel csatlakozóval szerelt modellhez nincs kiosztás. Jó, írtam nekik egy szívhez szóló levelet és láss csodát, válaszoltak (beleírtam hogy ócskaságként vettem). Kaptam egy teljesen korrekt rajzot a csatlakozóról - öröm az ha ilyen gyártóval/kereskedővel találkozhat az ember - köszönöm itt is!
Viszont modernebb Linux kernelre nincs driver, de a partner azt mondta, hogy a szokásos setserail -al is megoldható. Kicsit hitetlenkedem, de hátha. Csináltam egy lspci -vnn itt az output:

03:07.0 Multiport serial controller [0702]: Brain Boxes Device [135a:0d21] (rev 01)
Subsystem: Brain Boxes Device [135a:0633]
Flags: medium devsel, IRQ 23
Memory at f7006000 (32-bit, non-prefetchable) [=128]
I/O ports at 8800 [=128]
I/O ports at 8c00 [=64]
I/O ports at 9000 [=16]
Memory at f7007000 (32-bit, non-prefetchable) [=64]
Memory at f7008000 (32-bit, non-prefetchable) [=16]
Capabilities: [40] Power Management version 2

Szerintetek hol vannak itt a soros port IO címek?
Ebből még tippelni sem egyszerű :(

Hozzászólások

en anno 2 portos pci-s kartyanal probalgatassal sakkoztam ki, ez az eredmeny:

00:09.0 Serial controller [0700]: NetMos Technology PCI 9835 Multi-I/O Controller [9710:9835] (rev 01) (prog-if 02 [16550])
Subsystem: LSI Logic / Symbios Logic 2S (16C550 UART) [1000:0002]
Flags: medium devsel, IRQ 19
I/O ports at 30a0 [=8]
I/O ports at 3098 [=8]
I/O ports at 3090 [=8]
I/O ports at 3088 [=8]
I/O ports at 3080 [=8]
I/O ports at 3060 [=16]
Kernel driver in use: serial

0000:00:09.0: ttyS2 at I/O 0x30a0 (irq = 19) is a 16550A
0000:00:09.0: ttyS3 at I/O 0x3098 (irq = 19) is a 16550A

A'rpi

Igen láttam effélét - tudom hogy egy-egy port az 8 cím hossz.
Találtam egy olyan cikket, ahol a fickó az UC-246 -os kártyát hegesztette be - ez EGY soros port, és láss csodát, ugyan az a port kiosztás!?

04:01.0 Multiport serial controller: Brain Boxes Device 0aa2 (rev 01)
Subsystem: Brain Boxes Device 0403
Flags: medium devsel, IRQ 17
Memory at dfafff80 (32-bit, non-prefetchable) [=128]
I/O ports at dc80 [=128]
I/O ports at dc40 [=64]
I/O ports at dc30 [=16]
Memory at dfafff40 (32-bit, non-prefetchable) [=64]
Memory at dfafff30 (32-bit, non-prefetchable) [=16]
Capabilities: [40] Power Management version 2

A gyártó egyik embere azt súgta neki, hogy használja a második IO cím csoportot, így egy TI 16C750 -es UART emulációt kap. Aztán egy féltéglával fejbe csapja a kernel serial_reg.h fájlban a FIFO méretet - mivel ez csak 64 bájtos!? Egyébként megnéztem a a TI honlapján (le is tölétötem) ez abszolút kompatibilis a '450 és hasonló UART -al - vagyi ez is csak 8 IO porton dolgozik. Lehet hogy a második csoportot kell használni és 8 címenként találok egy-egy portot? (a 64 -es méret arra utalna, hogy akár 8 portos is lehetne ez a cucc?)

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

A modem ötlet tetszik - nekem itt nem gond, legalább 4 gép fut úgy hogy inkább a link kábel.
Viszont, még valami kábelt kell hozzá ácsolnom és most épp az Outlook Express, Courier IMAP és az Exim4 összehangolásán küzdök. Szólok ha valamire jutok.
(Egyébként a kártyából még van 5 db a pcbonto.hu -n a jelzett áron)

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

Én inkább a modem HW flow control vezetékeivel játszanék (ilyen RTS/CTS/DTR/DSR meg hasonlók), azokat emlékeim szerint direktben lehet látni a megfelelő regiszterekben. Szóval rákötöd a bemenetre a +12V-ot, kiolvasod az összes címet, kint átállítod -12V-ra, megint kiolvasod, és megnézed, hogy hol változott. A chip leírásából kinézhető, hogy a modem státusz vezetékek állapotát melyik regiszter melyik bitjében adja vissza, ebből kb. látható lesz, hogy melyik címen lakik az adott interfész.

No hát ez a méreg ...
Debian Squeeze kernel 2.6.32-5-686 #1 SMP
Mivel az új kernelekben a soros portok száma négy (de jó) betettem, a lilo.conf -ba append="8250.nr_uarts=8" - ennyi ugyan nincs de ez így kerek :) - reboot.
Létrejöttek /dev/ttyS0 ... 7 nódok.
Beakarom konfigolni a cuccot:
#setserail -v /dev/ttyS4 port 0x8c00 irq 23 uart 16750
mire valami olyat ír ki hogy "invalid parameter".
Végig küzdöttem a többi port címmel is - semmi. Törölgettem a parancs végéből - melyik paraméter hibás - semmi. Végül azt mondtam hogy ttyS1 - itt nincs fizikailag portom (kivezetés biztos nincs), és láss csodát - elfogadta! Szépen betudtam konfigolni 1 .. 3 - azaz három portot, ki is próbáltam (minicom - sima RxD/TxD semmi átvitel vezérlés/handshake).
Átdobtam a setserial -t "manual" -ra és bekonfigoltam az /etc/serail.conf - reboot.
A lényeg, bármit konfiguráltam eddig nem vagyok képes bekonfigurálni a negyedik portot - azt sem igazán értem miért csak a ttyS0 .. 3 mennek a portok a többi nód nem használható :(
Mi a nyavalya miatt lehet ez?

Megjegyzés: amit végképp nem értek, hogy a syslog -ban is csak a ttyS0 -nak van nyoma, a többi mintha ott sem lenne? Lehet hogy ez valami bug?
Ne hogy már egy nyavalyás soros kártya miatt kelljen kernelt forgatni.

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

04:01.0 Multiport serial controller: Brain Boxes Device 0aa2 (rev 01)
Subsystem: Brain Boxes Device 0403
Flags: medium devsel, IRQ 17
Memory at dfafff80 (32-bit, non-prefetchable) [=128]
I/O ports at dc80 [=128]
I/O ports at dc40 [=64]
I/O ports at dc30 [=16]
Memory at dfafff40 (32-bit, non-prefetchable) [=64]
Memory at dfafff30 (32-bit, non-prefetchable) [=16]
Capabilities: [40] Power Management version 2

Ha egyszer a kártyád HÁROM portot mutat...

Félreérted. Eddig három port működik, de csak ha a szokásos, alsó 0 .. 3 portra állítom be:
/dev/ttyS1 uart 16750 port 0x8c00 irq 23 baud_base 115200 spd_normal skip_test
/dev/ttyS2 uart 16750 port 0x8c08 irq 23 baud_base 115200 spd_normal skip_test
/dev/ttyS3 uart 16750 port 0x8c10 irq 23 baud_base 115200 spd_normal skip_test
így a három már működik: 0x8c00, 0x8c08 és a 0x8c10 címen.
Nyilvánvalóan a 0x8c18 -nak is működnie kéne de valami, konfigurációs zavar van. Ha teszem azt, ezekt a ttyS4 .. 7 -re "állítom" ugyan azzal a hibával (minicom nem tudja megnyitni) nem működik. Olyan mintha a ttyS4 .. 7 nem lennének valódi nódok. Ilyennel még nem találkoztam. A kártya tuti hogy négy soros portot tartalmaz - XP alól tökéletesen működik mind a négy.
Valamit még be kellene állítanom, de nem tudom mit.

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

van a kernelben (forditaskor) egy opcio amivel enegdelyezed a multiport serialt, nem emlexem melyik de mindjar megnezem

Device Drivers /Character devices/Serial drivers

│ │ (4) Maximum number of 8250/16550 serial ports │ │
│ │ (4) Number of 8250/16550 serial ports to register at runtime │ │

szerintem az elso opcio hard limit, atz nem lehet utolag novelni, csak a 2.-at.

A'rpi

/boot/config-2.6.32-5-686
#
# Serial drivers
#
...
CONFIG_SERIAL_8250_NR_UARTS=32
CONFIG_SERIAL_8250_RUNTIME_UARTS=4

Úgy tudom ezt az utóbbit konfigurálom ezzel append="8250.nr_uarts=8"
Minden esetre, miután ezt betettem akkor hozta létre a /dev/ttyS4 ... 7 nódokat, előtte nem voltak.

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

Semmi előrelépés :(
lilo append=""8250.nr_uarts"
Létrejönnek a nódok /dev/ttyS0 ... 7
A /dev/ttyS0 - alaplapi 16550A - ezzel semmi gond.
/etc/serial.conf

/dev/ttyS0 uart 16550A port 0x03f8 irq 4 baud_base 115200 spd_normal skip_test
# Brain-boxes
/dev/ttyS4 uart 16750 port 0x8c00 irq 23 baud_base 115200 spd_normal skip_test
/dev/ttyS5 uart 16750 port 0x8c08 irq 23 baud_base 115200 spd_normal skip_test
/dev/ttyS6 uart 16750 port 0x8c10 irq 23 baud_base 115200 spd_normal skip_test
/dev/ttyS7 uart 16750 port 0x8c18 irq 23 baud_base 115200 spd_normal skip_test

Akármelyik portal próbálkozom, mint sima user, minicom - nem tudja megnyitni. Mint root megnyitja de nem működik.
Átkonfigolom:
/etc/serial.conf

/dev/ttyS0 uart 16550A port 0x03f8 irq 4 baud_base 115200 spd_normal skip_test
# Brain-boxes
/dev/ttyS1 uart 16750 port 0x8c00 irq 23 baud_base 115200 spd_normal skip_test
/dev/ttyS2 uart 16750 port 0x8c08 irq 23 baud_base 115200 spd_normal skip_test
/dev/ttyS3 uart 16750 port 0x8c10 irq 23 baud_base 115200 spd_normal skip_test
/dev/ttyS4 uart 16750 port 0x8c18 irq 23 baud_base 115200 spd_normal skip_test

Minden port működik kivéve a /dev/ttyS4 -et, sima user nem tudja megnyitni, root megnyitja de nem működik :(
A port nódok teljesen azonos beállítással bírnak:
crw-rw---- 1 root dialout 4, 64 Jul 11 19:45 /dev/ttyS0
crw-rw---- 1 root dialout 4, 65 Jul 11 19:45 /dev/ttyS1
crw-rw---- 1 root dialout 4, 66 Jul 11 19:45 /dev/ttyS2
crw-rw---- 1 root dialout 4, 67 Jul 11 19:45 /dev/ttyS3
crw-rw---- 1 root dialout 4, 68 Jul 11 19:45 /dev/ttyS4
crw-rw---- 1 root dialout 4, 69 Jul 11 19:45 /dev/ttyS5
crw-rw---- 1 root dialout 4, 70 Jul 11 19:45 /dev/ttyS6
crw-rw---- 1 root dialout 4, 71 Jul 11 19:45 /dev/ttyS7

A "sima" felhasználóm a "dialout" csoport tagja.
A setserial outputja pontosan azt mutatja amit az /etc/serial.conf -ban beállítottam. Megőrülök, már nem tudom hányféle kártyát használtam, állítottam be Linux alatt, mi maradhat ki?

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

Hát ez gáz :(
Csak a "tanulás" kedvéért megpróbálom Lenny -vel. Ha ott megy akkor bug report?

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

UP?

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

Debian Lenny kernel 2.6.26-2-686 #1 SMP
Ugyanúgy viselkedik.
Azt hiszem a lényeg, hogy az append="8250.nr_uart=" által létrehozott nódok használhatatlanok. Tény hogy számos hasonló kártyát a kernel felismer, és be is konfigurál, akkor ilyen probléma nem merül fel.
Nem tudom mit kellene megnéznem, talán az udev?
(amit eddig a konfigurációjában láttam nem igen foglalkozik a soros portokkal)

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

Adalék: lekzdtem turkálni a modulok között és találomra
#modprobe 8250_fourport
#setserial /dev/ttyS4
és hagyta magát :)
de nem működik :(
STP-nek lesz igaza - kernelt kell forgatni :(

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

Kernel forgatás? Miért is? Milyen paramétert állítsak másként? Itt valami nem stimmel. A lényeg hogy elvileg a kernel képes lenne másik 4 soros portot befogadni (a 8250.nr_uarts=8 paraméter megadásával). A nódok létrejönnek, de nem tudom beállítani hozzá a portot, nem fogadja el mindaddig, amíg nem emelek be egy másik soros driver modult. Ezzel a driver modullal persze nem működik, mivel a 16750 -es UART a 8250 -es modulban lakik, ami viszont be van forgatva a kernelbe.
Szóval, kernel forgatás, mit állítsak a kernelen? Az egyetlen ötletem, hogy a 8250 drivert is modulba tenni - de ennek nem sok értelme van. Lehet hogy a 8250 -es kernel modulba piszkáltak bele, így az nem képes 4 -nél több uart -ot lekezelni?

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

Éreztem! Ez a jelenség amolyan kernel bug szagú.
Csináltam egy olyat, hogy az alsó négy devicera raktam a négyportos zsugát az 6etc/serial.conf -ban, valahogy így:

setserial /dev/ttyS0 port 0x8c00 irq 23 uart 16750
setserial /dev/ttyS1 port 0x8c08 irq 23 uart 16750
setserial /dev/ttyS2 port 0x8c10 irq 23 uart 16750
setserial /dev/ttyS3 port 0x8c18 irq 23 uart 16750
# és itt jön a kanyar
setserial /dev/ttyS4 port 0x3f8 irq 4 uart 16550A
setserial /dev/ttyS5 port 0x2f8 irq 3 uart 16550A

Mind a hat port működik! Aztán visszanyúltam egy másik gépemhez (szépen működik, csak kicsit távol van) ahol egy Oxford chipset -es négyportos zsugát használtam. Ott a négy Oxford -os portot simán feltettem a /dev/ttyS4 ... 7 -re (úgy hogy a 2 és 3 nincs kihasználva) de az szintén 16550A uart -ot emulál. Valamiért a 16750 a mostoha gyerek - belepacsáltam a sz'rba.
Most már csak azt kellene kideríteni kinek is kellene szólni, mert ez nagyon bug szagú.
Addig is ez már sokkal jobb felállás - van hat élő, teljes értékű portom valami tesztet kellene csinálnom, tudnak -e rendesen működni! Azért a minicom teszt, portonként elég gyenge.

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