┌vod
Hledat
OvladaΦe
Hardware
Software
AbφΦko
O nßs

Jak na USB modemy a ISDN Terminal AdaptΘry

Jak na USB modemy a ISDN Terminal AdaptΘry

24. 5. 2002 10:15 | Milan Ger╛a

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

Diskuse k tomuto Φlßnku

Datum: 25. 5. 2002 14:01
Od: Pavel
Titulek: Dφky za Φlßnek - Diva chodφ...

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

Datum: 25. 5. 2002 19:21
Od: Zdenek
Titulek: Ostatni USB devices

Je mozne tento postup alikovat i na jina zarizeni,napr fotoaparat? Samozrejmne ne doslovne,ale princip pripojovani USB zarizeni obecne. Diky je to zajimave.

Datum: 25. 5. 2002 20:06
Od: Milan Ger╛a
Titulek: 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.

Datum: 27. 5. 2002 07:21
Od: OldFrog
Titulek: Dik.

Diky, modem mam sice na seriove linkce, ale nyni mam predstavu, jak funguji USB modemy na linuxu. Uzitecne.

Datum: 28. 5. 2002 14:52
Od: Daniel Smolik
Titulek: USB modemy

Jen se obavam, ze tech chodivych USB modemu bude mensina :-(((.

Datum: 29. 5. 2002 10:02
Od: Beren
Titulek: 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∙.

Datum: 29. 5. 2002 18:03
Od: Kill007
Titulek: USB modemy

Asi jo... zrovna ten muj Microcom ISDN USB Porte+ asi nikdy nerozjedu :(.

Datum: 30. 5. 2002 21:47
Od: Pavel ╚ejka
Titulek: 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╣φ.

Datum: 12. 6. 2002 14:58
Od: dalda
Titulek: Planet USB

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.

Datum: 14. 7. 2002 22:09
Od: Cerny
Titulek: microcom isdn usb porte plus

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


(c) AbcLinuxu s.r.o.   Grafika: megadesign