Perché USB non funziona in Linux quando funziona in UEFI / BIOS?


31

Per lo sfondo ho appena costruito una nuova macchina con hardware moderno tra cui:

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

Detto questo, ho provato a installare varie versioni di Linux sull'SSD e ho riscontrato errori quasi ogni volta. Ho provato a installare Arch, Debian stable, Debian sid e Ubuntu 12.10 da una chiavetta USB ma mentre il BIOS ha visto l'unità USB e ha iniziato ad avviarsi da essa, non appena il sistema operativo ha tentato di enumerare i dispositivi USB ho perso tutte le funzionalità USB (incluso il dispositivo di avvio).

Alla fine ho masterizzato un DVD e ho installato Ubuntu 12.10 sull'SSD. Va notato che la mia tastiera (e il mio mouse) USB funzionano benissimo mentre mi trovo nell'American Megatrends UEFI / BIOS. Anche quando sono nei menu di preinstallazione sul DVD Live Ubuntu la tastiera funziona bene.

Non appena viene avviato Linux (Live DVD o dall'SSD) perdo tutte le funzionalità USB e posso navigare nel sistema operativo solo usando una tastiera PS / 2.

Quello che vedo nel dmesg / syslog sono alcune righe su " failed to load microcode amd_ucode/microcode_amd_fam15h.bin" e vedo che i dispositivi USB non si inizializzano.

Se lo faccio, lsusbposso vedere tutti i controller host USB ma nessuno dei dispositivi. Fare un video lspcimi mostra tutto l'hardware che mi aspetto. E facendo un lsmodnon vedo alcun modulo USB caricato ( usb_ehciad esempio).

Ho provato a passare noapicalla stringa di avvio del kernel e non ha avuto alcun effetto su questo problema.

La scheda madre supporta USB 3.0 ma tutti i dispositivi che ho collegato alle normali porte USB 2.0.

Sono piuttosto sconcertato da ciò che potrebbe uccidere / impedire a USB (e alla mia scheda di rete integrata) di funzionare su Linux . Non sembra esserci alcun problema con nessuno di questi dispositivi che funzionano nel BIOS e non ho un'installazione di Windows disponibile per testare e vedere se funziona.

Ho già eseguito l'RMA sulla scheda madre una volta, ma la seconda ha esattamente lo stesso comportamento, quindi penso di poter escludere in modo sicuro guasti hardware (poiché il comportamento è identico, non penso che mi dispiaccia ottenere due schede identicamente difettose sono maggiori delle probabilità che questo sia un problema di Linux).

Cos'altro posso provare a far funzionare USB (e idealmente la mia rete, ma per ora ci limiteremo a USB)?

Modifica n. 1:

Dato che non ho reti, posso solo mettere in relazione parti interessanti da dmesgqui.

È interessante dmesgnotare che ho 11 controller host USB (OHCI, EHCI e xHCI). Rileva i miei dispositivi USB e quindi fallisce immediatamente come segue:

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

Ciò si ripete più volte incrementando il numero e provando altri controller host USB fino a quando non ricade su controller OHCI che falliscono ma hanno un messaggio aggiuntivo:

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

Penso che i miei problemi di rete abbiano a che fare con il fatto che non ho abilitato IPv6 sul mio router e che sembra essere un problema

eth1: no IPv6 routers present

Modifica n. 2:

lspci -vvvmostra che le mie schede di rete (sia onboard che di espansione) sono Realtek Semiconductor (nessuna sorpresa); RTL8111 / 8168B e RTL8169 / 8110 rispettivamente. I miei controller USB sono Etron Technology EJ168 (xHCI) e AMD nee ATI SB7x0 / SB8x0 / SB9x0 (EHCI & OHCI)

Ora in esecuzione Debian wheezy modprobespettacoli usb_common, usbcore, xhci_hcd, ehci_hcd, e ohci_hcdtutti caricati e funzionante.


Il fallimento del caricamento del microcodice sembra strano. Sto pensando che la scheda madre non è ancora supportata o manca il pacchetto di microcodici.
TNW,

Sembra che il problema potrebbe essere risolto ( butterflyofdream.wordpress.com/2012/09/10/… ) in quanto questa CPU è in circolazione da un po 'di tempo e ci sono pacchetti che aggiornano il microcodice. Tuttavia, mi chiedo come ciò impedirebbe a USB di funzionare in Linux quando USB funziona nel BIOS senza problemi. Inoltre, fino a quando non riesco a capire perché il dispositivo di rete non si connette, non sarò in grado di applicare la patch (anche se una scheda aggiuntiva potrebbe farmi escludere stasera).
BrionS

1
Preferirei dire che sarebbe strano al contrario. Il BIOS che dovrebbe supportare tutto sulla scheda madre deve funzionare. Linux non lo fa. Il BIOS spesso supporta i dispositivi in ​​modo semplificato, ad esempio VBE per la scheda grafica, mentre non si desidera utilizzarli al posto dei normali driver GPU.
TNW,

Quindi c'è un modo per forzare Linux a consentire al BIOS di gestire i dispositivi per USB e controller di rete fino a quando non sono (meglio?) Supportati nel kernel Linux?
BrionS

Io non la penso così. I giorni in cui è stato effettuato l'accesso a tutti i dispositivi tramite BIOS sono ormai lontani. Tuttavia, non posso assicurarti che il problema è dovuto alla mancanza di driver. Hai trovato qualcosa di interessante in dmesg, provato a modprobemoduli relativi USB?
TNW,

Risposte:


25

Ho trovato la risposta da questo thread ( http://ubuntuforums.org/showthread.php?t=2114055 ) su ubuntuforums.org.

Sembra che con le più recenti schede madri Gigabyte (almeno) c'è un'opzione BIOS chiamata IOMMU Controllerche è disabilitata per impostazione predefinita e non fornisce alcun indizio o indicazione su cosa serve.

Abilitare questa impostazione e riavviare "magicamente" ripristina tutti i miei problemi USB e di rete in un sistema operativo Linux a 64 bit (non importa quale).

Sono piuttosto scioccato ed euforico che è stata una così lunga ricerca di una soluzione così semplice.

Grazie a tutti per il vostro aiuto e suggerimenti. Spero che altri lo trovino utile.

Aggiornamento: vorrei solo aggiungere che le mie attuali impostazioni del BIOS includono anche l'abilitazione di XHCI Handoff e EHCI Handoff oltre al controller IOMMU. Altri hanno menzionato anche questo e abilitare questi due handoff consente anche alle mie porte USB 3.0 di funzionare come previsto.


1
Sottolineerò che per me, anche se accendere IOMMU ha funzionato per me, ha disattivato tutte le mie porte USB 3 interne. Inoltre, in precedenza avevo riscontrato alcuni problemi con la porta Ethernet, ma l'attivazione di IOMMU ha risolto tali problemi.
Robbie,

Hai provato ad abilitare xHCI Handoff per riparare le porte USB 3.0?
Stuart P. Bentley,

@ StuartP.Bentley sì Sono abilitate le impostazioni xHCI ed eHCI Handoff e il controller IOMMU. Questo abilita le mie porte USB 3.0 ma per qualsiasi motivo non consente alla mia tastiera USB di funzionare nelle schermate BIOS o grub - tuttavia il mio mouse USB lo fa (vai alla figura). Ho una seconda tastiera in stile PS / 2 collegata esclusivamente per l'avvio nel BIOS.
BrionS

C'è di più. Se ti fai strada attraverso tutti i forum Ubuntu, scopri che è consigliata un'impostazione del caricatore di avvio ("iommu = soft") con IOMMU DIS abilitato . L'impostazione predefinita di GB 990FXA-UD3 è abilitata e non è stato possibile utilizzare il mio hub USB3 esterno. LINEA INFERIORE: questo potrebbe non risolvere il tuo problema. Altrimenti, continua a cercare su Google.
Bruce,

Si consiglia di lasciare il handoff EHCI disabilitato nel BIOS per le migliori prestazioni con USB 2.0.
Marc.2377,

5

Ho appena imparato, con GA-990FXA-UD7, che sia per i controller USB 2.0 e USB 3.0 che per il controller Ethernet integrato per funzionare correttamente in Linux (sto usando Mint 17.1), nel BIOS sono necessarie le seguenti impostazioni:

  • Handoff xHCI - Abilitato
  • Handoff EHCI - Abilitato
  • Controller IOMMU - Abilitato

Non dimenticare di disabilitare UEFI e modificare tutte le opzioni di avvio in "Solo legacy".

Se è davvero necessario eseguire l'avvio da un HDD con capacità> 2,2 TB, è possibile che si verifichi un problema diverso.

Sto usando un SSD da 256 GB per la mia unità di avvio e una coppia di HDD da 3 TB in un array RAID 1 (con mirroring) usando mdadm per my / home e tutto funziona bene.

Avendo lavorato molto con le schede Gigabyte, so che le schede 990FXA-UD5 e 990FXA-UD3 hanno un BIOS molto simile, quindi è probabile che lo stesso si applichi anche a quelle schede.


Sono felice che funzioni per te. Ho esattamente la tua configurazione (SSD da 256 GB + unità da 3 TB con mirroring per / u (/ home)). Le mie porte USB3 funzionano, ma l'hub USB3 è rimasto sospeso. (Beh, posso usare una chiavetta USB, ma non una tastiera o un mouse.)
Bruce,

iommu=softin combinazione con xHCI + eHIC Handoff e controller IOMMU (tutti abilitati), senza dover abilitare "Solo legacy". Arch Linux a piena velocità, EFI e senza iommu o problemi con il dispositivo root USB3.


4

Stranamente, anche se ho una configurazione quasi identica (stessa scheda madre, processore FX8350), abilitare IOMMU non ha fatto alcuna differenza per me. Ancora nessuna connessione USB, rete, ecc.

Ciò che ha aiutato, tuttavia, è stato l'aggiunta di "iommu = soft" alla riga di comando del kernel. Ora funziona tutto bene (tranne che, per qualche strana ragione, il mio mouse touch Logitech Zone non funziona).


1
Non sono mai gli stessi. Anche solo poche settimane di differenza nelle date di produzione potrebbe significare una nuova fonte per un componente comune della scheda madre e / o una revisione del superio. La produzione di circuiti stampati è la parte oscura dell'informatica.
Mikeserv,

3

Cordiali saluti, le ragioni tecniche per cui Linux non può usare i dispositivi "attraverso" il BIOS: una volta che il sistema operativo è passato alla "modalità protetta" (32 bit) o ​​alla "modalità lunga" (64 bit), non può più inviare interruzioni al BIOS. In "modalità reale" (16 bit, all'avvio) può chiamare gli interrupt del BIOS per leggere i dischi, inserire la tastiera, ecc.

Ma ha anche degli aspetti negativi. Per uno, non hai nemmeno un megabyte di memoria indirizzabile. Quindi il sistema operativo moderno passa dalla modalità reale quasi alla prima cosa. (In realtà, credo che grub passi alla modalità protetta prima ancora che carichi il kernel).

Maggiori dettagli: http://wiki.osdev.org/Real_Mode http://wiki.osdev.org/Protected_Mode


2

Ho lo stesso proc (ma 8 core) lo stesso MB (rev 3) la stessa quantità di RAM (Kingston)

Il suggerimento con IOMMU ha aiutato un po ': tutte le porte possono vedere una tastiera USB, un hub USB per monitor e un adattatore wifi USB (Realtek), ma nessuna unità flash.

Sembra che questa soluzione mi abbia aiutato:

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

Vedrai un file con il formato 0000: 00: xx.x. Eseguire il comando seguente:

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

Sostituisci xx.x con i numeri visualizzati sul tuo file. Dovrebbe disabilitare ehci_hcd.

Ora puoi usare il seguente script per disabilitare 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
Sarebbe più utile se fornissi una soluzione qui nel testo e usi i collegamenti solo per informazioni di base e dettagli non essenziali. Senza quello, una volta che il tuo link diventa invalido la tua risposta non ha valore.
Anthon,

Come uno degli utenti ha commentato nel collegamento che hai fornito "Questa NON è una correzione. Ciò significa che non stai utilizzando l'unità alla massima velocità. È come mettere un cerotto su un arto reciso".
enthusiasticgeek,

2

Questi passaggi hanno funzionato per me con un GIGABYTE 970A-DS3P e AMD-FX-8320 con Ubuntu 15.04

  • Handoff xHCI - Abilitato
  • Handoff EHCI - Abilitato
  • Controller IOMMU - Abilitato
  • UEFI - Disabilitato
  • Tutte le opzioni di avvio - Solo legacy

2

Ho lo stesso FX8350 in esecuzione su un Gigabyte 990FXA-UD3 usando OpenSuse 13.1. La soluzione che ha funzionato per me è stata quella di modificare il bootloader usando YAST, la selezione predefinita (o la selezione che stai usando per caricare OpenSuse 13.1 nel mio caso), "iommu = pt" dopo "quiet showopts".

Per esempio:

"resume = / dev / disk / by-id / ata-Hitachi_HDS721010CLA332_JP2921HQ1076NA-part2 splash = silenzioso silenzioso mostra iommu = pt"

Ora tutte le mie porte USB 2.0 e 3.0 funzionano e anche la mia rete Internet funziona !. Assicurati anche che IOMMU sia abilitato nel BIOS.


1

Ieri ho riscontrato questo problema durante l'installazione di Ubuntu sulla mia scheda madre ASUSTek M5A99X. Il mio obiettivo era reinstallare Ubuntu dalla chiavetta USB in modalità UEFI, per correggere il rilevamento IOMMU da parte del sistema operativo (il mio sistema era installato tramite la modalità "Legacy BIOS", ho pensato che questo potesse essere un motivo).

In precedenza, l'ho provato installando Ubuntu dalla chiavetta USB. Bene con Legacy, UEFI è sempre stato un problema - la mia tastiera / mouse / Wifi non funzionava correttamente (solo alimentazione) durante l'accesso al programma di installazione, oppure il programma di installazione non riusciva a caricare l'interfaccia utente con i messaggi nella console:

  • (…) device descriptor read/64, error -32 (per ogni dispositivo USB)
  • (…) unable to find a live medium containing a live file system(dopo 5-6 minuti di lettura dallo stick). Questo errore ha una soluzione alternativa con la modifica del tipo di chiavetta USB su "Force Hard Disk", ma l'avvio del sistema ha causato altri problemi in seguito dopo l'installazione.

Pensavo che i problemi provenissero da "Unetbootin" o "Startup Disk Creator" - non lo sono. Ho trascorso più di 2 ore a provare tutte le impostazioni nel BIOS (non ho IOMMU Controllero xHCI Handoffle mie impostazioni), ma l' unica cosa ha aiutato: aggiornare il BIOS alla versione più recente con il file ROM scaricato dal sito Web Asus per il mio modello di scheda madre. È facile come decomprimere e copiare il file ROM sulla chiavetta USB e usare “EZ Flash utility” (nel BIOS) per aggiornare il firmware.

In questo modo riparato tutti i tipi di errori che ho avuto; Sono stato in grado di installare e utilizzare Ubuntu in modalità UEFI. Inoltre, IOMMU viene ora rilevato da Ubuntu magicamente senza problemi. Ciò significa che i miei problemi sono stati causati da bug del firmware del BIOS relativi al supporto USB 2.0 / 3.0 e al supporto IOMMU. (se non hai bisogno di IOMMU, dovresti disabilitarlo nella sezione “Avanzate” perché non è una cosa comune).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.