Skylink cdma usb модем wettelecom wm-d200

Имаме WeTelecom WM-D200, който - има EV-DO Rev.A, който е много по-бърз от простия EV-DO; - има гнездо за свързване на външна антена, което е много полезно в нашите райони; - беше продаден на "промоция" за доста смешни пари. Както се очакваше, когато се заби в Linux кутия, това животно не беше разпознато и системата видя вместо модем. USB CD-ROM!

Е .. започваме да танцуваме с тамбура)

usb_modeswitch и gcc

Първото нещо, което ми дойде на ум, беше един от онези глупави ключове, които трябва да бъдат превключени от драйвера от CD-ROM към модема, тъй като драйверите за Windows и Macos бяха на този компактдиск. И тогава се оказва, че помощните програми и системата usb_modeswitch в ubuntu 8 липсват като клас и трябва да ги компилираш от изходния код. Самият usb_modeswitch живее тук: http://www.draisberghof.de/usb_modeswitch h/. Но трябваше да страдам с компилация, тъй като търговците на Ubuntu смятат, че това не е Linux, а един вид Windows и не инсталират никакви инструменти за разработка по подразбиране. Igogo, за да компилирам и стартирам, трябваше да доставя gcc, заглавки, tcl, библиотеки. Измъчен, общо взето. И най-досадното беше, че тези манипулации не дадоха нищо, освен че сега usb_modeswitch е на сървъра. Не проработи. Защото, глупако.

Внимателното проучване на устройството с командатаlsusb -v -d 22de:6801(незабавно правене на това - религията вероятно не позволяваше) показа, че в допълнение към CD-ROM-а, има още три "специфични за производителя" устройства, които висят на устройството, които, много вероятно, са модемни интерфейси.

И защо не опитате да принудите usbserial модула да изяде тези странни устройства? Готово - готово! Взимаме/etc/modprobe.confи поставяме реда в него:

опции usbserial vendor=0x22de product=0x6801

След това претоварваме usbserial модулитеи опция, ако такива висят и, при включване на модема, получаваме в логето:

guard kernel: [1194848.835704] usb 1-2: ново пълноскоростно USB устройство, използващо uhci_hcd и адрес 44 guard kernel: [1194849.007489] usb 1-2: конфигурация #1, избрана от 1 избор guard kernel: [1194849.025514] scsi46 : SCSI емулация за USB Mass s Устройства за съхранение защита на ядрото: [1194854.020899] scsi 46:0:0:0: CD-ROM We Telecom CD-ROM 1.00 PQ: 0 ANSI: 2 защита на ядрото: [1194854.053826] sr1: scsi-1 устройство защита на ядрото: [1194854.053982] sr 4 6:0:0:0: Прикачен scsi generic sg2 тип 5 пазно ядро: [1194854.150618] sr1: CDROM не е готов. Уверете се, че има диск в устройството. guard kernel: [1194864.049540] usb 1-2: USB изключване, адрес 44 guard kernel: [1194865.586859] usb 1-2: ново пълноскоростно USB устройство, използващо uhci_hcd и адрес 45 guard kernel: [1194865.753797] usb 1-2: конфигурация #1, избрана от 1 избор защитно ядро: [1194865.756773] usbserial_generic 1-2:1.0: открит генеричен конвертор защитно ядро: [1194865.756987] usb 1-2: генеричен конвертор, сега прикрепен към ttyUSB0 защитно ядро: [1194865.759955] usbserial_generic 1-2:1.1: открит генеричен конвертор защитно ядро: [1194865.760193] usb 1-2: генеричен конвертор, който вече е прикрепен към ttyUSB1 защитно ядро: [1194865.761856] usbserial_generic 1-2:1.2: открит генеричен конвертор защитно ядро: [11948 65.762082] usb 1-2: общ конвертор, който вече е прикрепен към ttyUSB2 пазно ядро: [1194865.796607] scsi47 : SCSI емулация за USB устройства за масово съхранение пазно ядро: [1194870.795188] scsi 47:0:0:0: CD-ROM We Telecom CD-ROM 1.00 P В: 0 ANSI: 2 пазно ядро: [1194870.807191] sr1: scsi3-mmc устройство: 0x/0x caddy пазно ядро: [1194870.807352] sr 47:0:0:0: Прикачено scsi генерично sg2 тип 5 пазно ядро: [1194870.901 012] sr: Sense Key : Няма смисъл[текущо] пазно ядро: [1194870.901017] sr: Добавяне. Сетивност: Няма допълнителна сетивна информация

Тоест имаме три usbserial порта (само 0 работи) и cd-rum, а поради манипулациите на първия урок нулевият порт вече свети като / dev / skylink. Стартирайте pppd и се насладете на сравнително бърз интернет.

И всичко би било наред, но schoollink е известен с факта, че на всеки 8 часа прекъсва връзката и не прекъсва канала, а безкрайните LCP прекъсват, вярвайки, че клиентът ще прекъсне канала. Но уви, в случая с WM-D200 това не е така, тоест pppd прекъсва връзката, освобождава порта и модемът остава свързан и, когато се опитва да се свърже отново, чатът вижда не интерфейса на модема, а оставащата PPP връзка с LCP терминиращи пакети от оборудване за schoollink. Това, разбира се, е същият "епичен провал", който pppd страда в този случай. Накратко, трябва да научите pppd да "затваря".

За щастие, pppd има опция "прекъсване", която ви позволява да изпълните скрипт, когато връзката приключи. Най-простото нещо, което идва на ум, е да изпратите нещо към модема, като древния +++ATH, но експериментите с minicom показаха, че не можете да преминете през този модем толкова лесно. Следващата стъпка беше да изпратите нулиране на устройството. Нямаше подходяща програма за този случай и трябваше да напиша моя собствена, примитивна версия (resetdev.c):

#include #include #include #include #include

void main(int argc, char **argv) const char *име на файл; int fd; име на файл = argv[1]; fd = отворено (име на файл, O_ГРЕШНО); ioctl(fd, USBDEVFS_RESET, 0); затвори(fd); връщане; >

сега грабваме този боклук, компилираме го и го настройваме на модемното устройство, т.е. направи нещо подобно

Нулирането преминава, но, уви, модемът не затваря. GY)

Последното нещо, което остава, е да опитате програмно"изкривяват" захранването на модема. Мощно мрежово търсене показа, че това се прави чрез устройства като/sys/bus/usb/devices/usb1/1-2/power/leve l- например, за деактивиране изпращаме:

спиране на ехо > /sys/bus/usb/devices/usb1/1-2/power/leve l

Както се оказа, тази мярка засяга модема. Остава само да напишем скрипт, който намира устройството в /sys/bus/usb и го вкарва в опцията за прекъсване на връзката във файла/etc/ppp/peers/SkyLink(или както там го наричате). Нарекох скрипта resetwetelecom:

/usr/bin/logger -p 'syslog.warning' "Опитвам се да нулирам модема на CDMA WeTelecom ($WETELDEV)."

/usr/sbin/lsusb -d "$WETELDEV" >/dev/null изход 1 BUS=`/usr/sbin/lsusb -d "$WETELDEV"/usr/bin/awk '< print($2) >'' DEV=`/usr/sbin/lsusb -d "$WETELDEV"/usr/bin/awk '< печат ($4) >' \ /usr/bin/awk -F ':' '< print( $1 ) >'' BUSn=`echo $BUS/bin/sed 's/^0*//'` DEVn=`echo $DEV/bin/sed 's/^0*//'`

/usr/bin/logger -p 'syslog.debug' "lsusb: шина $BUS ($BUSn), устройство $DEV ($DEVn)"

за dev в `/usr/bin/find "/sys/bus/usb/devices/usb$/" -name devnum -print`; do devv=`/bin/cat "$"` if [ "$devv" -eq "$DEVn" ]; тогава device=`dirname "$dev"` fi готово

if [ -n "$BUS" -a -n "$DEV" ]; след това /usr/bin/logger -p 'syslog.warning' "Намерен модем в шина $BUS, устройство $DEV ($device)" /usr/local/bin/resetdev /dev/bus/usb/$BUS/$DEV echo suspend > "$/power/level" /bin/sleep 2 echo on > "$/power/level" изход 0 else /usr/bin/logger -p 'syslog.warning' "Неуспешно намиране на модемни устройства" изход 1 fi

Както можете да видите, оставих в него resetdev, написан по-рано. Какво добро се губи ;) Всъщност това е. Да, и всичко работи.