Udev kérdés

 ( kumgabor | 2009. december 10., csütörtök - 11:57 )

Sziasztok!

Egy Huawei E220-as 3G modemet szeretnék beállítani úgy, hogy amikor bedugom a gépbe, automatikusan csatlakozik.

Az /etc/udev/rules.d/55-huawei-e220.rules fájl tartalma:
SUBSYSTEM=="usb", SYSFS{idProduct}=="1003", SYSFS{idVendor}=="12d1", RUN+="/opt/3gmodem/plugin.sh &"

Az /opt/3gmodem/plugin.sh több mindent is csinálna, többek között inídtana egy wvdialt, viszont a /dev/ttyUSB0 csak akkor jön létre, ha a plugin.sh már végzett. Ha sleep-et teszek bele, akkor is csak utána.

Ötlet?

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

Ezt nézzed meg, hátha segít

http://ubuntuforums.org/showthread.php?t=1193355&page=3
(most sajnos nem jön be)

Itt azt fejtegetik, hogy hogyan lehet modemként felismertetni.
Nekem alapból modemként megy mindenféle udev-beállítás nélkül. Udevből a wvdialt indítanám.

--
Kum G.
Neked már van Linux pólód?

De mégse megy alapból modemként, ha bedugod és még nincs usb modem eszközöd. Ha bedugod akkor létre kell jönnie az eszköznek, csak ezután lehet elindítani bármilyen progit, ami ezt az eszközt használná.
dmesg mit ír mikor bedugod, ha nincs semmi sem az udev-ben?

De igen, miután lefut az udevnek futtatásra megadott script. A probléma, hogy csak utána. Ha a scriptet kiveszem, akkor azonnal megy.

--
Kum G.
Neked már van Linux pólód?

SZVSZ ehhez nem az udevre van szükséget, hanem egy háttérben futó demonra, ami figyeli, hogy mikor jelenik meg a device file. Amikor megjelenik, akkor pedig lefuttatja a megfelelő scriptet.
Csaba

Ez egy tipikus szívás az udev-vel.

Én is többször, egészen konkrétan találkoztam ilyen gonddal, azaz amikor az udev meghívta a szkriptemet, még nem voltak meg a ttyUSB* fájlok. Ennek az volt az oka, hogy még nem fejeződött be az eszköz inicializálása. Az segített, hogy egy másik udev szabályt találtam ki, ami ugyanarra az eszközre vonatkozott, csak éppen akkor hívta meg a szkriptet, amikor a ttyUSB*-ok már létrejöttek.

Mondjuk próbálkozz valami ilyesmivel:
KERNEL=="ttyUSB0", SYSFS{idProduct}=="1003", SYSFS{idVendor}=="12d1", RUN+="/opt/3gmodem/plugin.sh &"

A KERNEL helyett érdemes lehet még a KERNELS-szel is próbálkozni, ha a "magasabbrendű" eszközre akarsz hivatkozni... de igazából én sem udev-ből indítanám a tárcsázást, hanem egy kis démonból.
--
http://www.open-st.eu

Na ja, de a ttyUSB* eszközök csak akkor jönnek létre, ha az eszközt modemként inicializálja. Ez az ami alapból nem szokott menni. Gyönyörűen felismeri a kernel, hogy benne van a CDROM, az USBSTORAGE, meg az USBMODEM, csakhogy nem modemként inicializálja az eszközt. Így viszont nem jönnek létre a ttyUSB-k. Ezért szoktak a HUAWEI stick-ekhez usb_modeswitch-et használni.

Így van.

Azt elfelejtettem írni, hogy feltételezem, hogy be van töltve az option driver is. Mert az option driver automatikusan észreveszi ezt a modemet és egyből létre is hozza neki a ttyUSB* bejegyzéseket. Az usb_modeswitch is át tudja kapcsolni az E220-at (E272-t) (és nyilván még sok mást is), csak ennél a modemnél fölösleges használni, mert az option alapból tudja, és úgy sokkal egyszerűbb.
--
http://www.open-st.eu

Az option már része a kernelnek, vagy még kézzel kell hozzágyömöszölni? Az utolsó leírásokban, amiket olvastam (jó régen volt), még kézimunkázni kellett...nem úgy :)

Már része a kernelnek. Ahol én használom, ott modulként van fordítva, de induláskor egyből betöltjük. Pl. egy csomó Huawei modemet gyönyörűen meghajt, sokhoz nem is kell usb_modeswitch. (Ami vicces még, hogy néha az eject /dev/sr0 jobban működik, mint az usb_modeswitch).
--
http://www.open-st.eu

Nem, bárminemű berhelés nélkül ott a ttyUSB.
Simán bedugva kézzel indítható is a wvdial. Csak ezt nem kézzel szeretném indítani.

--
Kum G.
Neked már van Linux pólód?

Milyen démonra gondolsz?

--
Kum G.
Neked már van Linux pólód?

Nem tudom milyen linux-ot használsz de talán megoldás rá, ha Upstart event-based init daemon segítségével oldod meg, mert ott hivatkozhatsz arra mikor az interface up állapotba kerül

Debian Lenny. Az upstart nem ubuntus cucc?

--
Kum G.
Neked már van Linux pólód?

En probalnek valami ilyesmit:

RUN+="/opt/3gmodem/plugin1.sh"

aztan a /opt/3gmodem/plugin1.sh fajlba:

#!/bin/bash
nohup /opt/3gmodem/plugin.sh 2>&1 >/dev/zero &

vegul a /opt/3gmodem/plugin.sh elejere tennek egy "sleep 10"-et.
Teny, hogy nem szep megoldas, de akar mukodhet is... ;-)

Szerintem ez lesz a megoldás, köszönöm!

--
Kum G.
Neked már van Linux pólód?

Sajnos így is ugyanaz a gond.

--
Kum G.
Neked már van Linux pólód?

A megoldás:

KERNEL=="ttyUSB0", ATTR{dev}=="188:0", SUBSYSTEMS=="usb", ATTRS{product}=="HUAWEI Mobile", ACTION=="add", RUN+="/bin/sh /opt/3gmodem/plugin.sh", OPTIONS+="last_rule"

--
Kum G.
Neked már van Linux pólód?

En igy hasznalom:

ashbringer:~# cat /etc/udev/rules.d/90-huawei_e630.rules
KERNELS=="ttyUSB0", SUBSYSTEMS=="usb-serial", DRIVERS=="option1", ATTRS{port_number}=="0", RUN="/usr/bin/pon pannon"