Odisea 3G Huawei E173



Pues resulta que compré un modem 3G Huawei E173 de los nuevos que está ofreciendo Telefónica México, el reto comenzó cuando al conectarlo a mi máquina con Arch Linux no lo reconoció automáticamente (ya había probado los otros modelos de modem y sin problemas) así que en lugar de ponerme a llorar, me puse investigar como de costumbre.

En los foros encontré que agregando una par de lineas a la configuración de usb_modeswitch el huawei E173 funcionaba correctamente (Aquí un ejemplo) , sin embargo, lo primero que noté es que el id del producto de aquellos que ya lo habían hecho funcionar era distinto:

ID 12d1:1436 Huawei Technologies Co., Ltd. (En el caso del foro)

ID 12d1:1c24 Huawei Technologies Co., Ltd. (En mi caso)

Supuse que esto sería solo diferencia por el país, y decidí seguir el ejemplo, cambiando los idProduct por 1c24.

También noté que el idProduct después de intentar hacer el switcheo cambiaba a "1c23" y no a "1001,1406,140b,140c,1412,141b,1433,14ac" como se muestra en el foro, total que hice los cambios pertinentes y después de varios intentos logré que usb_modeswitch funcionara, pero seguía sin ser reconocido como modem, aunque este fue el primer paso.
A continuación pongo lo que se debe realizar para que usb_modeswitch funcione de este modo:

1. usb_modeswitch

Creamos un archivo nuevo en donde definimos las configuraciones del modem, en mi caso lo puse en /etc/usb_modeswitch.d/E173 y agregamos el siguiente contenido (esto se realiza como root):


DefaultVendor= 0x12d1
DefaultProduct=0x1c24

TargetVendor= 0x12d1
TargetProduct= 0x1c23

CheckSuccess=5

MessageContent="55534243000000000000000000000011060000000000000000000000000000"



Como ya dijimos anteriormente DefaultVendor y DefaultProduct son los id del fabricante y del producto respectivamente.

TargetVendor y TargetProduct son los id que tendrá después de hacer el switch.

CheckSuccess es la cantidad de veces con retardo de 1 segundo que checará que el
switch se haya realizado correctamente.

MessageContent es una cadena hexadecimal que le indica el modo a cambiar al dispositivo (Este último lo tuve que sacar preguntando en un foro).

Ahora se debe agregar una regla de udev para que al momento de conectar modem haga el switch.

Abrimos (como root) el archivo /lib/udev/rules.d/40-usb_modeswitch.rules y agregamos la siguiente regla (casi al final justo antes de la linea 'LABEL="modeswitch_rules_end"')


ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="1c24", RUN+="/usr/sbin/usb_modeswitch -c /etc/usb_modeswitch.d/E173"


Esto le dice a udev que cuando detecte que se conecte un dispositivo con el product y vendor especificados, ejecute el comando que está en RUN (/usr/sbin/usb_modeswitch -c /etc/usb_modeswitch.d/E173), es decir usb_modeswitch con la configuración que creamos anteriormente.

En caso de algunas distros como debian o ubuntu hay que reiniciar udev para que tome el cambio:


sudo /etc/init.d/udev restart


En caso de Arch el camio es automático.

Hasta ahí hicimos un switcheo de modo, pero no está reconocido como modem, continué con mi búsqueda y encontré un driver que al parecer ya es algo antiguo, de igual modo decidí descargarlo y probarlo, pero al momento de ejecutar el install pude ver que descomprimía el código fuente (gracias a tux venía el código) del driver y lo compilaba, pero no era tan fácil, enviaba un error al momento de compilar diciendo que no encontraba la función ioctl :( así que de nuevo a google, descubrí que al parecer la función ioctl fue deprecada a partir de la versión 2.6.27 del kernel lo cual era un problema, pero esta función fue reemplazada por unlocked_ioctl (a modificar el código), desafortunadamente el script de instalación descomprimia el código solo al momento de instalar para compilar, así que me di cuenta que no podría hacer la modificación directamente, (bendito comando sed) opté por modificar el script de instalación agregando un comando justo después de descomprimir que cambiara la función por la correcta, esas líneas quedaron de este modo:


"${TEMPWORKPATH}/7zr" x -y ${TEMPWORKPATH}/MobilePartner.bin >/dev/null 2>&1
"${TEMPWORKPATH}/7zr" x -y ${TEMPWORKPATH}/data.bin >/dev/null 2>&1
sed -i 's/\.ioctl/\.unlocked_ioctl/g' /usr/local/Movistar_3.5G/driver/ndis_driver/ndis_src/src/hw_cdc_driver.c
# chmod -R a+w "${INSTALLPATH}"/userdata
# chmod -R a+w "${INSTALLPATH}"/log
chmod -R a+w "${INSTALLPATH}"/config


Después de esto compilé y sin problemas, a continuación pongo el link al driver modificado y los pasos para instarlo.

2. Driver.

Descargamos el archivo que subí a dropbox y lo descomprimimos


tar xvfz Linux.tar.gz


entramos al directorio donde se descomprimieron los archivos y ejecutamos como root:


./install


Dejamos todo por default dando enter.

Perfecto, ahora si desconectamos el modem y lo volvemos a poner podremos ver que ya aparece en networkmanager es decir ya está reconocido como modem :D que felicidad y alegría, pero no cantemos victoria tan rápido, por que si intentamos conectar veremos que no lo hace :(

Aquí es donde me di cuenta gracias a dmesg que crea 3 dispositivos (ttyUSB0 ttyUSB1 y ttyUSB2) lo cual me pareció muy extraño así que quise probar con todos pero network manager no me dio la opción de seleccionar cual quería, a instalar wvdial y a probar uno por uno, aleluya!!! /dev/ttyUSB2 si funciona, así que probé eliminando /dev/ttyUSB0 y creandolo como link simbólico a /dev/ttyUSB2.

Excelente!!! network manager conecta, pero no iba a estar creando el link simbólico cada que conectara el modem así que cree una última regla de udev.

3. La última y nos vamos.

Creamos el archivo /etc/udev/rules.d/50-myrules.rules (empieza con 50 por que udev lee los archivos de regla en orden alfabético y yo quería que esta regla fuera la última en ejecutarse, tu puedes ponerle el nombre que quieras a tu archivo) y agremamos el siguiente contenido:


KERNEL=="ttyUSB2", RUN+="/bin/ln -sf /dev/ttyUSB2 /dev/ttyUSB0"


Listo, esto crea el link simbólico al detectar que se crea ttyUSB2, volvemos a reiniciar udev (si es necesario).

Ahora cada vez que conectemos el modem estará listo para usarse :D.

Esta es mi aportación, si tienen algún comentario o mejora al proceso estaré muy agradecido de que lo compartan.

May the source be with you.

Comentarios

Ayax ha dicho que…
Hola,

Me he quedado en el enlace simbolico. A pesar de que hago uno que apunta a ttyUSB2, verificando que sea así, de todos modos el network manager no lo utiliza. De hecho utilizo el modo debug de network manager y dice que falla en activarlo.

Le ha dado vueltas al asunto y no veo como solucionar.

Gracias.

Un saludo.
Ayax ha dicho que…
Hola: he podido solucionar el problema con el enlace simbólico, al parecer creaba conflicto el sakis3g que era el que utilizaba en lugar del Network Manager.

Ahora lo único que me falta es que se cree el enlace simbólico cuando enchufo el modem. Tengo la misma configuración que has puesto aquí y no lo crea automáticamente. Después de enchufar el modem hago un ls -ls /dev/ y se puede ver que no lo hace. Tengo que volver a borrar y hace el enlace de nuevo manualmente.

He probado desde reiniciando todo y hasta solo udev, y aún no así no lo logro.

Un saludo.
raag ha dicho que…
Hola, perdona la tardanza en mi respuesta, me puedes postear donde pusiste la regla de udev para crear el link y como quedó?
ESS ha dicho que…
Hola Raag: Compré el mismo modem en Movistar México, tengo 2 computadoras con Arch, una de escritorio y una netbook. En ambas tengo problemas al compliar, al instalar en la PC, me indica "The compiling environment is not all ready.
Please check gcc, make and kernel buid(/lib/modules/2.6.39-ARCH/build) to be all installed?". Verifiqué que estuviera instalado Make y gcc, lo del Kernel no entiendo que hacer (novato), no tengo el subdirectorio build como lo indica. En la Netbook no copia todos los archivos y subdirectorios en Movistar_3.5G, aun que instalo desde root.

Saludos.
raag ha dicho que…
Hola ESS, resulta que el kernel tiene unos headers que no estan instalados por default en tu distro, los cuales sirven en este caso para poder compilar un módulo extra a tu kernel esto lo resuelves instalandolo desde pacaman, en este momento no recuerdo el nombre del paquete pero lo puedes averiguar ejecutando:

pacman -Ss kernel headers

te debe arrojar algo así como:

kernel-header-2.6.XX (algo parecido)

donde XX es la versión de tu kernel, averiguala con uname -a

solo ejecuta:

pacman -S kernel-headers-XXXXX (osea el paquete que encontraste)

y listo intenta compilar de nuevo.

Saludos
mackissack ha dicho que…
Hola, Raag.
Antes que nada, he buscado mucho la solución a este Huawei E173.
Tu procedimiento es el más claro que he hallado.

Resulta que ya quedó instalado y reconocido el módem.
El Network Manager lo muestra en la opción de Conexión de Banda Ancha Móvil.
También se muestra la ventana "Movistar 3.5G"

El punto es que se intenta la conexión y nada más no.

No sé si tenga que ver con esa "ioctl", de lo que no entendí nada.
¿Una guía?
mackissack ha dicho que…
Raag, aquí avanzando.
Ya logré que el módem responda, aunque no por NM ni por la ventana Movistar 3.5G.

Tras configurar /etc/usb_modeswitch.d/12d1:1c24;
tras definir la regla en /lib/udev/rules.d/40-usb_modeswitch.rules;
tras descargar e instalar el driver ndis.driver desde Linux.tar.gz de http://dl.dropbox.com;
tras crear la regla para redireccionar terminales ttyUSB* a ttyUSB2:
... el módem aparece en NM y en Movistar 3.5G

ejecutando wvdial el módem responde.
ATI da info del dispositivo (E173, por cierto).
ATZ
OK
ATQ V1 E1
OK
Modem initialized
ATDT*99#
Waiting for carrier
CONNECT
Carrier detected. Waiting for prompt.
Don't know wha to do!
Starting pppd and hoping for the best.
Starting pppd at Thu Oct 13 20:35:43 2011
Pid of pppd: 2875
Using interface ppp0
pppd:
? [18] [0b]?
local IP address 10.80.166.54
pppd:
? [18] [0b]?
remote IP address 10.64.64.64
pppd:
? [18] [0b]?
primary DNS 200.76.80.11
pppd:
? [18] [0b]?
secondary DNS 8.8.4.4

Y ahí se queda, con el led del módem encendido.
Imagino que ha conectado.
Claro, no sé qué hacer, je.

Ahora, ¿qué hacer para que conecte por NM? Porque intenta unas 3 veces y nada.
mackissack ha dicho que…
¿¿¿???
¿Cómo así?
Un blog igual al tuyo pero para Ubuntu.
http://www.taringa.net/posts/linux/12030604/como-conectar-un-modem-3g-huawei-e173-en-ubuntu-11_04.html
mackissack ha dicho que…
Aquí de nuevo, Raag.
Como verás, ando tratando de resolver este entuerto del Huawei E173.

Una duda más.
cuando hablas de la regla
50-myrules.rules
KERNEL=="ttyUSB2", RUN+="/bin/ln sf /dev/ttyUSB2 /dev/ttyUSB0"
indicas que la pones en
/etc/udev/rules.d/
¿No va en
/lib/udev/rules.d/ ?

Porque en /lib/udev/rules.d/ está
40-usb_modeswitch.rules
raag ha dicho que…
Hola mackissack disculpa la ausencia, la regla se define en /etc/udev/rules.d si no existe el archivo hay que crearlo, con respecto a que nm creo yo que es por que me imagino que está tratando de usar /dev/ttyUSB0 y tu dispositivo correcto es el /dev/ttyUSB2

Espero esto te sirva, ya que como comentas no hay nada muy claro acerca de este modem.
sebastian ha dicho que…
tengo un problema que no lo logro desifrar.. hago lsusb

y saco esta configurracio :

DefaultVendor= 0x12d1
DefaultProduct= 0x1c05

TargetVendor= 0x12d1
TargetProduct= 0x1c05

CheckSuccess=10

# MessageEndpoint= 0x0f
MessageContent="09023a0001010080fa09040000030202ff000524001001042402030524010000"


el MessageContent mesaje lo saque de un foro atraves de una herramineta llamada usbsniff

el problema que tengo y que no lo logro desifrar es que tengo que cambiar para que no me salga este error al final:
Searching for target devices ...
No new devices in target mode or class found

Mode switch has failed. Bye.



mi incognita es como se hizo para darse cuenta que a TargetProduct hay que restarl 1.
DefaultProduct=0x1c24
TargetProduct= 0x1c23
En mi caso por desgracia el idProduct después después de hacer hacer el switcheo no me cambia.. c

alguna recomendacio para que me muestre el switch Successfull y no Mode switch has failed. Bye

si alguien me puede aclarar mi duda por favor seba266@yahoo.com.ar gracias..
sebastian ha dicho que…
o un problema que no lo logro desifrar.. hago lsusb

y saco esta configurracio :

DefaultVendor= 0x12d1
DefaultProduct= 0x1c05

TargetVendor= 0x12d1
TargetProduct= 0x1c05

CheckSuccess=10

# MessageEndpoint= 0x0f
MessageContent="09023a0001010080fa09040000030202ff000524001001042402030524010000"


el MessageContent mesaje lo saque de un foro atraves de una herramineta llamada usbsniff

el problema que tengo y que no lo logro desifrar es que tengo que cambiar para que no me salga este error al final:
Searching for target devices ...
No new devices in target mode or class found

Mode switch has failed. Bye.



mi incognita es como se hizo para darse cuenta que a TargetProduct hay que restarl 1.
DefaultProduct=0x1c24
TargetProduct= 0x1c23
En mi caso por desgracia el idProduct después después de hacer hacer el switcheo no me cambia.. c

alguna recomendacio para que me muestre el switch Successfull y no Mode switch has failed. Bye

si alguien me puede aclarar espero que llegue a mi mail gracias
sebastian ha dicho que…
esta toda bien la explicacion de este blog, pero en mi caso no entinde o no me sale cuando dice "También noté que el idProduct después de intentar hacer el switcheo cambiaba a "1c23" " si alguine me puede sacar la duda..por mail gracias seba266@yahoo.com.ar
raag pc ha dicho que…
Hola Sebastian, me refiero a que el sistema hace un cambio del id del producto a "1c23"
Este comentario ha sido eliminado por el autor.
Oye podrias volver a subir el link porfavor, esque no lo puedo descargar.
raag pc ha dicho que…
Perdón cometí un error y borré el driver, gracias a Hilario de la Cruz Hernandez por reportarlo, ya está de nuevo para los que deseen descargarlo.
morisan ha dicho que…
He reiniciado el PC sólo para entrar al historial del navegador. Me ha funcionado al primer intento, y de maravilla! Sólo necesité instalar el driver modificado. usb_modeswitch no producía cambios en el ProductId del módem, eso es lo único extraño que encontré.

Muchas gracias! ;)
Giancarlo Chiappe ha dicho que…
¡Excelente!, funciona perfecto en RED HAT ENTERPRISE LINUX 6, el paquete "usb_modeswitch" está en RPMForge para los que lo necesiten.

No es necesario hacer ningún cambio en la guía.
raag pc ha dicho que…
Me alegra que funcione bien, saludos.

Entradas populares de este blog

Nessus Arch Linux

De dados y cubos con puntos