Pourquoi l'USB ne fonctionne-t-il pas sous Linux alors qu'il fonctionne dans UEFI / BIOS?


31

Pour le fond je viens de construire une nouvelle machine avec du matériel moderne comprenant:

  • AMD FX-8350
  • Carte mère Gigabyte GA-990FXA-UD3
  • 16 Go de RAM
  • NVidia GTX 650 Ti
  • Kingston SSD

Compte tenu de cela, j'ai essayé d'installer différentes versions de Linux sur le SSD et j'ai rencontré l'échec presque à chaque fois. J'ai essayé d'installer Arch, Debian stable, Debian Sid et Ubuntu 12.10 à partir d'une clé USB, mais pendant que le BIOS voyait la clé USB et a commencé à démarrer à partir de celle-ci, dès que le système d'exploitation a tenté d'énumérer les périphériques USB, j'ai perdu toutes les fonctionnalités USB (y compris le périphérique de démarrage).

Finalement, j'ai gravé un DVD et installé Ubuntu 12.10 sur le SSD. Il convient de noter que mon clavier (et ma souris) USB fonctionne correctement dans l'American Megatrends UEFI / BIOS. Même lorsque je suis dans les menus de pré-installation sur le DVD Live Ubuntu, le clavier fonctionne bien.

Dès que Linux est démarré (soit Live DVD ou à partir du SSD), je perds toutes les fonctionnalités USB et ne peux naviguer dans le système d'exploitation qu'à l'aide d'un clavier PS / 2.

Ce que je vois dans le dmesg / syslog est quelques lignes sur " failed to load microcode amd_ucode/microcode_amd_fam15h.bin" et je peux voir que les périphériques USB ne s'initialisent pas.

Si je fais un lsusbje peux voir tous les contrôleurs hôtes USB mais aucun des appareils. Faire un lspcime montre tout le matériel auquel je m'attendais. Et en faisant un lsmodje ne vois aucun module USB chargé ( usb_ehcipar exemple).

J'ai essayé de passer noapicà la chaîne de démarrage du noyau et cela n'a eu aucun effet sur ce problème.

La carte mère prend en charge l'USB 3.0 mais tous les appareils que j'ai connectés aux ports USB 2.0 normaux.

Je suis plutôt déconcerté par ce qui pourrait tuer / empêcher l'USB (et ma carte réseau intégrée) de fonctionner sous Linux . Il ne semble pas y avoir de problème avec l'un de ces périphériques fonctionnant dans le BIOS et je n'ai pas d'installation Windows disponible pour tester et voir si cela fonctionne.

J'ai déjà RMA une fois la carte mère, mais la deuxième a exactement le même comportement, donc je pense que je peux exclure en toute sécurité une défaillance matérielle (puisque le comportement est identique, je ne pense pas que ce soit étrange que j'obtienne deux cartes identiques défectueuses sont plus grandes que les chances que cela soit un problème Linux).

Que puis-je essayer de faire fonctionner l'USB (et idéalement mon réseau, mais nous nous en tiendrons à l'USB pour l'instant)?

Édition n ° 1:

Comme je n'ai pas de réseau, je ne peux raconter que des extraits intéressants d' dmesgici.

D'intérêt, dmesgje peux voir que j'ai 11 contrôleurs hôtes USB (OHCI, EHCI et xHCI). Il détecte mes périphériques USB et échoue immédiatement comme suit:

usb 3-1: new high-speed USB device number 2 using ehci_hcd
usb 3-1: device descriptor read/64, error -32

Cela se répète plusieurs fois en incrémentant le nombre et en essayant d'autres contrôleurs hôtes USB jusqu'à ce qu'il retombe sur les contrôleurs OHCI qui échouent également mais ont un message supplémentaire:

usb 8-1: device not accepting address 4, error -32

Je pense que mes problèmes de réseau ont à voir avec le fait que je n'ai pas activé IPv6 sur mon routeur et cela semble être un problème

eth1: no IPv6 routers present

Édition n ° 2:

lspci -vvvmontre que mes adaptateurs réseau (à la fois intégrés et d'extension) sont Realtek Semiconductor (sans surprise); RTL8111 / 8168B et RTL8169 / 8110 respectivement. Mes contrôleurs USB sont Etron Technology EJ168 (xHCI) et AMD nee ATI SB7x0 / SB8x0 / SB9x0 (EHCI & OHCI)

Maintenant , sous Debian Wheezy modprobemontre usb_common, usbcore, xhci_hcd, ehci_hcdet ohci_hcdtous chargés et le fonctionnement.


L'échec du chargement du microcode semble particulier. Je pense que la carte mère n'est pas encore prise en charge ou manque de package de microcode.
TNW

Il semble que ce problème puisse disparaître ( butterflyofdream.wordpress.com/2012/09/10/… ) car ce CPU est sorti depuis un certain temps et il existe des packages qui mettent à jour le microcode. Cependant, je me demande comment cela empêcherait l'USB de fonctionner sous Linux lorsque l'USB fonctionne dans le BIOS sans problème. De plus, jusqu'à ce que je puisse comprendre pourquoi le périphérique réseau ne se connecte pas non plus, je ne pourrai pas appliquer le correctif (bien qu'une carte d'extension puisse me permettre d'exclure cela ce soir).
BrionS

1
Je dirais plutôt que ce serait bizarre dans l'autre sens. Le BIOS qui est censé prendre en charge tout sur la carte mère doit fonctionner. Linux ne le fait pas. Le BIOS prend souvent en charge les périphériques de manière simplifiée, par exemple VBE pour carte graphique - alors que vous ne souhaitez pas les utiliser à la place ou les pilotes GPU standard.
TNW

Existe-t-il donc un moyen pour moi de forcer Linux à laisser le BIOS gérer les périphériques pour les contrôleurs USB et réseau jusqu'à ce qu'ils soient (mieux?) Pris en charge dans le noyau Linux?
BrionS

Je ne pense pas. L'époque où tous les appareils étaient accessibles via le BIOS est révolue depuis longtemps. Cependant, je ne peux pas vous assurer que le problème est dû au manque de pilotes. Avez-vous trouvé quelque chose d'intéressant dans les modules liés dmesgà l' modprobeUSB?
TNW

Réponses:


25

J'ai trouvé la réponse de ce fil ( http://ubuntuforums.org/showthread.php?t=2114055 ) sur ubuntuforums.org.

Il semble qu'avec les cartes mères Gigabyte plus récentes (au moins), il existe une option BIOS appelée IOMMU Controllerqui est désactivée par défaut et ne donne aucune indication ni indication sur son utilisation.

Activer ce paramètre et redémarrer "comme par magie" restaure tous mes problèmes USB et de réseau dans un système d'exploitation Linux 64 bits (peu importe lequel).

Je suis plutôt choqué et ravi que ce soit une si longue recherche d'une solution aussi simple.

Merci à tous pour votre aide et vos suggestions. J'espère que d'autres trouveront cela utile.

Mise à jour: je voudrais juste ajouter que mes paramètres BIOS actuels incluent également l'activation du transfert XHCI et du transfert EHCI en plus du contrôleur IOMMU. D'autres l'ont également mentionné et l'activation de ces deux transferts permet également à mes ports USB 3.0 de fonctionner comme prévu.


1
Je soulignerai que pour moi, même si l'allumage de l'IOMMU a fonctionné pour moi, cela a désactivé tous mes ports USB 3 internes. En outre, je rencontrais précédemment des problèmes avec le port Ethernet, mais l'activation d'IOMMU a résolu ces problèmes.
Robbie

Avez-vous essayé d'activer le transfert xHCI pour réparer les ports USB 3.0?
Stuart P. Bentley

@ StuartP.Bentley oui Les paramètres de transfert xHCI et eHCI sont activés ainsi que le contrôleur IOMMU. Cela active mes ports USB 3.0 mais pour une raison quelconque, ne permet pas à mon clavier USB de fonctionner dans les écrans BIOS ou grub - contrairement à ma souris USB (allez comprendre). J'ai un deuxième clavier de style PS / 2 branché uniquement pour le démarrage dans le BIOS.
BrionS

Il y a plus. Si vous vous frayez un chemin à travers tous les forums ubuntu, vous constatez qu'un réglage du chargeur de démarrage est recommandé ("iommu = soft") avec IOMMU DIS activé. Par défaut, mon GB 990FXA-UD3 est activé et je ne pouvais pas utiliser mon concentrateur USB3 externe. BOTTOM LINE: cela peut ne pas résoudre votre problème. Sinon, continuez à googler.
Bruce

Il est recommandé de laisser le transfert EHCI désactivé dans le BIOS pour de meilleures performances avec USB2.0.
Marc.2377

5

Je viens d'apprendre, avec mon GA-990FXA-UD7, que pour que les contrôleurs USB 2.0 et USB 3.0 et le contrôleur Ethernet intégré fonctionnent correctement sous Linux (j'utilise Mint 17.1), il fallait les paramètres suivants dans le BIOS:

  • Transfert xHCI - Activé
  • Transfert EHCI - activé
  • Contrôleur IOMMU - activé

N'oubliez pas de désactiver UEFI et de changer toutes les options de démarrage en "Legacy Only".

Si vous avez vraiment besoin de démarrer à partir d'un disque dur d'une capacité> 2,2 To, vous pourriez avoir un problème différent entre les mains.

J'utilise un SSD de 256 Go pour mon lecteur de démarrage et une paire de disques durs de 3 To dans une matrice RAID 1 (en miroir) utilisant mdadm pour mon / home et tout fonctionne bien.

Ayant beaucoup travaillé avec les cartes Gigabyte, je sais que les cartes 990FXA-UD5 et 990FXA-UD3 ont un BIOS très similaire, il est donc probable que la même chose s'applique également à ces cartes.


Je suis content que cela fonctionne pour vous. J'ai exactement votre configuration (256 Go SSD + disques en miroir de 3 To pour / u (/ home)). Mes ports USB3 fonctionnent, mais le concentrateur USB3 suspendu à l'un ne fonctionne pas. (Eh bien, je peux utiliser une clé USB, mais pas un clavier ou une souris.)
Bruce

iommu=soften conjonction avec xHCI + eHIC Handoff et contrôleur IOMMU (tous activés), sans avoir à activer "Legacy Only". Archivez Linux au démarrage à pleine vitesse, EFI et sans problèmes de périphérique racine iommu ou usb3.


4

Curieusement, même si j'ai une configuration presque identique (même carte mère, processeur FX8350), l'activation de l'IOMMU n'a pas fait de différence pour moi. Toujours pas d'USB, de mise en réseau, etc.

Ce qui a aidé, cependant, était d'ajouter "iommu = soft" à la ligne de commande du noyau. Maintenant, tout fonctionne bien (sauf que, pour une raison étrange, ma souris tactile Logitech Zone Touch ne fonctionne pas).


1
Ce ne sont jamais les mêmes. Même une différence de quelques semaines seulement dans les dates de fabrication pourrait signifier une nouvelle source pour un composant de carte mère commun et / ou une révision superio. La fabrication de cartes de circuits imprimés est le ventre obscur de l'informatique.
mikeserv

3

Pour info, les raisons techniques pour lesquelles Linux ne peut pas utiliser de périphériques "via" le BIOS: une fois que le système d'exploitation est passé en "mode protégé" (32 bits) ou en "mode long" (64 bits), il ne peut plus envoyer d'interruptions au BIOS. En "mode réel" (16 bits, au démarrage), il peut appeler des interruptions du BIOS pour lire les disques, saisir le clavier, etc.

Mais il a aussi des inconvénients. D'une part, vous n'avez même pas un mégaoctet de mémoire adressable. Donc, le passage du système d'exploitation moderne en mode réel est presque la première chose. (En fait, je crois que grub passe en mode protégé avant même de charger le noyau).

Plus de détails: http://wiki.osdev.org/Real_Mode http://wiki.osdev.org/Protected_Mode


2

J'ai le même proc (mais 8 cœurs) le même Mo (rev 3) la même quantité de RAM (Kingston)

L'astuce avec IOMMU a un peu aidé - tous les ports peuvent voir un clavier USB, un concentrateur USB de moniteur et un adaptateur WiFi USB (Realtek), mais pas de lecteur flash.

Il semble que cette solution m'a aidé:

cd /sys/bus/pci/drivers/ehci_hcd
ls

Vous verrez un fichier au format 0000: 00: xx.x. Exécutez la commande suivante:

sudo sh -c 'echo -n "0000:00:xx.x" > unbind'

Remplacez le xx.x par les chiffres affichés sur votre fichier. Il devrait désactiver l'ehci_hcd.

Vous pouvez maintenant utiliser le script suivant pour désactiver ehci_hcd.

cd /sys/bus/pci/drivers/ehci_hcd/
sudo sh -c 'find ./ -name "0000:00:*" -print| sed "s/\.\///">unbind'

http://www.geekdevs.com/2010/04/solved-unable-to-enumerate-usb-device-disabling-ehci_hcd/


2
Il serait plus utile de fournir une solution ici sous forme de texte et de n'utiliser des liens que pour des informations générales et des détails non essentiels. Sans cela, une fois que votre lien devient invalide, votre réponse n'a plus de valeur.
Anthon

Comme l'un des utilisateurs a commenté dans le lien que vous avez fourni "Ce n'est PAS un correctif. Cela signifie que vous n'utilisez pas votre lecteur à pleine vitesse. C'est comme mettre un pansement sur un membre sectionné."
enthousiastegeek

2

Ces étapes ont fonctionné pour moi avec un GIGABYTE 970A-DS3P et AMD-FX-8320 exécutant Ubuntu 15.04

  • Transfert xHCI - Activé
  • Transfert EHCI - activé
  • Contrôleur IOMMU - activé
  • UEFI - Désactivé
  • Toutes les options de démarrage - hérité uniquement

2

J'ai le même FX8350 fonctionnant sur un Gigabyte 990FXA-UD3 utilisant OpenSuse 13.1. La solution qui a fonctionné pour moi a été de modifier le chargeur de démarrage en utilisant YAST, la sélection par défaut (ou la sélection que vous utilisez pour charger OpenSuse 13.1 dans mon cas), "iommu = pt" après "showopts silencieux".

Par exemple:

"resume = / dev / disk / by-id / ata-Hitachi_HDS721010CLA332_JP2921HQ1076NA-part2 splash = silencieux silencieux showopts iommu = pt"

Maintenant, tous mes ports USB 2.0 et 3.0 fonctionnent et mon réseau Internet fonctionne aussi!. Assurez-vous également que IOMMU est activé dans le BIOS.


1

Hier, j'ai eu ce problème lors de l'installation d'Ubuntu sur ma carte mère ASUSTek M5A99X. Mon objectif était de réinstaller Ubuntu à partir d'une clé USB en mode UEFI, pour corriger la détection IOMMU par OS (mon système a été installé via le mode «Legacy BIOS», j'ai pensé que cela pourrait être une raison).

Auparavant, j'ai essayé cela en installant Ubuntu à partir d'une clé USB. Très bien avec Legacy, UEFI a toujours été un problème - soit mon clavier / souris / Wifi ne fonctionnait pas correctement (alimentation uniquement) lors de la saisie du programme d'installation, soit le programme d'installation ne parvenait pas à charger l'interface utilisateur avec des messages dans la console:

  • (…) device descriptor read/64, error -32 (pour chaque périphérique USB)
  • (…) unable to find a live medium containing a live file system(après 5-6 minutes de lecture du bâton). Cette erreur a une solution de contournement en changeant le type de clé USB en «Force Hard Disk», mais le système de démarrage a causé d'autres problèmes plus tard après l'installation.

Je pensais que les problèmes venaient de «Unetbootin» ou de «Startup Disk Creator» - ils ne le sont pas. J'ai passé plus de 2 heures à essayer tous les paramètres du BIOS (je n'en ai pas IOMMU Controllerou les xHCI Handoffparamètres sont dans le mien), mais la seule chose a aidé - la mise à niveau du BIOS vers la dernière version avec le fichier ROM téléchargé depuis le site Web d'Asus pour mon modèle de carte mère. Il suffit de décompresser et de copier le fichier ROM sur la clé USB et d'utiliser «l'utilitaire EZ Flash» (dans le BIOS) pour flasher le firmware.

Faire cela a corrigé toutes sortes d'erreurs que j'avais; J'ai pu installer et utiliser Ubuntu en mode UEFI. De plus, IOMMU est désormais détecté par Ubuntu comme par magie sans aucun problème. Cela signifie que mes problèmes ont été causés par des bogues du micrologiciel du BIOS liés au support USB 2.0 / 3.0 et au support IOMMU. (si vous n'avez pas besoin d'IOMMU, vous devez le désactiver dans la section "Avancé" car ce n'est pas chose courante).

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.