Clef 3G+ icon225 Orange sous Ubuntu

Jean Baptiste FAVRE

juillet 2009

Introduction

L'offre Internet Everywhere d'Orange repose sur la clef 3G+ ICON225. Cette clef est fabriquée par Option.

Il existe un pilote pour GNU/Linux, officiellement non supporté, blablabla... Bref, c'est là: Drivers hso

Installation

L'installation sous Ubuntu ne pose pas de problème particulier:

Préparation de l'environnement de développement
KERNEL=`uname -r`
apt-get update
apt-get install linux-headers-$KERNEL build-essential
cd ~/
mkdir ICON225 && cd ICON225
Téléchargement du driver
Depuis la page du forum, télécharger la version 1.1.2 du driver dans le dossier ~/ICON225/.
Compilation et installation du module
tar xzf hso-1.2.tar.gz
cd hso
make clean
make
sudo make install

Si vous branchez votre clef, le lecteur ZéroCD est détecté et ouvert dans Nautilus. Ceci ne nous aide pas beaucoup dans la mesure où il ne contient que des binaires pour Windows et Mac.

De plus, la partie réseau n'est pas encore gérée. L'interface réseau n'est donc pas visible et le modem inclu dans la clef pas accessible.

Installation et paramétrage de ZeroCD REZERO utility

Pour empêcher le lecteur zeroCD de s'activer et créer automatiquement le périphérique Modem dans /dev, vous aurez besoin des règles udev et de l'utilitaire rezero.

Vous le trouverez là: ZeroCD REZERO utility

Une fois le fichier téléchargé, il faut le deplacer dans le répertoire que vous allez créer juste après:

mkdir hso-udev && cd hso-dev
mv ~/hso-udev.tar.gz .
tar xzf hso-udev.tar.gz
mv hso-udev.tar.gz ..
make clean
make
sudo make install
sudo /etc/init.d/udev restart

Le redémarrage de udev est nécessaire pour la prise en compte des nouvelles règles. Vous pouvez également redémarrer votre machine.

Vérification

Branchez votre clef, puis:

ls -lah /dev/ttyHS*
crw-rw---- 1 root dialout 251, 0 2008-07-06 14:41 /dev/ttyHS0
crw-rw---- 1 root dialout 251, 1 2008-07-06 14:41 /dev/ttyHS1
crw-rw---- 1 root dialout 251, 2 2008-07-06 14:41 /dev/ttyHS2
crw-rw---- 1 root dialout 251, 3 2008-07-06 14:41 /dev/ttyHS3

Vous pouvez également contrôler le bon déroulement de l'opération grâce à dmesg:

dmesg
[18744.543990] usb 1-1.2: new full speed USB device using uhci_hcd and address 10
[18744.605662] usb 1-1.2: configuration #1 chosen from 1 choice
[18744.607850] scsi5 : SCSI emulation for USB Mass Storage devices
[18744.608623] usb-storage: device found at 10
[18744.608629] usb-storage: waiting for device to settle before scanning
[18747.205476] usb-storage: device scan complete
[18747.208437] scsi 5:0:0:0: CD-ROM            ZCOPTION HSDPA Modem      3.00 PQ: 0 ANSI: 2
[18747.241375] sr1: scsi-1 drive
[18747.241513] sr 5:0:0:0: Attached scsi CD-ROM sr1
[18747.241601] sr 5:0:0:0: Attached scsi generic sg2 type 5
[18747.406260] usb 1-1.2: USB disconnect, address 10
[18747.982480] usb 1-1.2: new full speed USB device using uhci_hcd and address 11
[18748.049194] usb 1-1.2: configuration #1 chosen from 1 choice
[18748.054851] [2835:set_ethernet_addr]: Attempting to get MAC address failed: using default
[18748.054867] HSO: Found Network port hso0
[18748.055032] HSO: Found Control port /dev/ttyHS0
[18748.055108] HSO: Found Application port /dev/ttyHS1
[18748.057240] HSO: Found Diagnostic port /dev/ttyHS2
[18748.059205] HSO: Found Modem port /dev/ttyHS3

Dernière vérification:

ifconfig hso0
hso0	Link encap:Ethernet  HWaddr 00:03:80:14:b3:e2
	BROADCAST NOARP MULTICAST  MTU:1486  Metric:1
	Packets reçus:0 erreurs:0 :0 overruns:0 frame:0
	TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
	collisions:0 lg file transmission:10
	Octets reçus:0 (0.0 B) Octets transmis:0 (0.0 B)

Installation et paramétrage des script de connexion

Bon, c'est pas tout ça, mais maintenant on a besoin de pouvoir se connecter. Et là, problème, parce qu'il faut causer AT avec notre modem.

Les script fournis avec le driver étant un peu "rustiques", nous allons nous fournir ailleurs:

cd ~/ICON225
mkdir scripts && cd scripts
wget //www.equinoxefr.org/wp-content/uploads/2008/05/icon225.tgz
tar xzf icon225.tgz
cd hso
sudo cp connect.sh conninfo.ini icon225.pl /usr/local/sbin/

Cette archive fourni aussi bien le driver que les utilitaires ainsi que les scripts. Nous n'avons néanmoins pas utilisé cette archive pour toute l'opération car je n'ai aucune garantie quant à la pérénité des mises à jour (notamment pour le driver). Autant savoir où le trouver dès le départ donc.

Utilisation

Configuration

Là aussi, un peu de configuration. Il faut préciser l'APN sur lequel vous allez vous connecter. Tout se passe dans le fichier conninfo.ini

# this file contains the connection information for your subscription
APN=orange.fr
# USER=
# PASS=
# PIN=

Il existe apparemment différentes valeurs en fonction de votre abonnement (ou pas):

APN=orange.fr
Cas où, comme moi, vous avez pris un abonnement auprès d'Orange (formules 2, 5, 8 heures ou illimité).
APN=orange.ie
Cas où vous n'avez pas pris d'abonnement auprès d'Orange.

Vous pouvez également mettre cet APN dans le script de connection à la place de la valeur par défaut:

Dans le script connect.sh, remplacer:
if [ ! -f $CONNECTIONFILE ]
	then
		echo "# this file contains the connection information for your subscription" >> $CONNECTIONFILE
		echo "APN=web.pro.be" >> $CONNECTIONFILE
		echo "# USER=" >> $CONNECTIONFILE
		echo "# PASS=" >> $CONNECTIONFILE
		echo "# PIN=" >> $CONNECTIONFILE
	fi
par
if [ ! -f $CONNECTIONFILE ]
	then
		echo "# this file contains the connection information for your subscription" >> $CONNECTIONFILE
		echo "APN=orange.fr" >> $CONNECTIONFILE
		echo "# USER=" >> $CONNECTIONFILE
		echo "# PASS=" >> $CONNECTIONFILE
		echo "# PIN=" >> $CONNECTIONFILE
	fi
Connection
sudo connect.sh up
Initializing...
Trying orange.fr ...
Connecting...
trying
trying-
Connected
Setting IP address to  xxx.xxx.xxx.xxx
Adding route
Setting nameserver
Done.
Déconnection
sudo connect.sh down
Bringing interface down...
Disconnecting...
Reset nameserver...
Done.
Diagnostic de base

Le script icon225.pl permet d'accéder à quelques informations utiles:

icon225.pl --hw
Hardware informations:
Manufacturer: Option N.V.
Model: GlobeTrotter HSDPA Modem
Revision: 2.5.13Hd (Date: Feb 18 2008, Time: 18:32:40)
 IMEI: xxxxxxxxxxxxxxx
 Serial Number: xxxxxxxxxxx
icon225.pl --net
Signal Quality:18
Network capabilities:
GSM
3G
GPRS

Problèmes

Bug dans le driver 1.2

Il existe apparemment un vilain bug dans le driver 1.2 qui fait planter le module, et parfois même le noyau tout entier :-(

Le problème semble venir du fait qu'une fois la clef débranchée, le driver ne libère pas toutes les ressources. Notamment, le port Contrôle (par défaut ttyHS0) n'est pas libéré.

Lorsque la clef est rebranchée, tous les ports sont décalés de 1. Mais si vous essayez un sudo rmmod hso, vous risquez au mieux un crash du module, au pire un crash noyau.

Néanmoins, ce bug ne semble pas reproductible à tous les coups, bien que survenant la plupart du temps après une première utilisation de la clef. Il est toutefois en cours d'analyse par les développeurs.

[  335.662479] BUG: unable to handle kernel NULL pointer dereference at virtual address 000000bf
[  335.662486] printing eip: f8b380c6 *pde = 00000000
[  335.662494] Oops: 0002 [#1] SMP
[  335.662501] Modules linked in: hso sony_laptop snd_rtctimer i915 drm af_packet binfmt_misc rfcomm l2cap bluetooth ipv6 vboxdrv kvm ppdev acpi_cpufreq cpufreq_conservative cpufreq_stats cpufreq_ondemand cpufreq_userspace cpufreq_powersave freq_table sbs sbshc container dock nfs lockd nfs_acl sunrpc iptable_filter ip_tables x_tables sr_mod cdrom aes_i586 dm_crypt dm_mod sbp2 parport_pc lp parport joydev pcmcia uvcvideo compat_ioctl32 snd_hda_intel snd_pcm_oss snd_mixer_oss snd_pcm snd_page_alloc snd_hwdep r5u870 usbcam usbhid videodev v4l2_common v4l1_compat videobuf_dma_sg snd_seq_dummy hid iwl3945 videobuf_core usb_storage iwlwifi_mac80211 snd_seq_oss libusual cfg80211 snd_seq_midi ac battery sky2 snd_rawmidi snd_seq_midi_event video output snd_seq serio_raw snd_timer snd_seq_device yenta_socket rsrc_nonstatic ricoh_mmc psmouse pcmcia_core intel_agp button snd iTCO_wdt iTCO_vendor_support agpgart shpchp pci_hotplug soundcore pcspkr evdev ext3 jbd mbcache sg sd_mod pata_acpi ata_generic ata_piix ohci1394 ieee1394 libata scsi_mod ehci_hcd uhci_hcd usbcore thermal processor fan fbcon tileblit font bitblit softcursor fuse
[  335.662665]
[  335.662670] Pid: 1573, comm: khubd Not tainted (2.6.24-19-generic #1)
[  335.662675] EIP: 0060:[<f8b380c6>] EFLAGS: 00010282 CPU: 0
[  335.662689] EIP is at hso_serial_common_create+0x66/0x260 [hso]
[  335.662694] EAX: ffffffef EBX: 00000000 ECX: c1fff580 EDX: ef09fbc0
[  335.662699] ESI: f657c580 EDI: ef09fbc0 EBP: 00000001 ESP: f75edc84
[  335.662703]  DS: 007b ES: 007b FS: 00d8 GS: 0000 SS: 0068
[  335.662709] Process khubd (pid: 1573, ti=f75ec000 task=f7fe3700 task.ti=f75ec000)
[  335.662713] Stack: 00000000 00000292 00000001 f00f8200 00000400 f657c580 ef09fbc0 f657c5f4
[  335.662727]        f03875c0 f8b3834c 00000040 f657c900 000080d0 f03875c0 f03875c0 00000003
[  335.662740]        f00f8200 f8b366f7 ef024480 f00f8200 ef09f340 00000001 00000000 f8b39457
[  335.662753] Call Trace:
[  335.662776]  [<f8b3834c>] hso_create_mux_serial_device+0x8c/0x160 [hso]
[  335.662806]  [<f8b366f7>] hso_create_shared_int+0x87/0x100 [hso]
[  335.662830]  [<f8b39457>] hso_probe+0x147/0x2c0 [hso]
[  335.662848]  [<c01d73f4>] sysfs_add_one+0x44/0xe0
[  335.662862]  [<c01d74cf>] sysfs_addrm_start+0x3f/0xb0
[  335.662881]  [<f88b882b>] usb_autopm_do_device+0x7b/0x100 [usbcore]
[  335.662928]  [<f88b8397>] usb_match_one_id+0x27/0xb0 [usbcore]
[  335.662982]  [<f88b95d9>] usb_probe_interface+0xb9/0x140 [usbcore]
[  335.663039]  [<c0282818>] driver_probe_device+0x88/0x190
[  335.663052]  [<c0319ef5>] klist_next+0x55/0xb0
[  335.663072]  [<c0281b14>] bus_for_each_drv+0x44/0x70
[  335.663095]  [<c02829e6>] device_attach+0x86/0x90
[  335.663103]  [<c0282920>] __device_attach+0x0/0x10
[  335.663116]  [<c0281a85>] bus_attach_device+0x45/0x90
[  335.663135]  [<c0280b18>] device_add+0x418/0x510
[  335.663163]  [<f88b7522>] usb_set_configuration+0x392/0x5d0 [usbcore]
[  335.663237]  [<f88bfb06>] generic_probe+0x76/0xb0 [usbcore]
[  335.663294]  [<f88b9393>] usb_probe_device+0x33/0x40 [usbcore]
[  335.663329]  [<c0282818>] driver_probe_device+0x88/0x190
[  335.663346]  [<c0319ef5>] klist_next+0x55/0xb0
[  335.663364]  [<c0281b14>] bus_for_each_drv+0x44/0x70
[  335.663384]  [<c02829e6>] device_attach+0x86/0x90
[  335.663391]  [<c0282920>] __device_attach+0x0/0x10
[  335.663404]  [<c0281a85>] bus_attach_device+0x45/0x90
[  335.663421]  [<c0280b18>] device_add+0x418/0x510
[  335.663448]  [<f88b22f6>] usb_new_device+0x56/0xa0 [usbcore]
[  335.663501]  [<f88b3a97>] hub_thread+0x687/0xcb0 [usbcore]
[  335.663549]  [<c02180ce>] rb_erase+0x15e/0x280
[  335.663586]  [<c0140c40>] autoremove_wake_function+0x0/0x40
[  335.663606]  [<f88b3410>] hub_thread+0x0/0xcb0 [usbcore]
[  335.663648]  [<c0140982>] kthread+0x42/0x70
[  335.663655]  [<c0140940>] kthread+0x0/0x70
[  335.663667]  [<c0105677>] kernel_thread_helper+0x7/0x10
[  335.663684]  =======================
[  335.663686] Code: c2 b8 48 f5 b3 f8 e8 ba 43 7e c7 8b 3e 89 da a1 14 f1 b3 f8 8b 4f 30 83 c1 1c e8 e6 9f 72 c7 89 47 34 8b 16 8b 42 34 85 c0 74 10 <89> 90 d0 00 00 00 ba c0 e7 b3 f8 e8 da 85 74 c7 89 e8 88 46 18
[  335.663757] EIP: [<f8b380c6>] hso_serial_common_create+0x66/0x260 [hso] SS:ESP 0068:f75edc84
[  335.663776] ---[ end trace 7fc5095a2842702d ]---
/dev/ttyHS0 not found

De temps à autre, lorsque vous débranchez et rebranchez votre clef plusieurs fois, le tty de contrôle du modem peut changer de numéro (cf. bug ci-dessus).

Il s'agit a priori d'un problème avec le drivers qui ne supprime pas les entrées. On se retrouve du coup avec des doublons.

De fait, le script de connection ne marche plus car ttyHS0 est "codé en dur". Solution:

Dans le script connect.sh, remplacer
	DEVICE=/dev/ttyHS0
par
	DEVICE=/dev/`cd /proc/hso/devices/ && grep Control *|tail -n1|awk -F":" {'print $1'}`

En effet, /proc/hso/devices/ contient la liste des périphériques découverts sur la clef et leur fonction respective:

cat /proc/hso/devices/ttyHS0
Control
USB bus ID:	1-1.2
cat /proc/hso/devices/ttyHS1
Application
USB bus ID:	1-1.2
cat /proc/hso/devices/ttyHS2
Diagnostic
USB bus ID:	1-1.2
cat /proc/hso/devices/ttyHS3
Modem
USB bus ID:	1-1.2
Network interface hso0 not found

Potentiellement le même problème.

Dans le script connect.sh, remplacer
	NETDEV=hso0
par
	NETDEV=`cd /proc/hso/devices/ && grep Network *|awk -F":" {'print $1'}`

Cela ne m'est jamais arrivé, mais étant donnée qu'il est également codé en dur... Bref, même motif, même punition

Sources et références:

Format

Ce document est disponible aux formats suivants:

À propos de Jean Baptiste FAVRE

Je suis responsable d'exploitation dans le domaine de l'hébergement. Je travaille, entre autres, sur la virtualisation et l'amélioration des performances web. De temps en temps, j'arrive à décrocher de mon clavier pour lire un bon bouquin en écoutant de la musique.

License

Creative Commons License Cette publication est publiée sous contrat Creative Common by-nc-sa

Valid XHTML 1.0 Strict |  Valid CSS |  contrat Creative Common by-nc-sa

Table des matières

  1. Installation
  2. Vérification
  3. Installation et paramétrage des scripts de connexion
  4. Utilisation
  5. Problèmes
  6. Sources et références
  7. Format
  8. À propos ...
  9. License