Portál AbcLinuxu, 2. května 2024 09:07

Jak na USB modemy a ISDN Terminal Adaptéry

24. 5. 2002 | Milan Gerža
Články - Jak na USB modemy a ISDN Terminal Adaptéry  

Rostoucí obliba USB se projevila i u výrobců modemů a ISDN terminal adaptérů. Jak si s těmito kousky železa rozumí Linux, na to se teď podíváme trochu podrobněji.

Článek jsem se snažil napsat tak, aby byl k něčemu především začátečníkovi. Za zjednodušení, případné nepřesnosti a jiné vady na kráse mne tedy prosím nekamenujte. Dále jsem zvolil princip více praxe, méně teorie. Pokud bude návod fungovat, není nutné znát více, ačkoli je podle mého názoru užitečné znát problematiku poněkud do hloubky. Pokud je na některém místě použito fixme, pak to znamená, že v této oblasti nejsem příliš kovaný a uvítám odezvu publika.

Následující postup byl odzkoušen na distribucích SuSE 7.3 a Mandrake 8.2. U SuSE jsem použil jádro 2.4.18 a 2.2.20, u Mandrake jádro přímo z distribuce(2.4.18-6mdk).

Je moje zařízení podporováno?

Známe to všichni. Výrobce přijde s nějakým kusem železa, vychvaluje jeho vlastnosti, prodá nám jej za výhodnou cenu, ale jaksi se nezmíní, že jeho zařízení je podporováno pouze pod WIN OS, a podporu Linuxu rozhodně rozjíždět nehodlá. Zařízení funguje pod WIN díky proprietárním ovladačům, a dokud se nějaký machr nerozhodne vyrobit ovladač pod Linux, máme prostě smůlu. Tohle se týká v poslední době hlavně interních Winmodemů, ale také mnoha USB zařízení. Externí USB modemy a ISDN T/A bohužel nejsou výjimkou.

Naštěstí existuje specifikace USB CDC ACM (Universal Serial Bus Communication Device Class Abstract Control Model), kterou některé modemy používají pro komunikaci s USB rozhraním. Ty pak pod Linuxem fungují bez problémů. (fixme: Jestli se nepletu, tyto modemy bez problémů běhají i pod Macy) Proto doporučuji před nákupem takového zařízení ověřit na stránkách výrobce, či u prodejce, zda-li je ACM kompatibilní.

Výchozí podmínky

Linux je velice variabilním operačním systémem. V praxi to znamená, že konkrétní postup nemusí fungovat ve všech případech stejně. Proto si nejdříve ze všeho musíme o svém Linuxu zjistit tyto informace:

používáme devfs (device file system)?
To zjistíme pomocí příkazu mount:

localhost:~ # mount |grep devfs
devfs on /dev type devfs(rw)

Vypsala se řádka s devfs, takze systém používá devfs.
používáme hotplug helper?

localhost:~ # ls /etc/hotplug
. .. blacklist net.agent pci.rc usb.distmap usb.rc hotplug.functions pci.agent usb.agent usb.handmap usb.usermap

Vidíme, že je hotplug nainstalován. Pokud ne, objeví se nám toto:

localhost:~ # ls /etc/hotplug
ls: /etc/hotplug: není souborem ani adresářem
Jdeme na ten modem

Na jedné konzoli budeme kontrolovat systémová hlášení(jako root), a to příkazem

localhost:~ # tail -f /var/log/messages

Teď odpojíme modem z USB portu.

Nemáme hotplug helper

Tato část je pro starší distribuce Linuxu, předpokládám, že jich bude méně. Ti, kteří mají hotplug, přeskakují na Zapojení modemu. Na druhé konzoli přejdeme do režimu superuživatele (root). Nejdříve zjistíme, zda-li je nahrán nějaký z následujících modulů: uhci, usb-uhci, nebo usb-ohci.

localhost:~ # lsmod
uhci 24160 0 (unused)

Máme nahraný modul uhci.

Pokud nic nahráno není, tak postupně zkusíme nějaký z modulů uhci, usb-uhci, nebo usb-ohci nahrát příkazem modprobe:

localhost:~ # modprobe uhci

Jakmile se nahraje bez chybových hlášení nějaký z nich, poznamenáme si, který to byl a pokračujeme. Dále nahrajeme moduly usbcore a acm těmito příkazy:

localhost:~ # modprobe usbcore
localhost:~ # modprobe acm

Na konzoli, kde sledujeme systémová hlášení, si ověříme, jak to zafungovalo. Mělo by se objevit něco jako:

acm.c: v0.21:USB Abstract Control Model driver for USB modems and ISDN adapters

Doposud bychom neměli narazit na problém.

Zapojení modemu

Modem zapojíme do USB portu. Nyní pečlivě sledujeme konzoli se systémovými hlášeními. Pokud se objeví něco jako:

hub.c: USB new device connect on bus2/2, assigned device number 5
ttyACM0: USB ACM device

máme vyhráno. Modul acm právě rozpoznal náš modem jako ACM kompatibilní a umí s ním komunikovat.

Pokud se objeví v logu pouze něco jako:

hub.c: USB new device connect on bus2/2, assigned device number 2
usb.c: USB device 2 (vend/prod 0x7b0/0x3) is not claimed by any active driver.

tak zkontrolujeme, zda je aktivní modul acm příkazem:

localhost:~ # lsmod | grep acm
acm 5216 0 (unused)

Pokud se nic nevypíše, příkazem:

localhost:~ # modprobe acm

nahrajeme potřebný modul. Teď by se mělo objevit to hledané

ttyACM0: USB ACM device

Pokud se nic neobjeví, znamená to že patříme mezi méně šťastné jedince. Modem není ACM kompatibilní a tento článek bohužel nepomůže.

Těm, kteří pokračují ve čtení, se jejich postup bude lišit podle toho, jestli používají devfs.

Používáme devfs

Modul acm nám nyní vytvořil zařízení v /dev/usb/acm, a to s čísly 0, 1 nebo 2. Převedeno do češtiny to znamená, že pokud používáme jeden USB modem, mělo by existovat zařízení /dev/usb/acm/0.

localhost:~ # ls -l /dev/usb/acm/
crw-r--r-- 1 root root 166, 0 Apr 1 10:49 /dev/usb/acm/0

Toto zařízení pak používáme pro komunikaci s modemem. Pro zjednodušení si můžeme si vytvořit symlink příkazem:

localhost:~ # ln -s /dev/usb/acm/0 /dev/modem

Dále se budeme odkazovat pouze na /dev/modem. (fixme: Vzhledem k tomu, že devfs nepoužívám, bych prosil někoho se zkušenostmi, jak tento link zachovat i po restartu počítače, případně jestli to daná distribuce dělá automaticky.)

Nepoužíváme devfs

Abychom mohli používat modem, musíme mít (nejlépe v adresáři /dev) speciální soubor, který na modem odkazuje. U SuSE Linuxu 7.3, je již předem vytvořen /dev/ttyACM0. Pokud jej nemáme, podíváme se ještě, jestli náhodou neexistuje /dev/usb/ttyACM0.

localhost:~ # ls /dev/ttyACM*"
crw-rw---- 1 root uucp 166, 0 říj 8 2001 /dev/ttyACM0
crw-rw---- 1 root uucp 166, 1 říj 8 2001 /dev/ttyACM1
crw-rw---- 1 root uucp 166, 2 říj 8 2001 /dev/ttyACM2
crw-rw---- 1 root uucp 166, 3 říj 8 2001 /dev/ttyACM3

localhost:~ # ls /dev/usb/ttyACM*
ls: /dev/usb/ttyACM*: není souborem ani adresářem

Pokud nic nenajdeme, musíme speciální soubor vytvořit. To uděláme příkazem:

localhost:~ # mknod /dev/ttyACM0 c 166 0.
localhost:~ # chgrp uucp /dev/ttyACM0.

Pak, abychom si věci trochu zjednodušili, vytvoříme symlink

localhost:~ # ln -s /dev/ttyACM0 /dev/modem

Dále se budeme odkazovat pouze na /dev/modem. V souboru /etc/group pak do skupiny uucp přidáme všechny uživatele, kteří mají mít přístup k modemu. Konkrétní řádek ze souboru /etc/group pak bude vypadat např. takto:

uucp:x:14:uucp,fax,root,fnet,milan,marika

Používání modemu s vašimi oblíbenými programy

Nyní máme modem funkční, takže věc je stejná, jako s modemem připojovaným k sériovému portu. Zadáme pouze kde se modem nachází, tj. /dev/modem, /dev/usb/acm/0 nebo /dev/ttyACM0. Pak už nám nic nebrání modem používat. I když...

AT init string

Modemy pro svá nastavení používají tzv. AT příkazy. Ve zkratce: potřebujeme zinicializovat modem tak, abychom se mohli připojit (více informací o modemech najdeme tady). Je to smutné, ale nejvíce se mi osvědčilo tyto příkazy zkopírovat z logu, který vytvářejí WIN při komunikaci s konkrétním modemem. Pod W98 jej najdeme tady:
Modemy->vlastnosti->připojení->upřesnit->zobrazit protokol.
Ty řetězce začínají slovy "Send: ATxxxxxxxxxxxx". Většinou bývají 2-3. Je to jednoduché, rychlé a funkční.

Druhá možnost pro odvážné je: zjistit si kompletní seznam AT příkazů od výrobce, a nastavit modem sám. (fixme: další způsoby, jako extrakce z .inf souborů, očekávám v diskusi.)

Automatizace nahrávání modulů - nemáme hotplug

(fixme: Tady to není moje parketa, prosím o případné doplnění.) Do souboru "/etc/modules.conf" přidáme následující řádky:

alias char-major-166 acm
pre-install acm /sbin/modprobe "usbcore"
pre-install usbcore /sbin/modprobe "uhci"

Modul uhci nahradíme modulem, který jsme si poznamenali v sekci Nemáme hotplug helper. V konzoli spustíme:

localhost:~ # depmod

Nyní, kdykoli se nějaký program pokusí komunikovat se zařízením /dev/ttyACM*, nahrají se moduly potřebné pro komunikaci s modemem.

Automatizace nahrávání modulů - máme hotplug

V souboru /etc/hotplug/usb.distmap by měl být řádek začínající slovem acm. Pokud tam není, přidáme jej:

acm 0x0070 0x0000 0x0000 0x0000 0x0000 0x02 0x00 0x00

To nám zajistí, že při připojení modemu do USB portu se automaticky nahraje potřebný modul.

Závěr

Snažil jsem se pokrýt všechny oblasti, kde bychom mohli narazit na problém. Doufám, že se ozvete v diskusi, opravíte chyby a doplníte informace. Můj modem je Diva 852 T/A od firmy Eicon, funguje bezproblémově. Pokud vím, tak zase USB modemy a T/A od Microcomu problémové jsou.

Doufám, že jsem čtenářům pomohl a všem vám přeju hodně zábavy s Linuxem.

Zdroje informací

/usr/src/Linux/Documentation/usb/acm.txt
/usr/src/Linux/Documentation/filesystems/devfs/README
man 5 modules.conf
man 1 mknod
http://Linux-hotplug.sourceforge.net

Další články z této rubriky

HW novinky: podzimní přehled #2
HW novinky: podzimní přehled #1
HW novinky: návrat skleněných ploten v HDD
HW novinky: PCI Express 4.0 prý ještě letos
HW novinky: i Skylake-X s 12 jádry používá levnou teplovodivou pastu

Diskuse k tomuto článku

25.5.2002 14:01 Pavel
Rozbalit Rozbalit vše Díky za článek - Diva chodí...
Odpovědět | Sbalit | Link | Blokovat | Admin
Mám RH7.3. Modem Diva 852/TA jsem jen připojil k USB, vyrobil link na /dev/ttyACM0 a modem chodí. Bez devfs s hotplug.. Díky Pavel
25.5.2002 19:21 Zdenek
Rozbalit Rozbalit vše Ostatni USB devices
Odpovědět | Sbalit | Link | Blokovat | Admin
Je mozne tento postup alikovat i na jina zarizeni,napr fotoaparat? Samozrejmne ne doslovne,ale princip pripojovani USB zarizeni obecne. Diky je to zajimave.
25.5.2002 20:06 Milan Gerža | skóre: 30
Rozbalit Rozbalit vše Ostatni USB devices
no, jsou tu veci, ktere se daji obecne pouzit:

- sledovani "/var/log/messages"
- kontrola a pripadna modifikace souboru v "/etc/hotplug/"
- uplatneni ruznych postupu pro devfs a specialni zarizeni v adresari "/dev/"

Samozrejme pri pouziti jineho hardware je nutne nejak zjistit, jaky modul je potreba - napr. na www.linux-usb.org, nebo od vyrobce(kdyz ma clovek kliku), pripadne z dokumentace k jadru.

27.5.2002 07:21 OldFrog
Rozbalit Rozbalit vše Dik.
Odpovědět | Sbalit | Link | Blokovat | Admin
Diky, modem mam sice na seriove linkce, ale nyni mam predstavu, jak funguji USB modemy na linuxu. Uzitecne.
28.5.2002 14:52 Daniel Smolik
Rozbalit Rozbalit vše USB modemy
Odpovědět | Sbalit | Link | Blokovat | Admin
Jen se obavam, ze tech chodivych USB modemu bude mensina :-(((.
29.5.2002 10:02 Beren | skóre: 16
Rozbalit Rozbalit vše USB modemy
Mno já můžu doporučit USB modem Well FM-56USB. Spolu s drivery od SmartLinku by to mělo fungovat bez problémů.
29.5.2002 18:03 Kill007
Rozbalit Rozbalit vše USB modemy
Asi jo... zrovna ten muj Microcom ISDN USB Porte+ asi nikdy nerozjedu :(.
30.5.2002 21:47 Pavel Čejka
Rozbalit Rozbalit vše USB modemy
Taky jsem narazil, Microcom ISDN USB Porte plus opravdu nechodí a asi ani nikdy chodit nebude. Kdysi jsem se ho snažil s kamarádem rozchodit v jedné škole. Nicméně Microcom nabízí i nějaký interní ISDN modem a ten údajně v Linuxu pracuje. Mimoto by měl být i levnější.
12.6.2002 14:58 dalda
Rozbalit Rozbalit vše Planet USB
Odpovědět | Sbalit | Link | Blokovat | Admin
Mam v supliku USB modem Planet. Byly s nim problemy pod Win2000 tak se koupil jiny. Na svem desktopu mam Linux. Myslite ze ho takhle rozchodim?

Jinak clanek je pekny a poucny.

14.7.2002 22:09 Cerny
Rozbalit Rozbalit vše microcom isdn usb porte plus
Odpovědět | Sbalit | Link | Blokovat | Admin
podle toho navodu se mi nepodařilo modem nainstalovat jsem zacatecník tak nevím jestli za to muzu ja nebo modem tak prosím jestli se to někomu povedlo tak mi napiste jak mam postupovat mam red hat 7,3 Misa
7.7.2003 10:29 NasaK
Rozbalit Rozbalit vše todos surflite
Odpovědět | Sbalit | Link | Blokovat | Admin
mam todos surflite a skusal som ho rozbehat pomocou tohto navodu ale nic. spravil som vsetko ako som mal , mozno je to tym ze kppp to nechce alebo co! prosim poradte!
3.8.2003 11:52 Tomáš Zmek
Rozbalit Rozbalit vše USB ASUSCOM a MDk 9.1
Odpovědět | Sbalit | Link | Blokovat | Admin
Tenhle clanek je to co jsem hledal, jen co se odpojim od win pujdu to vyzkouset v linuxu. Jen by me zajimalo estli uz novy MDK 9.1 a jeho jadro je podporovano mym modememe, tedy jestli to bude fungovat a jestli nahodou uz neni jednodusi postup. :o) No nic, kdyz tak se ozvete :o)
12.8.2003 13:34 Mam stejny problem
Rozbalit Rozbalit vše USB ASUSCOM a MDk 9.1
nahral jsem si vcera linux MDk 9,1 z CHIP cd. celkem se mi libi ale nemohu rozchodit modem mam ASUSCOM TA 280ST na USB.Prosim napiste mi na e-mail jestli se vam podarilo modem rozchodit at vim jestli tomu mam venovat par hodin a zkouset to take.:) Predem dekuji rene.vraspir@seznam.cz
28.12.2003 02:45 matino
Rozbalit Rozbalit vše TODOS SURFLITE II USB
Odpovědět | Sbalit | Link | Blokovat | Admin
mam todos surflite II a skusal som ho rozbeha podla vasho navodu na Mandrake 9.2 .Spravil som všetko presne ale nič! Kppp mi stale vyhadzuje že mu chyba "nosny signal" prosim poradte co s tim.
29.12.2004 10:59 Lovec
Rozbalit Rozbalit vše Re: TODOS SURFLITE II USB
rozchodil som Todos SurfLite III USB .., podla navodu, v kppp treba zmenit inicializacne retazce prvy retazec AT &F V1 &D2 &C1 S0=0 a druhy AT&K3 tot vsjo :), ide na 64kB, v logu som videl este daku inicializaciu

Setting Digital Link Protocol ATB31**CMLP=3 ale kedze v kppp su len dva inicializacne riadky tak som to vynechal a ide aj bez toho
19.2.2005 19:47 dghemo
Rozbalit Rozbalit vše Re: TODOS SURFLITE II USB
Mam Todos ... II, urobil som vsetko podla navodu, chodi to ALE robim ro na Mandrake 10.1, namiesto acm je tam cdc-acm, to je ale myslim jedno, lenze po restarte mi zmizne zo systemu symlink na /dev/ttyACM0 a pokial ho tam po starte rucne nedohodim tak modem nefunguje. V kppp je v devices na vyber len /dev/usb/ttyACM0 a nie /dev/ttyACM0 takze to neviem urobit ani bez linku. Viete nekto poradit? Thx predom.
12.8.2005 00:33 iyo
Rozbalit Rozbalit vše Skončil som na vyhľadaní acm
Odpovědět | Sbalit | Link | Blokovat | Admin
Viete mi niekto povedať prečo sa mi systém tvári ako keby niečo ako acm neexistovalo? Používam Fedora Core 2 a modem Mercury.

Vedel by mi niekto poradiť nejaké iné články alebo tutorialy, pomocou ktorých by som nainštaloval modem?

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.