Warum funktioniert USB unter Linux nicht, wenn es unter UEFI / BIOS funktioniert?

31

Als Hintergrund habe ich gerade eine neue Maschine mit moderner Hardware gebaut, einschließlich:

  • AMD FX-8350
  • Gigabyte GA-990FXA-UD3 Hauptplatine
  • 16 GB RAM
  • NVidia GTX 650 Ti
  • Kingston SSD

Angesichts dessen habe ich versucht, verschiedene Linux-Versionen auf der SSD zu installieren, und bin fast jedes Mal auf einen Fehler gestoßen. Ich habe versucht, Arch, Debian stable, Debian sid und Ubuntu 12.10 von einem USB-Stick zu installieren, aber als das BIOS das USB-Laufwerk erkannte und mit dem Booten begann, verlor ich alle USB-Funktionen, sobald das Betriebssystem versuchte, die USB-Geräte aufzulisten (einschließlich des Startgeräts).

Schließlich habe ich eine DVD gebrannt und Ubuntu 12.10 auf der SSD installiert. Es ist zu beachten, dass meine USB-Tastatur (und -Maus) im amerikanischen Megatrends UEFI / BIOS einwandfrei funktionieren. Auch wenn ich mich in den Vorinstallationsmenüs auf der Live Ubuntu-DVD befinde, funktioniert die Tastatur einwandfrei.

Sobald Linux gebootet wird (entweder Live-DVD oder von der SSD), verliere ich alle USB-Funktionen und kann nur mit einer PS / 2-Tastatur im Betriebssystem navigieren.

Was ich im dmesg / syslog sehe, sind ein paar Zeilen über " failed to load microcode amd_ucode/microcode_amd_fam15h.bin" und ich kann sehen, dass USB-Geräte nicht initialisiert werden können.

Wenn ich einen mache, lsusbkann ich alle USB-Host-Controller sehen, aber keines der Geräte. Wenn lspciich einen mache, sehe ich die Hardware, die ich erwarten würde. Und dabei lsmodsehe ich keine USB-Module geladen ( usb_ehcizum Beispiel).

Ich habe versucht, noapicauf die Kernel-Boot-Zeichenfolge zuzugreifen, und dies hatte keine Auswirkung auf dieses Problem.

Das Motherboard unterstützt USB 3.0, aber alle Geräte, die ich an normale USB 2.0-Ports angeschlossen habe.

Ich bin ziemlich verblüfft darüber, was USB (und meine Bordnetzkarte) daran hindern könnte, unter Linux zu funktionieren . Es scheint kein Problem damit zu geben, dass eines dieser Geräte im BIOS funktioniert, und ich habe keine Windows-Installation, um zu testen, ob es funktioniert.

Ich habe das Motherboard bereits einmal per RMA überprüft, aber das zweite hat genau dasselbe Verhalten, sodass ich denke, dass ich Hardwarefehler sicher ausschließen kann (da das Verhalten identisch ist, glaube ich nicht, dass ich zwei identisch defekte Boards bekomme) sind größer als die Wahrscheinlichkeit, dass dies ein Linux-Problem ist).

Was kann ich sonst noch versuchen, um USB (und im Idealfall mein Netzwerk, aber wir bleiben vorerst bei USB) zum Laufen zu bringen?

Bearbeiten Sie # 1:

Da ich kein Netzwerk habe, kann ich von dmesghier aus nur interessante Dinge erzählen .

Von Interesse dmesgkann ich sehen Ich habe 11 USB - Host - Controller (OHCI, EHCI und xHCI). Es erkennt meine USB-Geräte und schlägt dann sofort wie folgt fehl:

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

Dies wird mehrmals wiederholt, um die Anzahl zu erhöhen und andere USB-Host-Controller zu testen, bis sie auf OHCI-Controller zurückgreifen, die ebenfalls fehlschlagen, aber eine zusätzliche Meldung haben:

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

Ich denke, meine Netzwerkprobleme haben mit der Tatsache zu tun, dass ich IPv6 auf meinem Router nicht aktiviert habe und das scheint ein Problem zu sein

eth1: no IPv6 routers present

Bearbeiten Sie # 2:

lspci -vvvzeigt, dass meine Netzwerkadapter (Onboard und Erweiterung) Realtek Semiconductor sind (keine Überraschung); RTL8111 / 8168B bzw. RTL8169 / 8110. Meine USB-Controller sind Etron Technology EJ168 (xHCI) und AMD nee ATI SB7x0 / SB8x0 / SB9x0 (EHCI & OHCI).

Jetzt läuft Debian sid modprobezeigt usb_common, usbcore, xhci_hcd, ehci_hcd, und ohci_hcdalle geladen und funktionieren.

BrionS
quelle
Das Versagen beim Laden des Mikrocodes scheint eigenartig zu sein. Ich denke darüber nach, dass das Motherboard noch nicht unterstützt wird oder ein Mikrocode-Paket fehlt.
TNW
Es scheint, dass dieses Problem möglicherweise behoben werden kann ( butterflyofdream.wordpress.com/2012/09/10/… ), da diese CPU schon eine Weile nicht mehr verfügbar ist und es Pakete gibt, die den Mikrocode aktualisieren. Ich frage mich jedoch, wie dies verhindern würde, dass USB unter Linux funktioniert, wenn USB im BIOS problemlos funktioniert. Solange ich nicht herausfinden kann, warum das Netzwerkgerät keine Verbindung herstellt, kann ich den Patch auch nicht anwenden (obwohl ich dies heute Abend möglicherweise mit einer Zusatzkarte ausschließen kann).
BrionS
1
Ich würde eher sagen, dass es andersherum komisch wäre. Das BIOS, das alles auf dem Motherboard unterstützen soll, muss funktionieren. Linux irgendwie nicht. Das BIOS unterstützt Geräte häufig auf vereinfachte Weise, z. B. VBE für Grafikkarten, während Sie diese nicht stattdessen oder normale GPU-Treiber verwenden möchten.
TNW
Gibt es eine Möglichkeit für mich, Linux zu zwingen, die Geräte für die USB- und Netzwerk-Controller vom BIOS zu verwalten, bis sie (besser?) Im Linux-Kernel unterstützt werden?
BrionS
Ich glaube nicht. Die Zeiten, in denen auf alle Geräte über das BIOS zugegriffen wurde, sind lange vorbei. Ich kann Ihnen jedoch nicht versichern, dass das Problem auf den Mangel an Treibern zurückzuführen ist. Haben Sie etwas Interessantes dmesgan modprobeUSB-bezogenen Modulen ausprobiert ?
TNW

Antworten:

25

Ich habe die Antwort von diesem Thread ( http://ubuntuforums.org/showthread.php?t=2114055 ) bei ubuntuforums.org gefunden.

Bei neueren Gigabyte-Mainboards scheint es (zumindest) eine BIOS-Option zu geben IOMMU Controller, die standardmäßig deaktiviert ist und keinen Hinweis darauf gibt, wofür sie gedacht ist.

Wenn Sie diese Einstellung aktivieren und "magisch" neu starten, werden alle USB- und Netzwerkprobleme in einem 64-Bit-Linux-Betriebssystem wiederhergestellt (egal welches).

Ich bin ziemlich schockiert und erfreut darüber, dass es eine so lange Suche nach einer so einfachen Lösung war.

Vielen Dank für Ihre Hilfe und Anregungen. Hoffentlich finden das andere hilfreich.

Update: Ich möchte nur hinzufügen, dass meine aktuellen BIOS-Einstellungen neben IOMMU Controller auch die Aktivierung von XHCI Handoff und EHCI Handoff beinhalten. Andere haben dies ebenfalls erwähnt und die Aktivierung dieser beiden Übergaben ermöglicht auch, dass meine USB 3.0-Anschlüsse wie erwartet funktionieren.

BrionS
quelle
1
Ich möchte darauf hinweisen, dass IOMMU bei mir zwar funktioniert hat, aber alle internen USB-3-Anschlüsse deaktiviert wurden. Außerdem hatte ich zuvor einige Probleme mit dem Ethernet-Port, die durch das Aktivieren von IOMMU behoben wurden.
Robbie
Haben Sie versucht, xHCI Handoff zu aktivieren, um die USB 3.0-Anschlüsse zu reparieren?
Stuart P. Bentley
@ StuartP.Bentley ja xHCI- und eHCI-Handoff-Einstellungen sowie IOMMU-Controller sind aktiviert. Dadurch werden meine USB 3.0-Anschlüsse aktiviert, aber aus irgendeinem Grund funktioniert meine USB-Tastatur nicht im BIOS oder auf Grub-Bildschirmen - meine USB-Maus jedoch (siehe Abbildung). Ich habe eine zweite PS / 2-Tastatur angeschlossen, die ausschließlich zum Starten des BIOS verwendet wird.
BrionS
Es steckt noch mehr dahinter. Wenn Sie sich durch alle Ubuntu-Foren schlängeln, wird eine Bootloader-Einstellung empfohlen ("iommu = soft"), wenn IOMMU DIS aktiviert ist. Mein GB 990FXA-UD3 ist standardmäßig aktiviert, und ich konnte meinen externen USB3-Hub nicht verwenden. UNTEN: Dies kann Ihr Problem möglicherweise nicht lösen. Wenn nicht, google weiter.
Bruce
Es wird empfohlen, die EHCI-Übergabe im BIOS deaktiviert zu lassen, um die beste Leistung mit USB 2.0 zu erzielen.
Marc.2377
5

Ich habe gerade mit meinem GA-990FXA-UD7 erfahren, dass für die ordnungsgemäße Funktion der USB 2.0- und USB 3.0-Controller sowie des integrierten Ethernet-Controllers unter Linux (ich verwende Mint 17.1) die folgenden Einstellungen im BIOS erforderlich sind:

  • xHCI-Übergabe - Aktiviert
  • EHCI-Übergabe - Aktiviert
  • IOMMU-Controller - Aktiviert

Vergessen Sie nicht, UEFI zu deaktivieren und alle Startoptionen auf "Nur Legacy" zu ändern.

Wenn Sie wirklich von einer Festplatte mit einer Kapazität von> 2,2 TB booten müssen, haben Sie möglicherweise ein anderes Problem.

Ich verwende eine 256-GB-SSD für mein Startlaufwerk und ein Paar 3-TB-Festplatten in einem RAID 1-Array (gespiegelt) mit mdadm für my / home und alles funktioniert gut.

Nachdem ich ziemlich oft mit Gigabyte-Boards gearbeitet habe, weiß ich, dass die 990FXA-UD5- und 990FXA-UD3-Boards ein sehr ähnliches BIOS haben, so dass es wahrscheinlich auch für diese Boards gilt.

PracticalTech
quelle
Ich bin froh, dass es bei Ihnen funktioniert. Ich habe genau dein Setup (256GB SSD + gespiegelte 3TB Laufwerke für / u (/ home)). Meine USB3-Ports funktionieren, aber der USB3-Hub, der an einem hängt, funktioniert nicht. (Nun, ich kann einen USB-Stick verwenden, aber keine Tastatur oder Maus.)
Bruce
iommu=softin Verbindung mit xHCI + eHIC Handoff und IOMMU Controller (alle aktiviert), ohne dass "Legacy Only" aktiviert werden muss. Arch Linux mit voller Geschwindigkeit booten, EFI und ohne Probleme mit iommu oder usb3 Root-Geräten.
Schauen Sie sich diese verwandte Antwort von Askubuntu an .
Pablo A
4

Seltsamerweise hat es für mich keinen Unterschied gemacht, dass ich das IOMMU aktiviert habe, obwohl ich ein fast identisches Setup habe (dasselbe Motherboard, denselben FX8350-Prozessor). Immer noch kein USB, Netzwerk usw.

Was jedoch geholfen hat, war das Hinzufügen von "iommu = soft" zur Kernel-Befehlszeile. Jetzt funktioniert alles einwandfrei (außer dass meine Logitech Zone Touch Mouse aus irgendeinem Grund nicht funktioniert).

Ron Murray
quelle
1
Sie sind nie die gleichen. Sogar ein Unterschied von nur wenigen Wochen bei den Herstellungsdaten könnte eine neue Quelle für eine gemeinsame Motherboard-Komponente und / oder eine Superio-Revision bedeuten. Die Herstellung von Leiterplatten ist der schattige Unterbauch des Rechnens.
mikeserv
3

Zu Ihrer Information, die technischen Gründe, warum Linux Geräte nicht "über" das BIOS verwenden kann: Sobald das Betriebssystem in den "geschützten Modus" (32-Bit) oder "langen Modus" (64-Bit) übergegangen ist, kann es keine Interrupts mehr senden zum BIOS. Im "Real-Modus" (16-Bit, beim Booten) kann es BIOS-Interrupts aufrufen, um Datenträger lesen zu lassen, Tastatureingaben usw.

Aber es hat auch Nachteile. Zum einen haben Sie nicht einmal ein Megabyte adressierbaren Speicher. Daher wechseln moderne Betriebssysteme fast als erstes aus dem Real-Modus. (Eigentlich glaube ich, dass Grub in den geschützten Modus wechselt, bevor der Kernel überhaupt geladen wird).

Weitere Details: http://wiki.osdev.org/Real_Mode http://wiki.osdev.org/Protected_Mode

DimeCadmium
quelle
2

Ich habe den gleichen Proc (aber 8 Kerne) den gleichen MB (Rev. 3) die gleiche Menge an RAM (Kingston)

Der Tipp mit IOMMU hat ein wenig geholfen - alle Ports können eine USB-Tastatur, einen Monitor-USB-Hub und einen USB-WLAN-Adapter (Realtek) sehen, aber kein Flash-Laufwerk.

Diese Lösung hat mir anscheinend geholfen:

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

Sie sehen eine Datei im Format 0000: 00: xx.x. Führen Sie den folgenden Befehl aus:

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

Ersetzen Sie die Datei xx.x durch die in Ihrer Datei angezeigten Zahlen. Es sollte das ehci_hcd deaktivieren.

Sie können jetzt das folgende Skript verwenden, um ehci_hcd zu deaktivieren.

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/

Chek
quelle
2
Es wäre hilfreicher, wenn Sie hier eine Lösung im Text angeben und nur Links für Hintergrundinformationen und nicht wesentliche Details verwenden würden. Ohne das hat Ihre Antwort keinen Wert, sobald Ihr Link ungültig wird.
Anthon
Wie einer der Benutzer in dem von Ihnen angegebenen Link kommentierte: "Dies ist KEINE Fehlerbehebung. Dies bedeutet, dass Sie Ihr Laufwerk nicht mit voller Geschwindigkeit verwenden. Dies entspricht dem Anbringen eines Pflasters an einem abgetrennten Glied."
enthusiasticgeek
2

Diese Schritte funktionierten für mich mit einem GIGABYTE 970A-DS3P und AMD-FX-8320 unter Ubuntu 15.04

  • xHCI-Übergabe - Aktiviert
  • EHCI-Übergabe - Aktiviert
  • IOMMU-Controller - Aktiviert
  • UEFI - Deaktiviert
  • Alle Startoptionen - Nur Legacy
RVR
quelle
2

Ich habe die gleiche FX8350 auf einem Gigabyte 990FXA-UD3 mit OpenSuse 13.1. Die Lösung, die für mich funktioniert hat, war, den Bootloader mit YAST, der Standardauswahl (oder der Auswahl, die Sie in meinem Fall zum Laden von OpenSuse 13.1 verwenden), "iommu = pt" nach "quiet showopts" zu bearbeiten.

Beispielsweise:

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

Jetzt funktionieren alle meine USB-Anschlüsse 2.0 und 3.0 und auch meine Internet-Netzwerke. Stellen Sie außerdem sicher, dass IOMMU im BIOS aktiviert ist.

dipio
quelle
1

Gestern habe ich dieses Problem bei der Installation von Ubuntu auf meinem ASUSTek M5A99X-Motherboard bekommen. Mein Ziel war es, Ubuntu vom USB-Stick im UEFI-Modus neu zu installieren, um die IOMMU-Erkennung durch das Betriebssystem zu beheben (mein System wurde über den "Legacy BIOS" -Modus installiert, ich dachte, dies könnte ein Grund sein).

Zuvor habe ich versucht, Ubuntu von einem USB-Stick zu installieren. In Ordnung mit Legacy, UEFI war immer ein Problem - entweder funktionierte meine Tastatur / Maus / Wifi beim Aufrufen des Installationsprogramms nicht richtig (nur Stromversorgung) oder das Installationsprogramm konnte die Benutzeroberfläche nicht mit Meldungen in der Konsole laden:

  • (…) device descriptor read/64, error -32 (für jedes USB-Gerät)
  • (…) unable to find a live medium containing a live file system(nach 5-6 Minuten Ablesen vom Stick). Dieser Fehler hat eine Problemumgehung mit dem Ändern des USB-Stick-Typs in "Force Hard Disk" (Festplatte erzwingen), aber das Booten des Systems verursachte später nach der Installation andere Probleme.

Ich dachte, die Probleme sind von "Unetbootin" oder "Startup Disk Creator" - sie sind nicht. Verbrachte mehr als 2 Stunden mit dem Ausprobieren aller BIOS-Einstellungen (ich habe keine IOMMU Controlleroder nurxHCI Handoff meine Einstellungen), aber das einzige, was geholfen hat - das BIOS auf die neueste Version zu aktualisieren , wobei die ROM-Datei von der Asus-Website für mein Motherboard-Modell heruntergeladen wurde. Es ist ganz einfach, die ROM-Datei auf dem USB-Stick zu entpacken und zu kopieren und mit dem „EZ Flash Utility“ (im BIOS) die Firmware zu flashen.

Dadurch wurden alle Fehler behoben, die ich hatte. Ich konnte Ubuntu im UEFI-Modus installieren und verwenden. Außerdem wird IOMMU jetzt von Ubuntu auf magische Weise ohne Probleme erkannt. Dies bedeutet, dass meine Probleme durch BIOS-Firmware-Fehler im Zusammenhang mit der USB 2.0 / 3.0-Unterstützung und der IOMMU-Unterstützung verursacht wurden. (Wenn Sie IOMMU nicht benötigen, sollten Sie dies im Abschnitt "Erweitert" deaktivieren, da dies nicht häufig vorkommt.)

Croll
quelle