Archive for the 'GNU/Linux' Category

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.