?

Log in

No account? Create an account

February 13th, 2012

Módem USB HSUPA ZTE MF-190... con Linux




El pasado mes de diciembre tuve una avería en la ADSL, que tengo contratada con Movistar, con lo que me pasé un día y medio sin conexión, hecho que me impidió administrar unos servidores que tengo repartidos por el mundo, lo que he de decir que me provocó bastante estrés. Para paliar este problema, decidí hacerme con un módem USB, también de Movistar, módem que contraté telefónicamente el día 23 de diciembre, justamente a los dos días de poner la reclamación por los problemas con mi línea ADSL.

Desgraciadamente, los problemas acababan de empezar, tras múltiples llamadas y esperar en vano la llegada del dispositivo a mi domicilio durante más de 20 días, no tuve más remedio que cancelar el pedido, algo que tampoco fue sencillo, por culpa del desastroso servicio de Atención al cliente Respuesta Profesional de Movistar...

De las 10 o 12 llamadas al servicio de Atención al Cliente realizadas entre el día 23 de diciembre y el 17 de enero, solamente recibí una contestación medianamente coherente, incluso cuando había valorado negativamente el servicio de Atención al Cliente en la encuesta telefónica posterior y me habían vuelto a llamar desde Movistar para conocer los motivos de mi mala puntuación del servicio, no logré solucionar nada.

El resto de las llamadas se convirtieron en una o incluso dos horas al teléfono, pasando de operador a operador (creo que el récord lo tengo en 9 pases consecutivos), para no lograr otra cosa que respuestas incoherentes, como que no existía el pedido, que estaba duplicado, que ya había llegado a casa y que lo tenía activado, que no lo había confirmado o que no constaba el titular de la línea, por lo que nunca lo podrían mandar a casa. Creo que esos 20 días acabé por odiar la música en espera de Movistar. Me llevaban los diablos cuando tras una hora o dos al teléfono, la comunicación se acababa cortando, o no entendía lo que me decían al otro lado de la línea, por la mala calidad de la conexión de VoIP con Sudamérica.

Al final, tuve que olvidarme de la contratación telefónica y tras otros tres días de llamadas intentando anular el pedido, acabé por recurrir a una tienda "física" para obtener el módem en un tiempo y con un trato razonables.

Si me permiten dar un consejo a Movistar, les recomiendo que revisen a fondo su sistema de Atención al Cliente, que al menos, en lo que respecta a la "Respuesta Profesional" es más un problema que una solución. Por otra parte pienso, que si esta es la "Respuesta Profesional", no quiero ni imaginar el servicio de Movistar para el resto de los mortales que no tienen derecho a ese servicio, que en teoría debería ser preferente.

Que conste que esto lo digo sin acritud y con todo mi afecto para Movistar, no en vano, he sido cliente de esta empresa desde el año 1986 y lo hago pensando en los buenos amigos que trabajan en esa empresa, que se pueden ver perjudicados por este tipo de problemas con los clientes, tan evitables, como innecesarios.

Pero solucionados los problemas administrativos, llegaron los técnicos, ya que dicho módem no tiene soporte para Linux, como tantos otros y también hay que decirlo, es algo tozudo y raro para algunas cosas de su funcionamiento.

El módem ZTE MF 190 es espartano, a diferencia del ZTE MF 262 de Movistar, que también logré que funcionase con Linux, su acabado no tiene muchas concesiones y es lo mínimo que permite una funcionalidad razonable. Por ejemplo, la información que proporciona la luz del ZTE MF 190 es muy limitada con respecto a otros dispositivos de ZTE, rojo sin configurar, verde parpadeando configurado y verde continuo conectado. No en vano, creo que este dispositivo no vale más de 17 euros la pieza a precio minorista, lo que permite entregarlo sin compromiso de permanencia, pero también es cierto, es que cubre el expediente cuando se logra hacerlo funcionar. Las características básicas del módem ZTE MF 190 son las siguientes:

Transmisión de alta velocidad: 7.2Mbps DL 5.76Mbps UL (verdadera banda ancha según la ITU).
Lector de tarjetas MicroSD de hasta 4 Gb.
Instalación automática (para Windows evidentemente).
Antena interior.
USB 2.0.
Estandares de red: HSUPA/HSDPA/UMTS 2100 MHzEDGE/GPRS/GSM 850/900/1800/1900MHz.
Sistemas operativos: Windows XP, Windows Vista y Windows 7 (no Linux, no Mac OS)
Dimensiones: 84.8mm×25mm×10.9mm.
Peso: 21.5 g

Todo lo que viene a continuación, se ha realizado sobre la distribución Mandriva 2010, que es la que tengo en mi portátil Pakard Bell, pero supongo que mis indicaciones también pueden ser válidas para intentar que este módem de Movistar funcione también con otras distribuciones Linux.

Lo primero que hay que hacer, es arrancar el ordenador y abrir una consola como root. Hecho esto, con la tarjeta SIM insertada en la ranura del módem y la línea telefónica de la tarjeta activada por el operador, "pincharemos" el módem en uno de los puertos USB del ordenador. Tras esperar unos segundos, escribiremos lo siguiente en la consola que hemos abierto como root:

lsusb

Con este comando, que lista los dispositivos USB conectados al sistema, obtendremos un listado similar a este:

Bus 002 Device 004: ID 19d2:0149 ZTE Inc.
Bus 002 Device 002: ID 04f2:b012 Chicony Electronics Co., Ltd
Bus 002 Device 001: ID 0000:0000
Bus 007 Device 001: ID 0000:0000
Bus 006 Device 001: ID 0000:0000
Bus 005 Device 001: ID 0000:0000
Bus 001 Device 002: ID 0bda:0158 Realtek Semiconductor Corp.
Bus 001 Device 001: ID 0000:0000
Bus 004 Device 002: ID 0b05:1712 ASUSTek Computer, Inc.
Bus 004 Device 001: ID 0000:0000
Bus 003 Device 001: ID 0000:0000

Como vemos, la primera línea nos indica que el fabricante del dispositivo ZTE Inc. tiene un código en hexadecimal 19d2 y que el dispositivo asociado tiene el código 0149. Desgraciadamente, este dispositivo es un lector virtual de CD-ROM, que se usa para instalar el software de forma automática en los sistemas Windows, Si tecleamos en la consola de root el mandato siguiente:

tail /var/log/messages -n 100

Veremos algo similar a esto:

kernel: scsi6 : SCSI emulation for USB Mass Storage devices
kernel: scsi 6:0:0:0: CD-ROM ZTE USB SCSI CD-ROM 2.31 PQ: 0 ANSI: 2
kernel: scsi 6:0:0:0: Attached scsi generic sg2 type 5
kernel: Driver 'sr' needs updating - please use bus_type methods
kernel: sr0: scsi-1 drive
kernel: Uniform CD-ROM driver Revision: 3.20
kernel: sr0: CDROM not ready. Make sure there is a disc in the drive.

Para poder seguir trabajando, tendremos que hacer "eject", es decir, tendremos que expulsar la unidad de CD-ROM, algo que es distinto de desmontar la unidad. Para automatizar este proceso, podemos usar el demonio UDEV, creando el archivo /etc/udev/rules.d/zte_eject.rules, con el siguiente contenido:

SYSFS{idVendor}=="19d2", SYSFS{idProduct}=="0149", RUN+="/usr/bin/eject %k", OPTIONS+="last_rule"

Este archivo permitirá que el demonio UDEV realice un "eject" automático de la unidad de CD-ROM cuando detecte un dispositivo de código de producto 0149 y con código de fabricante 19d2. Ahora, si volvemos a usar el mandato anterior en la consola de root:

lsusb>

Veremos que aparece un dispositivo del mismo fabricante, pero con distinto código, en este caso se trata del producto 0124:

Bus 002 Device 004: ID 19d2:0124 ZTE Inc.
Bus 002 Device 002: ID 04f2:b012 Chicony Electronics Co., Ltd
Bus 002 Device 001: ID 0000:0000
Bus 007 Device 001: ID 0000:0000
Bus 006 Device 001: ID 0000:0000
Bus 005 Device 001: ID 0000:0000
Bus 001 Device 002: ID 0bda:0158 Realtek Semiconductor Corp.
Bus 001 Device 001: ID 0000:0000
Bus 004 Device 002: ID 0b05:1712 ASUSTek Computer, Inc.
Bus 004 Device 001: ID 0000:0000
Bus 003 Device 001: ID 0000:0000

Ahora le tenemos que indicar a nuestro sistema que dicho dispositivo es un módem USB y que por lo tanto, que debe cargar el módulo usbserial del Kernel. Para ello usaremos de nuevo el demonio UDEV y crearemos el archivo /etc/udev/rules.d/zte_device.rules con el contenido siguiente:

SYSFS{idVendor}=="19d2", SYSFS{idProduct}=="0124", RUN+="/sbin/modprobe usbserial vendor=0x19d2 product=0x0124", OPTIONS+="last_rule"

Como se puede ver, mientras que el código de fabricante y de producto están en hexadecimal, pero sin el código 0x delante a la hora de detectar el dispositivo, cuando le pasamos esos mismos parámetros al módulo usbserial, tenemos que escribir 0x19d2 y 0x0124 respectivamente, o de otra forma, el sistema no lo reconocerá como un módem. Una vez cargado el módulo usbserial con los parámetros adecuados, si usamos el mandato en la consola root:

tail /var/log/messages -n 100

Nos aparecerá lo siguiente:

kernel: usbcore: registered new interface driver usbserial
kernel: drivers/usb/serial/usb-serial.c: USB Serial support registered for generic
kernel: usbserial_generic 2-1:1.0: generic converter detected
kernel: usb 2-1: generic converter now attached to ttyUSB0
kernel: usbserial_generic 2-1:1.1: generic converter detected
kernel: usb 2-1: generic converter now attached to ttyUSB1
kernel: usbserial_generic 2-1:1.2: generic converter detected
kernel: usb 2-1: generic converter now attached to ttyUSB2
kernel: usbserial_generic 2-1:1.3: generic converter detected
kernel: usb 2-1: generic converter now attached to ttyUSB3
kernel: usbserial_generic 2-1:1.4: generic converter detected
kernel: usb 2-1: generic converter now attached to ttyUSB4
kernel: usbserial_generic 2-1:1.5: generic converter detected
kernel: usb 2-1: generic converter now attached to ttyUSB5
kernel: usbcore: registered new interface driver usbserial_generic
kernel: drivers/usb/serial/usb-serial.c: USB Serial Driver core

Como se puede ver, el módulo usbserial nos proporciona la friolera de 6 interfaces USB asociadas a dicho dispositivo desde la 0 a la 5. Ahora nos toca averiguar la que nos permitirá comunicarnos con el dispositivo y para ello he usado los mandatos siguientes:

export COMGTPIN="xxxx"
comgt -d /dev/ttyUSBx PIN [entrar]

En la primera línea hay que cambiar xxxx por el PIN de la tarjeta del módem que nos proporcionó la operadora y en la segunda línea, hay que ir cambiando la x por el número de la interfaz ttyUSB que queremos probar. Los dos mandatos anteriores configuran el PIN y lo envían a través de la interfaz ttyUSB que hemos seleccionado mediante un número del 0 al 5.

El problema de este módem es que además de montar un montón de dispositivos ttyUSB, permitir la configuración a través de varios de ellos, e incluso, conectarse sin problemas con esos mismos a máxima velocidad, solamente es capaz de negociar un IP válida a través de uno de los seis disponibles. Tras varias pruebas y de llegar a sospechar que el operador no me había dado línea, o que no sería capaz de hacerlo funcionar con Linux, descubrí que la interfaz correcta era ttyUSB4, algo que me sorprendió. Es muy posible que este sea el problema por el que muchos usuarios no están siendo capaces de hacer funcionar este módem USB con Linux.

Como ya ocurrió con el ZTE MF 262, el programa que se encarga de configurar el módem y realizar la conexión en mi Mandriva 2010, está preparado para mandar los comandos por la interfaz ttyUSB0 y para comunicarse con el módem a través de la interfaz ttyUSB1. Tras considerar varias opciones y al igual que hice con el ZTE MF 262. decidí hacer una modificación "dura" del archivo en cuestión ya que es algo que ya sabía que funcionaba y no suelo cambiar de módem USB con demasiada frecuencia, aunque parezca lo contrario (suelo echar una mano a los amigos que tienen problemas similares, por lo que caen en mis manos muchos dispositivos distintos). Claro que si lo hacemos así, debemos recordarlo por si en un futuro queremos usar un dispositivo distinto al ZTE MF 190. También he de decir, que este problema con los dispositivos ttyUSB demasiado "elevados" ya se puso en conocimiento de los desarrolladores de Mandriva, por lo que cabe la posibilidad que ya no exista este problema en versiones posteriores a la 2010.

Por lo tanto, para que todo funcione desde la interfaz gráfica con mi Mandriva, es necesario modificar el archivo /usr/lib/libDrakX/network/connection/cellular_card.pm para que envíe los mandatos y establezca las comunicaciones por el interfaz ttyUSB4, de forma que sin tocar nada más del archivo anterior, muestre lo siguiente en relación con las funciones sub get_tty_device y sub get_control_device :

sub get_tty_device {
my ($self) = @_;
$self->{device}{device} ?
"/dev/" . $self->{device}{device} :
$self->get_driver eq "nozomi" ?
"/dev/noz0" :
$self->get_driver eq "cdc_acm" ?
"/dev/ttyACM0" :
$self->get_driver eq "hso" ?
"/dev/ttyHS0" :
"/dev/ttyUSB4";
}
sub get_control_device {
my ($self) = @_;
my $tty_device = $self->get_tty_device;
if ($tty_device eq "/dev/ttyUSB4") {
# for my $id (2, 1) {
my $usb_control_device = "/dev/ttyUSB4" . $id;
return $usb_control_device if -e $usb_control_device;
# }
}
$tty_device;
}

Además de lo anterior, que como hemos dicho, puede variar según la distribución de Linux que estemos usando, también es conveniente crear el archivo /usr/share/hal/fdi/information/20thirdparty/20-zte-mf190.fdi con el siguiente contenido:

<!- -*- SGML -*- ->
<deviceinfo version="2.0">
<device>
<!- ZTE MF190 HSPA USB MODEM ->
<match key="@info.parent:usb.vendor_id" int="0x19d2">
<match key="@info.parent:usb.product_id" int="0x0124">
<match key="@info.parent:usb.interface.number" int="4">
<append key="modem.command_sets" type="strlist">GSM-07.07
<append key="modem.command_sets" type="strlist">GSM-07.05
<append key="info.capabilities" type="strlist">modem
</match>
</match>
</match>
</device>
</deviceinfo>

Este es un simple archivo en formato SGML que contiene información técnica sobre el módem (una posible solución elegante para el problema del archivo cellular_card.pm que hemos visto antes ya que puede pasar, como parámetro, el número de la interfaz ttyUSB adecuada para cada dispositivo).

Ahora, solamente tendremos que insertar el módem en un puerto USB y esperar unos segundos hasta que sea expulsada la unidad de CD-ROM y se cargue el módulo usbserial con los parámetros adecuados en el Kernel.

Si somos usuarios de Mandriva 2010 o superior, para conectarnos podemos hacer clic sobre el icono del Centro de Redes. Con ello, nos aparecerá en una ventana el módem ZTE como un dispositivo más, junto con la tarjeta red y la tarjeta Wi-Fi del ordenador. Durante la configuración, el sistema nos preguntará por el PIN de la tarjeta y el operador, que en este caso es Movistar (España).

Si lo tenemos que configurar a mano por no aparecer el país y/o el operador en el Centro de Redes de nuestra distribución, el nombre del punto de acceso deberá ser movistar.es, el usuario de la cuenta movistar y la contraseña también deberá ser movistar. Tras introducir todos estos valores, el sistema detectará si hay cobertura del operador, lo que nos lo indicará mediante el medidor de señal a la derecha y la palabra "movistar", a la izquierda del Centro de redes.

Para acceder a Internet, bastará con hacer clic sobre el botón Conectar del Centro de Redes. Si el proceso falla, lo mejor es desconectar el módem, volverlo a insertar en el puerto USB, tras esperar unos segundos y empezar desde cero.

Hay que señalar, que tras hacer "eject" de la unidad de CD-ROM y tras cargar el módulo usbserial del módem, el sistema también detecta el lector de tarjetas MMC que lleva el módem en su interior y que permite usar tarjetas de memoria de hasta 4 Gb, de forma que podemos llevar nuestros archivos y/o programas junto a nuestro módem USB.

De hecho, si usamos el siguiente mandato desde la consola root y a los pocos segundos de pinchar el módem en un puerto USB:

tail /var/log/messages -n 100

Veremos que también aparecen unas líneas con la siguiente información:

kernel: scsi 7:0:0:0: Direct-Access ZTE MMC Storage 2.31 PQ: 0 ANSI: 2
kernel: sd 7:0:0:0: [sdc] Attached SCSI removable disk
kernel: sd 7:0:0:0: Attached scsi generic sg2 type 0

Lo que implica que el lector de tarjetas está disponible como emulación SCSI y asociado al dispositivo /dev/sg2.

"Copyleft 2012 Fernando Acero Martín. Verbatim copying, translation and distribution of this entire article is permitted in any digital medium, provided this notice is preserved".

"Copyleft: Creative Commons License Attribution, Non Commercial, Share Alike Fernando Acero Martín. Verbatim copying, translation and distribution of this entire article is permitted in any digital medium, provided this notice is preserved. Quotation is allowed."

Latest Month

July 2018
S M T W T F S
1234567
891011121314
15161718192021
22232425262728
293031    
Powered by LiveJournal.com
Designed by Tiffany Chow