Radio Bullteam

Video


Copyright vEsti24

Radio


Copyright vEsti24
usb_modeswitch Suggérer par mail
Écrit par sissie   
16-10-2008

USB_ModeSwitch - Activer les périphériques USB commutables (switchables) sous Linux

USB_ModeSwitch est (surprise!) est un outil de switch (changement) de mode pour des clefs USB à fonctions multiples.

Plusieurs nouvelles clefs USB contiennent leur propre driver MS Windows; quand on les insère pour la première fois, ces périphériques agissent comme un périphérique de stockage et installent leur driver. Après cela (et ceci à chaque nouvelle insertion de la clef) ce driver commute (switch) le mode interne, le périphérique de stockage disparait (dans la majorité des cas), et un nouveau périphérique (tel un modem USB) apparaît. Le fabriquant de clés WWAN  Option appelle ce dispositif "ZeroCD (TM)".

Comme vous l'aurez suremement noté, il n'existe aucune documentation sous quelque forme que ce soit, et il n'existe pas plus de driver officiel disponible pour Linux. Heureusement nombreux sont les périphériques connus qui fonctionnent avec des divers Linux disponibles tels que "usb-storage" ou "usbserial". Mais celà laisse entier le problème du changement de mode, pour que le périphérique passe du mode "stockage" à ce qu'il est censé faire.

Néanmoins, il existe des choses telles que le raisonnement humain, les applications d'USB sniffing et "libusb". Il est ainsi possible "d'espionner" la communication du driver MS Windows, pour isoler la commande ou l'action qui fait la commutation, et de reproduire la même chose avec Linux.

USB_ModeSwitch facilite grandement la dernière étape en utilisant les paramètres importants contenus dans un fichier de configuration et en réalisant l'initialisation et la communication nécessaires .

A ce jour, il ne vérifie PAS si l'opération s'est correctement déroulée. La meilleure approche serait de consulter /proc/bus/usb/devices (ou la sortie de "lsusb") avant et après l'execution d' USB_ModeSwitch et de noter tout changement.

Téléchargement

La dernière version est la 0.9.5. L'archive contient la source et un fichier binaire 686 (32 bit, VIA C7, GCC 4.2.2).  Pour ce faire, le concepteur d'USB_modeswitch a utilisé libusb-0.1.12.
Les changements et mises à jour sont proposées plus régulièrement pour le fichier de configuration que pour le soft lui-même; la majeure partie des informations connues sur les périphériques s'y trouve. Il est donc préférable d'utiliser la dernière version dont le lien est ci-dessous.
Etant donné les innombrables variantes de machines et de distributions, la compatibilité  x86 n'est parfois pas au rendez-vous. Si vous faites l'éexpérience de "floating point errors" ou que vous ne souhaitez pas recompiler vous même, essayez l'un des fichiers suivants en remplacement pour le binaire (ils sont tous en 32 bit). Et - merci à Tobias Stoeber - nous avons un paquet Debian  (pour Xandros, Etch et autres)

Comment installer

Si vous souhaitez le compiler vous-même, lancez  "compile.sh" ou tapez en console:
 
$ gcc -l usb -o usb_modeswitch usb_modeswitch.c
 
C'est aussi simple que ça en a l"air... Et devrait être FACILEMENT transposable (certaines limites sont connues sur les systèmes basés sur FreeBSD).

Prenez le nouvel exécutable "usb_modeswitch" (ou celui fourni avec l'archive) et mettez le dans votre path (de préférence "/sbin" ou "/usr/sbin").
Mettez "usb_modeswitch.conf" dans "/etc" et éditez le en fonction de votre matériel. Le fichier contient une documentation très complète qui devrait vous indiquer ce qu'il est nécessaire de faire.

Alternativement vous pouvez utiliser la toute nouvelle interface en ligne de commande pour dire à USB_ModeSwitch ce qu'il doit savoir;  essayez "usb_modeswitch -h" pour lister les paramètres. De cette manière, vous pouvez manipuler des configurations multiples. Si un quelconque paramètre est utilisé en ligne de commande, le fichier de configuration n'est PAS lu.

Important: USB_ModeSwitch - comme tous les programmes qui utilisent libusb - doit être lancé en root. Sinon, d'étranges erreurs feront leur apparition... 

Dépannage: si vous êtes d'avoir les bonnes valeurs pour votre matériel, et que lancement après lancement USB_ModeSwitch semble avoir une action mais que dans les faits rien ne change, il y a surement une solution à mettre en place. La majorité des distributions actuelles utilisent "udev" comme dispositif et manageur de branchement à chaud (hotplug), qui, dans certains ca, ne reflète pas les changements sur un périphérique switché. Utilisez "udevmonitor" sur une console ou un terminal pour avoir plus d'informations sur le processus de branchement et de commutation. Parfois, il est nécessaire de faire appels à des astuces peu communes comme des lancements répétés d'usb_modeswitch à intervalles définis.
Consultez le forum d'usb_modeswitch pour avoir des informations ou faites une demande d'aide sur le forum de Bullteam .

Matériels connus pour fonctionner

Josh le concepteur de cet outil, n'a personnelIement pu tester que son Option Icon; la liste suivante, ainsi que les informations nécessaires repose sur les rapports de tiers. Ne soyez donc pas surpris si vous vous heurtez à des obstacles alors que votre périphérique est listé ici. Vous aurez été prévenus.

Il existe trois méthodes connues pour initialiser le processus de commutation :

1. l'envoi d'une commande standard rarement ou jamais utilisée (équivalente à celle du SCSI) au périphérique

2. éliminer (ou plutôt détacher) le driver de stockage du périphérique

3. envoyer un message de contrôle spécifique au périphérique

Il est recommandé d'utiliser le dernier driver disponible. Des solutions à cet égard on été trouvées pour au moins un dispositif USB (Icon 7.2).

  • Option GlobeSurfer Icon (connu comme "Vodafone EasyBox")
    Celui par lequel tout a commencé, parce que Josh, le concepteur d'USB_ModeSwitch a voulu le faire fonctionner sur son Linux
    .Tous les périphériques Option connus utilisent la commande REZERO UNIT pour opérer la commutation.
  • Option GlobeSurfer Icon 7.2
    Si vous rencontrez des mises en sécurité matérielles à l'insertion  (voyant clignotant très rapidement), mettez le pilote à jour.
  • Option GlobeSurfer Icon 7.2 en interface avec le driver HSO
    Une génération plus récente de firmware avec des ID vendor/device inchangés. Votre périphérique "7.2 ready" devrait changer son comportement après re-flashage avec ce pilote; les nouveaux périphériques Option fonctionnent très probablement avec celui-ci. Utilisez le nouveau paramètre "TargetClass" pour reconnaître les périphériques déjà commutés.
    Si vous avez un nouveau périphérique Option device non listé ici, il est vraissemblable de pouvoir le faire fonctionner en utilisant ces paramètres si vous adaptez vos ID vendor/product
    Note: les questions sur le driver HSO driver questions and howtos disponibles (en anglais) sur l'excellent site  Pharscape ou sur le site de Bullteam dans la section 3G Linux (en français)!
  • Option Icon 225 HSDPA (connu comme "T-Mobile web'n'walk Stick")
    Nouveau Firmware, interface HSO 
  • Option GlobeTrotter HSUPA Modem (connu comme "T-Mobile wnw Card Compact III")
    Nouveau Firmware, interface HSO
  • Option GlobeTrotter GT MAX 3.6 (connu comme"T-Mobile wnw Card Compact II")
  • Option GlobeTrotter EXPRESS 7.2 (connu comme "T-Mobile wnw Card Express II")
  • Option GlobeTrotter GT MAX "7.2 Ready"
  • Huawei E220 (connu comme "Vodafone EasyBox II", connu comme "T-Mobile wnw Box Micro")
    Nous avons à présent deux options (ne voyez ici aucun calembour!) pour les périphériques Huawei  1. suppression de "usb-storage" 2. le message de contrôle spécifique trouvé par Miroslav Bobovsky. Ce dernier est dépendant de "usb-storage" laisse même la partie de stockage du périphérique fonctionnelle.
  • Huawei E160, Huawei E160G, Huawei E169, Huawei E270, Huawei E280
    Installation similaire à celle du E220.
  • Huawei E630
    Il existe evidemment des variantes "modem uniquement" (sans la partie stockage) pour celles-ci, aucune commutation n'est nécessaire.
  • Novatel Wireless Ovation MC950D HSUPA, Ovation 930D et Merlin XU950D
    Ils utilisent la commande de contrôle START/STOP (Eject) pour effectuer la commutation.
  • Novatel Wireless U727 USB modem
    Installation similaire au MC950D, mais ID product différente
  • Novatel Wireless MC990D
    Utilise les nouvelles fonctionnalités de la version 0.9.5
  • ZTE MF620 (connu comme "Onda MH600HS")
    Utilise la commande TEST UNIT READY pour effectuer la commutation
  • ZTE MF622
    Détacher le driver de stockage est suffisant
  • ZTE MF628, ZTE MF628+
  • ZTE MF638 (connu comme "Onda MDC525UP")
  • ONDA MT503HS (très certainement un modèle ZTE)
  • ONDA MT505UP (très certainement un modèle ZTE)
  • Alcatel OT-X020 (connu comme "MBD-100HU", connu comme "Nuton 3.5G", fonctionne avec "Emobile D11LC")
  • AnyDATA ADU-500A, AnyDATA ADU-510A, AnyDATA ADU-520A
  • BandLuxe C120
    Il a été rapporté qu'une utilisation particulière était nécessaire. Consultez ce post sur le Forum
  • Solomon S3Gm-660
    Consultez les informations sur la  BandLuxe C120 ci-dessus
  • C-Motech D-50 (connu comme "CDU-680")
    Des informations importantes sur ce post du  Forum
  • Toshiba G450
  • UTStarcom UM175 (distributeur "Alltel")
  • Hummer DTM5731
  • A-Link 3GU

Comment automatiser le processus

Dites-vous que vous devez lancer USB_ModeSwitch à chaque fois que vous inserez votre clef ou que vous bootez avec. Si vous avez "udev" sur votre distribution il n'est vraiment pas compliqué de l'automatiser et de l'oublier.
Notez qu'un délai avant le lancement du tool est nécessaire avec de nombreuses installations récentes.  Si votre commutation automatique est incertaine (irrégulière) le délai dans l'exécution d'USB_ModeSwitch devrait vous aider. Référez-vous au script ci-dessous. Ceci étant dit, depuis la version 0.9.4, cela n'est presque jamais nécessaire. 
 
 
Vous devriez avoir un dossier nommé "/etc/udev" ou quelque chose de similaire. A l'intérieur de celui-ci (sur certains systèmes dans un dossier "rules.d") vous trouverez quelques fichiers avec l'extension ".rules". Créez-en un nouveau ou éditez-en un existant, (mais par convention pas un "50-quelque_chose.rules"). Par exemple celui nommé "45-hotplug.rules" puisqu'il s'agit de hotplug USB après tout. 
Dans le fichier choisi/créé ajoutez/entrez la ligne
 
SUBSYSTEM=="usb", SYSFS{idProduct}=="<VotreDefaultProdID>", SYSFS{idVendor}=="<VotreDefaultVendID>", RUN+="<VotreCheminVersUSB_ModeSwitch>"

En gros, c'est tout!

A partie de là, il y a deux voies pour poursuivre. Si votre périphérique GSM est reconnu par une version récente du driver of the "option" vous ne devriez plus rien avoir à faire qu'à charger le module (ce dont se charge très certainement udev automatiquement). Sinon si votre (serial) périphérique n'est pas supporté par ce module vous pouvez toujours utiliser use "usbserial", mais vous devez alors communiquer à ce module les IDde votre dispositif (plus une option liée à la performance):

SUBSYSTEM=="usb", SYSFS{idProduct}=="<VotreTargetProdID>", SYSFS{idVendor}=="<VotreTargetVendID>",
RUN+="/sbin/modprobe usbserial vendor=<VotreTargetProdID> product=<VotreTargetVendID> maxSize=4096"

Quant à la différence entre "usbserial" et "option",voici une citation issue de option.c: Ce driver existe parce que le driver "normal" ne fonctionne pas très bien avec les modems GSM Résultat:
- perte de données -- un unique Receive URB est loin d'être suffisant
- contrôle de flux (périphériques Option) non standard
-  contrôler le baud rate n'a pas de sens
Il est donc recommandé d'essayer le driver the "option" en premier lieu. Dans les kernels récent, il reconnaît plusieurs périphériques Option, Huawei and Novatel (et d'autres) directement. Et suivant les mails de développeurs de kernels, il semble qu'il soit entrain de devenir le standard pour les périphériques GSM depuis que de nombreux modèles ont été ajoutés. Dans les derniers kernels, l'entrée du module est  "USB driver for GSM and CDMA modems" (Device Drivers / USB support / USB Serial Converter support).

Les périphériques qui fonctionnent avec le driver "option" qui ne changent pas leurs ID après la commutation semblent avoir des soucis parce que le driver semble voiloir être rattaché avant que le switch ne soit effectué. Dans ce cas, il peut être intéressant de le blacklister et de le charger manuellement avec le script ci dessous après l'execution de usb_modeswitch. Une fois encore, les développeurs travaillent sur le driver "option" pour sonder la classe de périphérique avant de le lier, ce problème devrait donc être reglé à partir du kernel 2.6.24.

Dans tous les cas si votre périphérique fonctionne bien avec "usbserial" et que vous n'êtes pas effrayé par l'édition des sources du kerneln pourquoi ne pas juste ajouter les ID vendor et product (après commutation bien-sûr) au driver option. Josh, le développeur d'usb_modeswitch, a tenté l'expérience avec son téléphone portable, et à présent, le module "option" est lié à lui automatiquement lorsqu'il est branché.Regardez vos autres produits inclus dans "option.c" et ajoutez simplement vos ID de la même façon. C'est tout. Deux ou trois lignes dans la majorité des cas. Recompilez, ajoutez votre périphérique à l'une des règles udev (les .rules comme ci-dessus) et faites vous plaisir !

Pour les dispositifs qui conservent leurs ID après commutation, le script "/sbin/mydevice_switch.sh" peut être créé:

 

#!/bin/sh
/sbin/usb_modeswitch
sleep <QuelquesSecondes> # probablement pas nécessaire, essayez sans
/sbin/modprobe usbserial vendor=<VotreDefaultVendID> product=<VotreDefaultProdID> maxSize=4096
Et ensuite ajoutez cette règle:
SUBSYSTEM=="usb", SYSFS{idProduct}=="<VotreDefaultProdID>", SYSFS{idVendor}=="<VotreDefaultVendID>", RUN+="/sbin/mydeviceswitch.sh"
 
Si la mise en place d'un délai d'exécution est une solution pour votre matériel ou installation, il peut être utilse de différer le lancement de USB_ModeSwitch, pour autoriser d'autres drivers tel "usb-storage" à finir leur activation.
Utilisez alors à nouveau le script appellé ici "/sbin/mydevice_switch.sh"  et complétez-e ainsi:
#!/bin/sh
sh -c "sleep 4; /usr/bin/usb_modeswitch" &
exit 0
 
Luigi Iotti a rapporté des problèmes sur certains systèmes (RHEL 5, CentOS 5) avec  udev restant dans l'attente de l'achèvement de certains scripts en tâche de fond.
Dans ce cas la solution pour un "/sbin/mydevice_switch.sh" modifié:
 
#!/bin/sh
# pour détachr de l'udev
exec 1<&- 2<&- 5<&- 7<&-
sh -c "sleep 4; /usr/bin/usb_modeswitch" &
exit 0

Contribuez

USB_ModeSwitch est tout à fait utilisable pour mener des tests avec votre propre matériel s'il n'est pas encore supporté. Vous pouvez tenter cette approche:

Notez les ID Vendor et Product ID depuis /proc/bus/usb/devices (ou de la sortie de "lsusb"); le driver assigné est habituellement "usb-storage".
Ensuite, tentez de découvrir la communication USB communication vers le périphérique avec la même ID dans M$ Windows.
L'outil suivant est recommandé : "SniffUSB"

Vous trouverez un excellent exemple par Mark A. Ziesemer ici :
Alltel UM175AL USB EVDO under Ubuntu Hardy Heron

Merci de partager vos avancées, ou les nouvelles informations sur des périphériques que vous auriez découvertes soit sur le forum de Bullteam soit sur le ModeSwitchForum !

Le développeur

Un grand Merci à Josua Dietze de nous avoir permis de vous proposer la traduction des informations qu'il diffuse sur son site. Vielen Dank Josh !
 

Les Mentions légales concernant usb_modeswitch diffusé sous la licence GNU General Public License sont disponibles sur le site du développeur

Dernière mise à jour : ( 03-11-2008 )
 
< Précédent

Chat irc


IRC Login
Nickname


Channel


Votez pour nous

votez pour ce site

weborama

Partenaires

visité notre partenaire     visité notre partenaire    

Flash info

Nouvelle version d'eMule, la 49b, pour rester à jour nous vous invitons et visiter notre partie "Configurer eMule" Pour plus d'informations et une aide à la configuration, vous pouver nous rejoindre sur notre serveur irc, via l'applet cgi en haut à droite du site. Merci 

 
Design by SaTurNin & sissie - Copyright © 2008 by Escobar