Outils pour utilisateurs

Outils du site


transmission_usb_aux_os_invites

VMware: permettre à la suse 10.2 hôte de donner accès à l'USB aux OS invités

[suse 10.2]

Note pour la suse 10.3 en tant qu'OS hôte: l'USB est transmis sans recompilation du noyau, mais il faut quand même que la ligne suivante soit dans le fichier fstab (merci à Li-nox!):

  /dev/bus/usb   /proc/bus/usb   usbfs   default   0 0 

Problème

Les machines virtuelles de VMware Server installées sur une suse 10.2 hôte, ne peuvent pas donner aux OS invités, l'accès aux périphériques USB (sauf clavier et souris USB).

La raison tient aux modifications de la suse 10.2 concernant l'usbfs (pour des raisons de sécurité concernant l'attribution des droits aux disques usb).

Bon, je ne sais pas si c'est irrémédiable ou si c'est déjà réparé, ni même si la 10.3 aura le même problème.

En tout cas, ce tuto peut aussi servir de fil conducteur pour recompiler le noyau!

Solution

Réinstaller la fonction manquante de l'usbfs sur la suse 10.2 “hôte” en recompilant le noyau après avoir réactivé le paramètre de configuration du noyau:

CONFIG_USB_DEVICEFS=y

Attention: la compilation du noyau est une opération complexe. Et ce tuto ne traite strictement que ce qui est nécessaire pour résoudre le problème posé.

Préparation de la compilation

Installez (avec yast), s'ils n'y sont pas déjà, les packages suivants, nécessaires à la compilation du noyau:

  • gcc
  • make
  • binutils
  • ncurses
  • ncurses-devel
  • kernel-source
  • kernel-syms (optionnel)
  • kernel-doc (optionnel)

Ces installations entraînent d'autres installations pour résoudre les dépendances (laissez faire yast).

Ouvrez une console sous root, et placez-vous dans “/usr/src/linux”:

# cd /usr/src/linux  

Nettoyez les fichiers résultant d'une éventuelle précédente compilation:

# make mrproper  

Lancez la configuration du noyau:

# make cloneconfig  

Cette commande, propre à suse, prend la configuration actuelle (/proc/.config.gz) comme base pour le programme de configuration du noyau, et crée le fichier /usr/src/linux/.config

Lancez le programme de configuration:

# make menuconfig 

Il vient une fenêtre (dans la console, c'est pour ça qu'il fallait le paquet ncurse!) qui présente en arborescence tous les paramètres du noyau.

Il faut naviguer dans l'arborescence pour trouver la dernière ligne:

Device Drivers
       |
       +--> USB support
                   |
                   +--> Miscellaneous USB options
                                      |
                                      +--> [ ] USB device filesystem  

Sélectionnez cette dernière ligne, et faites “y” → les crochets au début de la ligne deviennent “[*]”, ce qui signifie que cette fonction sera prise en compte dans le nouveau noyau.

Avec la flèche “→” du clavier, sortez des différents menus en sélectionnant “exit” et [entrée], le dernier vous propose de sauvegarder le fichier de configuration du noyau, ce que vous acceptez. Il se crée alors le nouveau fichier de configuration “/usr/src/linux/.config”.

En fait, ce programme de configuration a “simplement activé” le paramètre “CONFIG_USB_DEVICEFS” qui était commenté, en le mettant à “CONFIG_USB_DEVICEFS=y”.

Compilation du noyau

Il faut maintenant lancer la compilation du noyau et de ses modules par:

# make 

Cela dure un “certain temps” (1 à 2 heures), mais vous pouvez continuer à travailler pendant ce temps-là sur votre machine (à condition qu'elle ait une puissance suffisante).

J'ai vu dans le déroulement de la compilation s'afficher un certain nombre de “warning” qui jettent un doute sur la qualité du code! Exemples: des variables non initialisées, ou des variables déclarées mais non utilisées, ou encore des pointeurs passés en integer sans cast, etc…). Est-ce que ça vient du fait que j'utilise la dernière version du compilateur qui fait plus de vérifications que celle des développeurs? Je ne sais pas. Bon, le résultat a l'air de marcher quand même…

Puis, installez les modules du noyau par:

# make modules_install 

=⇒ Les modules compilés s'installent dans /lib/modules/2.6.18.2-34-default (avec le numéro de version en-cours!)

Puis, enfin, installer le nouveau noyau par:

# make install 

Avec cette opération, il y a mise à jour des fichiers de /boot suivants:

  • System.map-2.6.18.2-34-default (+ sauvegarde de l'ancien avec l'extension “.old”)
  • vmlinuz-2.6.18.2-34-default (+ sauvegarde de l'ancien avec l'extension “.old”)
  • lien vmlinuz sur vmlinuz-2.6.18.2-34-default
  • initrd-2.6.18.2-34-default
  • lien initrd sur initrd-2.6.18.2-34-default

L'ancien initrd n'est pas sauvegardé, mais il serait automatiquement restauré si on avait à réinstaller le package de l'ancien noyau puisqu'il en fait partie.

Il faut ensuite vérifier que le menu de grub lance le bon noyau! En ce qui me concerne, je remplace “kernel /boot/vmlinuz-2.6.18.2-34-default” par “kernel /boot/vmlinuz …” puisque vmlinuz est un lien qui pointe toujours sur le bon noyau. Pareil pour initrd.

Rétablir le lien dans le fstab de la suse 10.2

Il faut ajouter la ligne suivante dans fstab:

/dev/bus/usb   /proc/bus/usb   usbfs   default   0 0 

Il ne reste plus qu'à rebooter… en croisant les doigts! (Chez moi, ça a marché :-D ).

Et si ça ne marche pas?

Le pire qui puisse vous arriver est le message: “kernel panic”!

Remède: redémarrez avec le cd ou dvd d'installation, et demandez une réparation. Le but est de remettre le noyau “normal”… et de recommencer!

Mais je n'ai pas (encore) eu à le faire!

Bonne chance!

Comment donner l'accès à un périphérique usb dans un OS invité?

Une fois la compilation du noyau effectuée, et la ligne supplémentaire de fstab active, il n'y a pas d'autre effet pour l'OS hôte, que de lui donner la capacité à transmettre l'usb aux OS invités.

Pour transmettre à un OS invité en particulier, il faut avec la console vmware:

  • arrêter l'OS invité,
  • et lui ajouter un contrôleur usb (virtuel) dans ses réglages.

L'OS invité étant ensuite relancé, on accède au menu de la console vmware (VM) et on trouve les périphériques mobiles, dont usb, qui ont été détectés et qui sont disponibles.

Il ne reste plus qu'à cocher les périphériques qu'on veut voir raccordés à l'OS invité.

Et en cas de mise à jour du kernel?

Désolé, mais il vous faudra recommencer!

transmission_usb_aux_os_invites.txt · Dernière modification: 2007/12/15 09:57 par tyrtamos

Outils de la page