Lluitant amb un mòdem Alcatel X060 de Simyo – Part 1

Recentment m’he firat el mòdem Alcatel X060 que ofereix la companyia Simyo. Tant la pàgina oficial del mòdem com moltes altres pàgines web  relacionades afirmaven (ara veig que repetint la informació de l’original sense comprovar-ho) que estava suportat en GNU/Linux, per la qual cosa el vaig adquirir sense pensar-m’ho massa. Al capdavall, és un dispositiu prou nou, no conec ningú més que el tingui, i per la xarxa tampoc no hi ha massa informació sobre experiències d’aquest mòdem en GNU/Linux.

Total que, com potser era de preveure, en arribar-me el dispositiu a casa i provar-lo, no funcionava. Això pot ser frustrant al principi, però si ens ho prenem com un repte, amb una mica de tenacitat i cerques per internet podem acabar per doblegar la seva resistència i de passada aprendre algunes cosetes pel camí.

Seguidament documento el procés seguit per si pot servir a algú altre. Per no avorrir-vos, us estalviaré els detalls irrellevants i aniré directament al gra. D’entrada cal dir que el sistema sobre el que estava fent les proves té les següents característiques:

  • Kubuntu 9.04 (Jaunty), que duu un kernel 2.6.28 (2.6.28-13 en la subnumeració d’ubuntu)
  • Escriptori: KDE. Això implica que per gestionar la xarxa des de la IGU tenim per omissió el plasmoide que ve dins del paquet plasma-widget-network-manager.

Tot i això, el procés següent molt probablement pot servir per qualsevol Debian/Ubuntu recent.

Resumint, els problemes al quals ens haurem d’enfrontar són:

  1. Quan connectem el mòdem al port USB, el dispositiu es presenta al sistema amb un codi 0x1BBB:0xF000, i apareix com un “pendrive” que conté els drivers del mòdem per Windows. D’aquesta manera s’estalvien posar-los en un CD-ROM (i pagar el cànon a l’SGAE?). També té un fitxer auto-executable que instal·la els drivers al Windows la primera vegada que el connectem. El més enigmàtic és que el dispositiu NO es presenta com un mòdem, i així no anem bé.Sembla ser que això ho fan així per tal que als soferts i delicats usuaris de windows no els agafi un cobriment de cor en veure un missatge de “dispositivo desconosido” (l’errada és intencionada) la primera vegada que connectin el dispositiu. Total que, un cop instal·lat el driver, aquest el primer que fa és enviar una ordre especial al mòdem a través del bus USB que fa que commuti del mode “pendrive” al mode “mòdem”. Immediatament després d’això, el dispositiu passa a presentar-se al sistema amb un codi 0x1BBB:0x0000.

    Si volem que el nostre benvolgut GNU/Linux reconegui el mòdem, el primer que haurem de fer és enviar també l’ordre de commutació de mode tan bon punt s’endolli el dispositiu al bus USB. Afortunadament sembla que no és el primer dispositiu que es comporta així, i algú ja s’ha dedicat a escodrinyar el traspàs de missatges USB entre aquests dispositius i els seus drivers windows, i ha programat una utilitat en C que fa precisament el mateix, però en GNU/Linux. Aquesta utilitat s’anomena usb_modeswitch, i caldrà que us la instal·leu. de moment no està empaquetada (probablement no trigarà gaire). He vist que a la Ubuntu Karmic es prepara un paquet anomenat “udev-extras” que contindrà un programa “modem-modeswitch” que farà més o menys això, però investigant el codi veig que de moment no reconeix el codi de l’Alcatel aquest, o sigui que de moment ho farem amb el usb_modeswitch.

    Tot el procés està descrit en aquest enllaç, però en faré un resum per qui no es trobi còmode amb l’anglès:

    1. Baixeu el paquet  usb_modeswitch-1.0.2.tar.bz2,  descomprimiu-lo i compileu-lo (cal tenir instal·lat el paquet “libusb-dev”)

      $ bunzip usb_modeswitch-1.0.2.tar.bz2
      $ cd usb_modeswitch-1.0.2
      $ make

    2. Aquest programet porta un fitxer de configuració anomenat “usb_modeswitch.conf”. Cal que editem aquest fitxer i descomentem les línies següents (que corresponen a un Alcatel X200, però que serveixen igual per al nostre:
      DefaultVendor= 0x1bbb
      DefaultProduct= 0xf000
      TargetVendor= 0x1bbb
      TargetProduct= 0x0000
      MessageContent="55534243123456788000000080000606f50402527000000000000000000000"
    3. Fet això, copiarem el fitxer usb_modeswitch.conf al directori /etc: $ sudo cp usb_modeswitch /etc
    4. Ara ho provarem: Endollem el nostre mòdem i teclejant “lsusb” comprovem els codis del fabricant i producte amb els que apareix el dispositiu:

      Bus 002 Device 005: ID 1bbb:f000 T & A Mobile Phones
    5. Si executem el usb_modeswitch a mà, el dispositiu hauria de commutar de mode “pendrive” a “mòdem”:

      $ sudo ./usb_modeswitch


      * usb_modeswitch: tool for controlling "flip flop" mode USB devices
      * Version 1.0.2 (C) Josua Dietze 2009
      * Works with libusb 0.1.12 and probably other versions
      Looking for default devices ...
      Found default devices (1)
      Accessing device 005 on bus 002 ...
      Using endpoints 0x01 (out) and 0x81 (in)
      Inquiring device details; driver will be detached ...
      Looking for active driver ...
      OK, driver found ("usb-storage")
      OK, driver "usb-storage" detached
      Received inquiry data (detailed identification)
      -------------------------
      Vendor String: USBModem
      Product String: MMC Storage
      Revision String: 2.31
      -------------------------
      Device description data (identification)
      -------------------------
      Manufacturer: USBModem
      Product: HSPA Data Card
      Serial No.: 1234567890ABCDEF
      -------------------------
      Setting up communication with interface 0 ...
      Trying to send the message to endpoint 0x01 ...
      OK, message successfully sent
      -> Run lsusb to note any changes. Bye.

      $ lsusb
      Bus 002 Device 006: ID 1bbb:0000 T & A Mobile Phones

      I ja podem veure com el nostre dispositiu ha commutat a mode mòdem.

    6. Si tot ha anat bé, caldria fer aquests canvis permanents. Per fer-ho copiarem l’executable generat en algun directori que estigui al “path” (per exemple /sbin, o /usr/sbin, o /usr/local/sbin, etc.) i aleshores configurarem el sistema UDEV per tal que cridi aquest executable cada vegada que es connecti el dispositiu. Per fer això darrer només cal crear al lloc adient un fitxeret amb les regles adients. Per exemple, podeu crear amb un editor un fitxer anomenat /etc/udev/rules.d/50-alcatel.rules, i posar-hi dins el següent codi:

      SUBSYSTEM=="usb", SYSFS{idProduct}=="f000", SYSFS{idVendor}=="1bbb", RUN+="/usr/local/sbin/usb_modeswitch"
    7. Finalment caldria comprovar que tot l’automatisme funciona, reiniciant el subsistema UDEV (o tota la màquina) i fent una ullada a la sortida de l’ordre “lsusb” abans i després d’endollar el dispositiu

Bé, de moment ho deixo aquí. Manca explicar com fer que el nucli Linux reconegui el nou dispositiu detectat, però això serà en un altre moment. Si mentrestant hi ha algú que tingui molta pressa, pot enviar-me un correu o deixar-me un comentari.

8 Comments so far

  1. Borja Sotomayor on juliol 6th, 2009

    Por si todavía te estás peleando con el modem, yo lo recibí hace un par de días y conseguí que funcionase con Ubuntu 9.04. He documentado el proceso aquí: http://www.borjanet.com/archives/2009/07/05/simyo-alcatel-x060-ubuntu-904

  2. orestes on juliol 7th, 2009

    Ah, gràcies per l’enllaç. Veig que hem seguit passos similars en la qüestió del usb_modeswitch.

    No, ja no m’estic barallant amb el mòdem. Vaig aconseguir fer-lo funcionar, però no pas fent servir el vwdial, sinó usant el NetworkManager, que és la manera “elegant” de fer-ho perquè ja està preparat per gestionar les connexions de banda ampla mòbil.

    El que passa és que encara no he tingut temps de documentar-ho, però en essència es tracta de modificar les fonts del mòdul “option” per tal d’incloure el idVendor i idProduct del mòdem (1BBB:0000), recompilar el nucli, i ja està.

    Bé, no del tot: jo uso KDE i el plasma-applet-network-manager que es fa servir per controlar el NetworkManager des de la IGU no s’acaba d’entendre bé amb la part de les connexions GSM. Però amb l’applet del Gnome (nm-applet) sí que funciona bé.

    Quan tingui un moment documentaré tot això.

    Gràcies pel comentari!

  3. Ratx on juliol 7th, 2009

    ets un crack!!

    Fa dos dies em vaig demanar el mateix modem a simyo. Vaig barallar-me amb el usb-modeswitch i el vwdial, però com que no sabia que tenioa que cambiar de 0xf000 a 0x0000 no vaig aconseguir conectar.

    Un cop hagi aconseguit colocar el Alcatel X060 en posició modem, cal que utilitzi el vwdial i el gnome-PPP o puc utilitzar el network manager?

    Gracies

  4. orestes on juliol 7th, 2009

    Ja ho explico en el meu comentari anterior, però es veu que ambdós estàvem escrivint al mateix moment i no l’has vist.

    Com dic, jo ho he aconseguit amb el NetworkManager a base de recompilar un mòdul “option” modificat. Desconec la teva experiència compilant nuclis, però si t’hi vols posar et puc guiar una mica en el procés. Pots enviar-me un correu (orestes (a) caliu (punt) cat) i t’ho explico, però resumint:

    1) Em vaig baixar el darrer nucli de http://kernel.org. És el 2.6.30. probablement agafant les fonts del 2.6.28 que duu l’ubuntu jaunty també funcionarà, però de passada en tinc un de més nou

    2) descomprimeixes les fonts a /usr/src, i edites el fitxer /usr/src/linux-2.6.30.1/drivers/usb/serial/option.c. Entre les línies 525 i 526 afegeixes això:

    { USB_DEVICE(0x1bbb, 0x0000) }, /* Alcatel X060 */

    De fet, ho pots posar més amunt. La qüestió és afegir el 1bbb i 0000 en alguna banda de la llista, en el format adient. També es poden crear uns #defines amb les etiquetes adients, i usar les etiquetes en lloc dels hexadecimals, però jo sóc mandrós…

    3) Recompiles el nucli (1 horeta en la meva màquina) amb (resumeixo)

    make oldconfig
    make-kpkg --initrd kernel_image

    instal·les el paquet debian que et genera, i després del usb_modeswitch el NetworkManager ja et reconeixerà el mòdem.

    No, si al final em fareu documentar el procés a base de comentaris… 😀

  5. Ratx on juliol 7th, 2009

    Gracies per la informació de com recompilar el linux, però no soc molt expert i no crec que ho faci.

    Seguire els passos de orestes per conectar amb el vwdial i el gnome-ppp-

  6. Borja Sotomayor on juliol 7th, 2009

    Ah, estupendo. Voy a ver si lo pruebo y consigo que funcione con el Network Manager. He enlazado a tu comentario desde mi guía, para los que quieran aventurarse a recompilar el kernel. Voy a ver si le pego un toque al autor del módulo option para que incluya los datos del Alcatel X060 en la versión oficial del kernel.

  7. ratx on juliol 13th, 2009

    Ostres!!!

    no hi ha manera de que funcioni, el pas del usb-modeswitch esta superat, però el “modprobe usbserial vendor:…… target:…” passa de mi. No passa res quan l’executo i el usbserial esta instalat. Algu em pot donar alguna pista?

  8. orestes on juliol 13th, 2009

    Jo també vaig fer unes proves amb el mòdul usbserial, però no em va funcionar i ho vaig deixar córrer. Segons el que diu aquest noi (el Borja) funciona, però jo no vaig perserverar més perquè vaig llegir que gestionar el mòdem aquest amb el mòdul usbserial és inadequat. El mòdul usbserial fa aparèixer el dispositiu aquest com un mòdem sèrie, però per les connexions de banda ampla hi ha certs paràmetres que no tenen massa sentit (paritat, bits de start, stop…). Per tant, és millor usar el mòdul “option” per tal que gestioni el dispositiu segons criteris més “moderns”.

    Resum: modifica el mòdul “option” i recompila el kernel. No és pas tan difícil. Això sí, trigaràs una horeta en una màquina moderna.

    Quan pugui documentaré el procés, ho vaig prometre 🙂

Leave a reply