Огромное спасибо всем участникам обсуждения!
Решил проблему с подключением MF192 от МТС - с помощью прошивки от RSS и методом научного тыка. Насколько понимаю, по сути это тот же метод, что и у mk-echo в посте 682, но (по крайней мере для меня) проще получилось сделать иначе.
Алгоритм получился такой:
1. Залил прошивку:
2. В веб-морде в настройках 3G-модема указал:
- "Set as WAN Connection Type by default" - нет
- "Zero CD Configuration" - нет
- "Modem type" - "user defined
Цель указанных опций - пресечь попытки подключения штатными средствами прошивки. Остальные настройки, как я понимаю, роли не играют, т.к. прописаны в содержимом /ppp/ заливаемого на шаге 3 файла.
3. Залил файл flashfs. Содержимое файла собрал по результатам осмысления этой и соседних веток. Добавлен скрипт post-boot и скрипт подключения.
4. Перегружаю модем, модем подцепляется и соединяется с интернетом без дополнительных телодвижений. Сейчас пишу с него.
Буду благодарен, если гуру причешут решение, придав ему человеческий вид. Хотя и в таком виде оно легко воспроизводимо для неподготовленного человека (типа меня).
Last edited by exial; 14-05-2011 at 23:00.
Last edited by Virtuals; 15-05-2011 at 03:19.
DIR-320 много,+ другие уже тож много + медиа-плееры и планшеты, и все на мипс
* Wiki *
RTN-2968.
http://wl500g.info/showpost.php?p=231378&postcount=82
D-
http://vampik.ru/proshivka-dlya-d-link-dir-320/
PS
-D
тестил обе, результат схож. .
DIR320-1.9.2.7-d-r2889M.trx
DIR320-1.9.2.7-d-r2624M.trx
Last edited by Virtuals; 15-05-2011 at 14:54.
DIR-320 много,+ другие уже тож много + медиа-плееры и планшеты, и все на мипс
Попробовать можно. Однако, надо иметь ввиду, что этот способ был успешен на ядре 2.6, где используется драйвер cdc_acm. Я его, кстати, пробовал в самом начале пути на убунте 10.10, отличия от использования usb_modeswitch в том, что устройство обнаруживается с другим pid=1218 (такого устройства в драйверах windows даже не прописано, поэтому я решил, что это не академично ).
Пока же я продолжил двигаться в том же направлении. Т.е. я все-таки предлагаю вернуться к варианту, по которому в настройках можно было бы выбрать какие драйвера для модема грузить - usbserial или usbserial && option. Как вариант, если стоит галочка "автоопределение модема", то пусть грузится драйвер option, если явно заданы vid && pid, то пусть грузится 'usbserial vedrod=vid product=pid'. Тут надо подумать как это все стыкуется с "мультимодемностью" и есть ли еще другие причины грузить option.
Сейчас я проделал следующие изменения в прошивке - с модемом ZTE MF192 работает:
/usr/ppp/dial - возможность загрузки только usbserial (возможно, этот код никогда не работает, т.к. драйвера загружаются в usbmodem.c; возможно, условие загрузки драйвера выбрано неверно)
/usr/ppp/dial - функция check_usb_config неправильно заполняет $usbdev, пришлось закоментировать код, используемый в мультимодемных конфигурацияхCode:load_drivers(){ if [ "$(lsmod | grep $acm_module)" = "" ]; then if [ "$kernel" = "2.4" ]; then insmod $acm_module $maxpacket_size else insmod $acm_module fi fi if [ "$(lsmod | grep 'usbserial')" = "" ]; then if [ "$(nvram get wan_modem_vid)" = "" -o "$(nvram get wan_modem_pid)" = "" ]; then insmod usbserial insmod option else insmod usbserial vendor=$(nvram get wan_modem_vid) product=$(nvram get wan_modem_pid) $maxpacket fi
usbmodem.c - возможность загрузки только usbserial с параметрами, если не выбрана автоконфигурация модема(ов). Возможно, стоит придумать другой флаг, по которому выбирается какие драйвера грузить.Code:check_usb_config(){ ... usbdev="${tts_port_path}0" # for i in $(seq $number_of_modems); do # name=modem_$i # eval modem=\$$name # loc=$(echo -n $modem | cut -d: -f7) # vid=$(echo -n $modem | cut -d: -f2) # pid=$(echo -n $modem | cut -d: -f3) # if [ "0x$vid" == "$nv_vid" ] && [ "0x$pid" == "$nv_pid" ]; then # if [ "$loc" == "$nv_loc" ] || [ "$auto" == "1" ]; then # loc="${nv_loc}.${dataport}" # usbdev=$(grep ": $loc :" "$devpath_name" | awk -F':' '{print $1}') # loc="${nv_loc}.${uiport}" # uidev=$(grep ": $loc :" "$devpath_name" | awk -F':' '{print $1}') # nvram set "${set_pref}port_ui=$uidev" # break; # fi # fi # done
Если данный подход будет признан приемлемым, то, как я понимаю, надо отлаживать функцию check_usb_config().Code:if( ret && found_dev ){ nvram_set(strcat_r(prefix, "usb_device_name", tmp), found_dev->prod ); //todo: choose proper flag for use option.o or don't if(autodetect == 0) { sprintf(stored_product,"vendor=0x%04x product=0x%04x",found_dev->vid,found_dev->pid); dprintf("found custom modem %s, use 'insmod usbserial %s'",found_dev->prod, stored_product); eval("insmod", "usbserial %s",stored_product); } else { dprintf("found autodetect modem %s, use 'insmod usbserial && insmod option'",found_dev->prod); eval("insmod", "usbserial"); eval("insmod", "option"); } #ifndef LINUX26 eval("insmod", "acm"); #else eval("insmod", "cdc-acm"); #endif } free_dev_list(list); dprintf("done. ret %d", ret); return ret;
По логу наблюдаю повторение одних и тех же действий несколько раз, хотелось бы понять почему?
Измененные файлы и кусочек лога прикладываю.
ASUS RT-AC66U <Merlin 384.15>
ASUS RT-N66U <Merlin>
ASUS RT-N16 <Merlin>
☀ Макет нового WEB интерфейса ☀ Для iPhone/iPad ☀
Уважаемые,
Я тоже пробовал запустить MF 192 на ядре 2.6 (прошивка rtn, номер 2196М, взято из http://wiki.vectormm.net/index.php/Airplus_MCD-800) - подтверждаю, что ручными манипуляциями с usb_modeswitch мне удалось добиться появления модема в веб-морде, три устройства ACM,
однако с такими параметрами, Vid = 0x19d2 , Pid = 0x1218 (что отличается от рабочего значения модема в винде = 0x1217). Поэтому, на ядре 2.6 дальше пробовать я не стал.
Сам удивляюсь, почему при выполнении этого кода переменная usbdev получается пустая (при закомментировании, в моем случае все работает, как задумано "по-умолчанию" usbdev="${tts_port_path}0"). Отлаживать sh-скрипты не умею, поэтому для начала просто закомментировал.
Code:#lsmodem 0:19d2:1217:W:0:8:1:ZTE:MF192Code:#cat /proc/bus/usb/devpath Device : Location : Info /dev/usb/tts/0 : 1.1 : Manufacturer="ZTE" : Product="MF192"Code:# cat /proc/bus/usb/devices T: Bus=03 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#= 1 Spd=480 MxCh= 4 B: Alloc= 0/800 us ( 0%), #Int= 0, #Iso= 0 D: Ver= 2.00 Cls=09(hub ) Sub=00 Prot=01 MxPS= 8 #Cfgs= 1 P: Vendor=0000 ProdID=0000 Rev= 2.04 S: Manufacturer=Linux 2.4.37.11 ehci_hcd S: Product=PCI device 1106:3104 S: SerialNumber=01:03.2 C:* #Ifs= 1 Cfg#= 1 Atr=40 MxPwr= 0mA I: If#= 0 Alt= 0 #EPs= 1 Cls=09(hub ) Sub=00 Prot=00 Driver=hub E: Ad=81(I) Atr=03(Int.) MxPS= 2 Ivl=256ms T: Bus=03 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 3 Spd=480 MxCh= 0 D: Ver= 2.00 Cls=ef(unk. ) Sub=02 Prot=01 MxPS=64 #Cfgs= 1 P: Vendor=19d2 ProdID=1217 Rev= 0.01 S: Manufacturer=ZTE S: Product=MF192 S: SerialNumber=032670C9DD6E9D43AAAB715FD979998857D5C33D C:* #Ifs=11 Cfg#= 1 Atr=a0 MxPwr=500mA I: If#= 0 Alt= 0 #EPs= 1 Cls=02(comm.) Sub=02 Prot=01 Driver=(none) E: Ad=81(I) Atr=03(Int.) MxPS= 64 Ivl=2ms I: If#= 1 Alt= 0 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=serial E: Ad=82(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms E: Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=4ms I: If#= 2 Alt= 0 #EPs= 0 Cls=02(comm.) Sub=0b Prot=00 Driver=(none) I: If#= 3 Alt= 0 #EPs= 0 Cls=0a(data ) Sub=00 Prot=00 Driver=(none) I: If#= 3 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=(none) E: Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms E: Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=4ms I: If#= 4 Alt= 0 #EPs= 0 Cls=02(comm.) Sub=0b Prot=00 Driver=(none) I: If#= 5 Alt= 0 #EPs= 0 Cls=0a(data ) Sub=00 Prot=00 Driver=(none) I: If#= 5 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=(none) E: Ad=84(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms E: Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=4ms I: If#= 6 Alt= 0 #EPs= 0 Cls=02(comm.) Sub=0b Prot=00 Driver=(none) I: If#= 7 Alt= 0 #EPs= 0 Cls=0a(data ) Sub=00 Prot=00 Driver=(none) I: If#= 7 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=(none) E: Ad=85(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms E: Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=4ms I: If#= 8 Alt= 0 #EPs= 1 Cls=02(comm.) Sub=06 Prot=00 Driver=(none) E: Ad=86(I) Atr=03(Int.) MxPS= 64 Ivl=2ms I: If#= 9 Alt= 0 #EPs= 0 Cls=0a(data ) Sub=00 Prot=00 Driver=(none) I: If#= 9 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=(none) E: Ad=87(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms E: Ad=05(O) Atr=02(Bulk) MxPS= 512 Ivl=4ms I: If#=10 Alt= 0 #EPs= 2 Cls=08(stor.) Sub=06 Prot=50 Driver=usb-storage E: Ad=06(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms E: Ad=88(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms T: Bus=02 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#= 1 Spd=12 MxCh= 2 B: Alloc= 0/900 us ( 0%), #Int= 0, #Iso= 0 D: Ver= 1.00 Cls=09(hub ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1 P: Vendor=0000 ProdID=0000 Rev= 0.00 S: Product=USB UHCI Root Hub S: SerialNumber=120 C:* #Ifs= 1 Cfg#= 1 Atr=40 MxPwr= 0mA I: If#= 0 Alt= 0 #EPs= 1 Cls=09(hub ) Sub=00 Prot=00 Driver=hub E: Ad=81(I) Atr=03(Int.) MxPS= 8 Ivl=255ms T: Bus=01 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#= 1 Spd=12 MxCh= 2 B: Alloc= 0/900 us ( 0%), #Int= 0, #Iso= 0 D: Ver= 1.00 Cls=09(hub ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1 P: Vendor=0000 ProdID=0000 Rev= 0.00 S: Product=USB UHCI Root Hub S: SerialNumber=100 C:* #Ifs= 1 Cfg#= 1 Atr=40 MxPwr= 0mA I: If#= 0 Alt= 0 #EPs= 1 Cls=09(hub ) Sub=00 Prot=00 Driver=hub E: Ad=81(I) Atr=03(Int.) MxPS= 8 Ivl=255ms
Тут дело не в ядре, в комане переключения, которая посылается в модем.
Их есть несколько разных видов, одна из которых
эквивалента "eject" приводит к появлению устройства 0х1218,Code:5553424312345678000000000000061b000000020000000000000000000000
другая
которую, надеюсь, я правильно "заснифил" приводит к появлению устройства 0х1217, такого же как в виндовс.Code:5553424308EB1D8400000000000010FF000000000000000000000000000000
Обе команды работают одинаково на обоих ядрах. И кажется, к дальнейшим проблемам с модемом особого отношения не имеют.Поправка: при переключении на устройство 0х1218 поднимается драйвер acm и устройства /dev/usb/acm/0...3, при переключении на устроство 0х1217 поднимается драйвер usbserial (только с явным указанием параметров) и одно устройство /dev/usb/tts/0.
Last edited by a005; 18-05-2011 at 08:23.
Чтобы правильно работал скрипт надо изменить дата порт на 1, лучше всего добавив устройство 19d2:1217 в базу модемов.
Но вообще то это устройство acm и должно подниматься драйвером acm. Может попробовать его подредактировать ? Сделал бы сам, но без устройства на руках - бессмысленно.
Кстати ui порт в такой конфигурации отсутствует.
ASUS RT-AC66U <Merlin 384.15>
ASUS RT-N66U <Merlin>
ASUS RT-N16 <Merlin>
☀ Макет нового WEB интерфейса ☀ Для iPhone/iPad ☀
* Wiki *
Что имеется ввиду? Что среди интерфейсов usb-устройства нет ни одного, похожего на ui-порт? Или "нужный" интерфейс не связан ни с одним драйвером?
По ошибке скрипта dial, как я понял, devpath сообщает, что модем находится на usb 1.1 (т.е на 1-м порту, что так и есть), а loc="${nv_loc}.${dataport}", говорит о 1.0 (т.е. на 0-м порту).
$dataport берется из nvram, куда информация, видимо, попадает по результатам работы lsmodem.
Хотелось бы, чтобы lsmodem работал правильно, даже если устройство отсутствует в базе модемов. Поэтому, я бы пока воздержался добавлять MF192 в базу модемов. Может lsmodem как-то должен информацию брать из devpath, чтобы они друг-другу не противоречили?
Порт можно указать в морде. И вообще большая часть того, что есть в nvram задаётся именно в морде, которая для этого собственно и предназначена.
Пока нет алгоритма правильного определения портов (одни догадки, которые уже реализованы) и возможно, что его и нельзя создать. Именно для этого и предназначена база lsmodem.
lsmodem не может брать инфо из devpath, т.к. последняя формируется после поднятия драйвером портов, в процедуре которая использует функции lsmodem. Информация из этих источников не противоречива, просто lsmodem предназначен для получения именно списка модемов. А как в этих модемах назначены порты определяет по большому счёту производитель модема. Известные нам определения занесены в базу.
Добавлять в базу может и вправду рано, пока не разобрались с acm.
По поводу ui - я имел в виду, что при ИМХО некорректном поднятии порта через usbserial, поднимается только один дата порт. Его конечно можно использовать для получения инфо о модеме, но только пока не установлена связь с провайдером, что конечно не очень удобно.
Last edited by dlukanidin; 15-05-2011 at 13:04.
ASUS RT-AC66U <Merlin 384.15>
ASUS RT-N66U <Merlin>
ASUS RT-N16 <Merlin>
☀ Макет нового WEB интерфейса ☀ Для iPhone/iPad ☀
* Wiki *