meta données pour cette page
Howto : Installation et configuration de Linux sur un portable HP nc4400 (06/2007)
Présentation du matériel
PC portables HP nc4400 équipés de :
- Ecran : 12,1“ XGA (1024 x 768 pixels)
- Processeur : Intel Core 2 Duo T7200 (2Ghz)
- Mémoire : DDR2-SDRAM 2Go
- Chipset : Intel 945GM Express
- Graphique : Intel Mobile 945GM/GMS/940GML (224Mo max partagée)
- Disque : SATA 100Go 5400 tpm
- Audio : Intel Corporation 82801G (ICH7 Family)
- Cardbus (PCMCIA) : Texas Instruments PCIxx12
- Lecteur de cartes multimédia : Texas Instruments 5-in-1 Multimedia Card Reader
- Ethernet : Broadcom Corporation NetXtreme BCM5753M Gigabit
- WiFi : Broadcom Corporation BCM4311
- Station d'accueil : HP Docking station 1.1
Distributions Linux testées
- Debian testing - kernel 2.6.20
- Ubuntu feisty 7.04 - kernel 2.6.20
Problèmes rencontrés
Conflit BIOS/psmouse
La présence du module psmouse
au moment de l'extinction (ou du redémarrage, ou de l'hibernation) provoque un redémarrage lent (Le logo HP reste affiché plus longtemps, le boot de Linux est bien plus lent, le clavier peut être bloqué et l'ACPI peut détecter des températures totalement fantaisistes). Il est donc important de décharger ce module avant chaque extinction ou reboot.
Pour automatiser le déchargement de ce module, il suffit de créer un fichier /etc/rc0.d/K10rmmodpsmouse
contenant ceci :
echo Stopping psmouse /sbin/rmmod psmouse
Ce script sera donc exécuté au moment de l'extinction (runlevel 0) à condition de l'avoir rendu exécutable. Il faut donc activer ce fichier aussi dans le cas d'un redémarrage (runlevel 6) :
chmod 755 /etc/rc0.d/K10rmmodpsmouse ln -s /etc/rc0.d/K10rmmodpsmouse /etc/rc6.d/
Configuration WiFi
Configuration du driver Ndiswrapper
Pour utiliser la carte WiFi avec le driver fournit pour Windows, il faut configurer Ndiswrapper. Tout d'abord, il est nécessaire d'installer le paquet ndiswrapper-utils-1.9 par un apt-get install ndiswrapper-utils-1.9
. Puis il faut localiser le fichier bcmwm5.inf utilisé par Windows. Pour un portable fraîchement installé, il suffit de vous rendre dans le répertoire SwSetup/WLAN de votre installation de Windows. Il est donc nécessaire que la partition dans laquelle Windows est installé soit montée dans votre arborescence Linux.
cd <chemin disque windows>/SwSetup/WLAN
La prochaine étape est d'enregistrer le driver Windows dans Ndiswrapper. Pour exécuter la commande suivante, vous devez être identifié en tant que root
.
ndiswrapper -i bcmwl5.inf
Vous pouvez vérifier que tout s'est bien déroulé en tapant :
ndiswrapper -l
Vous devez alors obtenir l'affichage suivant :
installed drivers: bcmwl5 driver installed, hardware (14E4:4324) present (alternate driver: bcm43xx)
Le driver étant correctement enregistré, il reste à le charger automatiquement à chaque démarrage. Pour cela il faut modifier le fichier /etc/modules
et y rajouter la ligne :
ndiswrapper
Le module ndiswrapper est incompatible avec le module bcm43xx qui est chargé automatiquement à chaque démarrage. Pour empêcher son chargement, vous devrez éditer le fichier /etc/modprobe.d/blacklist
et y rajouter la ligne suivant :
blacklist bcm43xx
Redémarrer l'ordinateur pour avoir les bons modules associés chargés.
Si tout a bien fonctionné, en tapant lsmod
vous devriez trouver une ligne indiquant que le module ndiswrapper
est bien chargé.
... ndiswrapper 166388 0 ...
Pour vérifier que l'interface réseau correspondant à la carte WiFi (ici wlan0
) existe bien, vous devez taper la commande /sbin/iwconfig
dans une console et obtenir le résultat suivant :
lo no wireless extensions. eth0 no wireless extensions. wlan0 IEEE 802.11g ESSID:off/any Mode:Managed Frequency:2.442 GHz Access Point: Not-Associated Bit Rate=54 Mb/s Tx-Power:32 dBm RTS thr=2347 B Fragment thr=2346 B Power Management:off Link Quality:0 Signal level:0 Noise level:0 Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0 Tx excessive retries:0 Invalid misc:0 Missed beacon:0
Si vous êtes arrivés ici, il ne reste plus qu'à tenter de vous connecter sur un réseau WiFi
Connexion à un réseau WiFi avec Network-Manager
Il existe un grand nombre de façons de se connecter à un réseau WiFi dont la plus sûre pour debogger est surement la célèbre à la mano ! Ici je vais décrire l'installation de l'applet KDE KNetworkManager (il existe l'équivalent pour Gnome) utilisant le démon NetworkManager pour se connecter aux différents réseaux (WiFi ou filaires).
Sur une Debian testing, vous pouvez installer knetworkmanager
grâce à la commande : apt-get install network-manager-kde
(sous Ubuntu le packet se nomme knetworkmanager).
Pour utiliser knetworkmanager
en tant qu'utilisateur, celui-ci doit être dans le groupe netdev
:
adduser username netdev /etc/init.d/dbus reload
Sous KDE, vous pouvez lancer knetworkmanager
, soit par les menus soit en tapant directement dans une console knetworkmanager &
. Il vous restera par la suite à automatiser son chargement au démarrage de KDE en plaçant un lien sur l'exécutable dans le répertoire ~/.kde/Autostart
.
Grâce à cette applet, vous devez déjà pouvoir vous connecter sur le réseau filaire, mais il arrive que la connexion WiFi ne marche pas sur certains réseau, notamment celui du département info .
Cela provient du fait qu'aucun
mode
n'est pas sélectionné sur la carte WiFi, ce qui gène la connexion sur certaines bornes. Pour forcer la sélection d'un mode, il suffit de taper en tant que root /sbin/iwconfig wlan0 mode auto
. Mais il faut le faire à chaque fois que la carte WiFi est détectée ce qui devient vite pénible. Pour automatiser cette action, il suffit de créer un fichier wpainit
contenant le code suivant :
#!/bin/sh # Appel de 'iwconfig wlan0 mode auto' avant l'appel de wpa_supplicant # On quitte si l'interface activée est loopback if [ "$IFACE" = lo ]; then exit 0 fi # On quitte si l'interface activée est eth0 if [ "$IFACE" = eth0 ]; then exit 0 fi # Permet de récupérer l'interface activée (WPA_IFACE) de plusieurs manières : # - soit classique avec IFACE # - soit avec IF_WPA_IFACE si une ligne wpa-iface a été spécifiée dans /etc/network/interfaces if [ -n "$IF_WPA_IFACE" ]; then WPA_IFACE="$IF_WPA_IFACE" else WPA_IFACE="$IFACE" fi /sbin/iwconfig $WPA_IFACE mode auto exit 0
Il faut ensuite le rendre exécutable en tapant chmod +x wpainit
, puis de le déplacer en tant que root dans le répertoire /etc/network/if-pre-up.d/
.
NetworkManager (par le biais de NetworkManagerDispatcher
) se chargera de lancer tous les scripts se trouvant dans /etc/network/if-pre-up.d/
avant que n'importe quelle interface réseau n'apparaisse. NetworkManager lancera les scripts en suivant l'ordre alphabétique. Or, il faut absolument que notre script soit lancé avant wpasupplicant
(dans le même répertoire), il est donc important de vérifier que le nom donné à notre script le place bien avant wpasupplicant
.
ACPI : Gestion du processeur
L'utilisation de ces instructions demande une mise à jour du BIOS qui doit être en version F07. L'ajustement de la fréquence peut être faite directement au niveau du noyau ou par un démon en userspace. Différents démons peuvent être utilisés pour cela, du simple powernowd au plus sophistiqué powersaved qui est capable de faire bien d'autres choses, et qui gère des profils différents selon le niveau de la batterie ou la présence de l'adaptateur secteur. Pour utiliser ce dernier et configurer l'ajustement de la fréquence, éditer le fichier /etc/powersave/cpufreq
et s'assurer de la présence des lignes suivantes :
CPUFREQ_ENABLED="yes" CPUFREQD_MODULE="acpi-cpufreq"
Par défaut, powersaved utilise l'ajustement de fréquence du noyau, ce qui est habituellement suffisant. Les différents profils peuvent alors être configurés en éditant les fichiers /etc/powersave/scheme_*
ou en utilisant kpowersave, une petite applet KDE qui permet aussi de mettre en veille en RAM ou sur disque. Des outils en ligne de commande ainsi que l'applet KDE permettent d'interagir avec le démon, pour changer de profil de performance par exemple. Pour utiliser ces outils en tant qu'utilisateur de nom username
, cet utilisateur doit être dans le groupe powerdev
:
adduser username powerdev /etc/init.d/dbus reload
Avec le BIOS version F05, et même avec un noyau récent tel que le 2.6.20, le speedstep n'est pas pris en compte, et un modprobe speedstep-centrino
provoque un Device or resource busy
. Un chargement du module acpi-cpufreq
(qui devrait remplacer sous peu le module speedstep) provoque la même erreur ou un ralentissement de la machine. Le seul moyen de diminuer la consommation du processeur est donc d'utiliser le module p4-clockmod
qui prend en compte l'ajustement de la fréquence mais pas l'ajustement du voltage, ce qui provoque un avertissement lors du chargement du module (Warning: EST-capable CPU detected. The acpi-cpufreq module offers voltage scaling in addition of frequency scaling
). L'autonomie de la machine est alors nettement moins bonne.
Lecteur MMC/SD (testé avec carte SD)
Après divers essais infructueux, voici une configuration qui semble fonctionner sur Ubuntu 7.04 “feisty”.
# /sbin/modprobe mmc_block # /sbin/modprobe tifm_core # /sbin/modprobe tifm_7xx1 # lsmod |grep tifm tifm_sd 11528 0 mmc_core 27652 2 mmc_block,tifm_sd tifm_7xx1 8960 0 tifm_core 9856 2 tifm_sd,tifm_7xx1
L'insertion de ma carte SD de test (16Mo) est détectée par le module :
tifm_7xx1: sd card detected in socket 1 mmcblk0: mmc1:1511 SD016 14560KiB mmcblk0: p1
… et gnome-volume-manager la prend en charge et l'automonte :
# mount |grep mmcblk0 /dev/mmcblk0p1 on /media/disk type vfat
Au cas où, voici un dump des registres de configuration de ce(s) périphérique(s) PCI sur mon portable :
# lspci -s 02:06 -x 02:06.0 CardBus bridge: Texas Instruments PCIxx12 Cardbus Controller 00: 4c 10 39 80 07 00 10 02 00 00 07 06 20 a8 82 00 10: 00 00 20 f4 a0 00 00 02 02 03 06 b0 00 00 00 80 20: 00 f0 ff 83 00 00 00 84 00 f0 ff 87 00 50 00 00 30: fc 50 00 00 00 54 00 00 fc 54 00 00 0b 01 c0 05 40: 3c 10 b1 30 01 00 00 00 00 00 00 00 00 00 00 00 50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02:06.2 Mass storage controller: Texas Instruments 5-in-1 Multimedia Card Reader (SD/MMC/MS/MS PRO/xD) 00: 4c 10 3b 80 06 00 10 02 00 00 80 01 10 40 80 00 10: 00 80 20 f4 00 00 00 00 00 00 00 00 00 00 00 00 20: 00 00 00 00 00 00 00 00 00 00 00 00 3c 10 b1 30 30: 00 00 00 00 44 00 00 00 00 00 00 00 0b 01 07 04 02:06.3 Generic system peripheral [0805]: Texas Instruments PCIxx12 SDA Standard Compliant SD Host Controller 00: 4c 10 3c 80 06 00 10 02 00 00 05 08 10 40 80 00 10: 00 90 20 f4 00 00 00 00 00 00 00 00 00 00 00 00 20: 00 00 00 00 00 00 00 00 00 00 00 00 3c 10 b1 30 30: 00 00 00 00 80 00 00 00 00 00 00 00 0b 03 07 04 02:06.4 Communication controller: Texas Instruments PCIxx12 GemCore based SmartCard controller 00: 4c 10 3d 80 02 00 10 02 00 00 80 07 00 00 80 00 10: 00 a0 20 f4 00 b0 20 f4 00 00 00 00 00 00 00 00 20: 00 00 00 00 00 00 00 00 00 00 00 00 3c 10 b1 30 30: 00 00 00 00 44 00 00 00 00 00 00 00 0b 01 00 00
Heure incorrectement récupérée
Avec la dernière version du BIOS (F07), les scripts de démarrage ne peuvent pas récupérer correctement l'heure depuis le BIOS. Symptôme : un appel à hwclock
provoque une erreur select() to /dev/rtc to wait for clock tick timed out
, et l'heure, donnée par exemple par la commande date
est fausse.
Pour corriger le problème, il faut demander à hwclock
, quand il est appelé dans les scripts de démarrage (pour initialiser l'heure du système) et d'extinction (pour envoyer au BIOS l'heure actuelle), d'utiliser une option spéciale. Pour cela, éditer /etc/init.d/hwclock.sh
et rajouter l'option correspondante aux paramètres :
HWCLOCKPARS=--directisa
Vidéo double affichage
ACPI : Hibernation / Veille