Dlaczego USB nie działa w systemie Linux, gdy działa w UEFI / BIOS?


31

W tle właśnie zbudowałem nową maszynę z nowoczesnym sprzętem, w tym:

  • AMD FX-8350
  • Płyta główna Gigabyte GA-990FXA-UD3
  • 16 GB pamięci RAM
  • NVidia GTX 650 Ti
  • Kingston SSD

Biorąc to pod uwagę, próbowałem zainstalować różne wersje Linuksa na dysku SSD i prawie zawsze napotykałem błąd. Próbowałem zainstalować Arch, Debian stable, Debian sid i Ubuntu 12.10 z napędu USB, ale kiedy BIOS zobaczył napęd USB i zaczął się z niego uruchamiać, gdy tylko system operacyjny próbował wyliczyć urządzenia USB, straciłem całą funkcjonalność USB (w tym urządzenie rozruchowe).

W końcu nagrałem płytę DVD i zainstalowałem Ubuntu 12.10 na dysku SSD. Należy zauważyć, że moja klawiatura USB (i mysz) działają dobrze podczas pracy w amerykańskim systemie UEFI / BIOS w amerykańskim Megatrends. Nawet gdy jestem w menu przedinstalacyjnym na Live Ubuntu DVD, klawiatura działa dobrze.

Zaraz po uruchomieniu Linuxa (Live DVD lub z dysku SSD) tracę całą funkcjonalność USB i mogę nawigować po systemie operacyjnym tylko za pomocą klawiatury PS / 2.

To, co widzę w dmesg / syslog, to kilka wierszy o „ failed to load microcode amd_ucode/microcode_amd_fam15h.bin” i widzę, że urządzenia USB nie inicjują się.

Jeśli to zrobię lsusb, mogę zobaczyć wszystkie kontrolery hosta USB, ale żadne z urządzeń. Wykonanie lspcipokazuje mi cały sprzęt, którego oczekiwałem. I robiąc lsmodnie widzę załadowanych modułów USB ( usb_ehcina przykład).

Próbowałem przekazać noapicdo łańcucha rozruchowego jądra i nie miało to wpływu na ten problem.

Płyta główna obsługuje USB 3.0, ale wszystkie urządzenia, które podłączyłem do normalnych portów USB 2.0.

Jestem raczej zaskoczony tym, co może zabijać / uniemożliwiać USB (i mojej wbudowanej karcie sieciowej) działanie w systemie Linux . Wygląda na to, że żaden z tych urządzeń nie działa w systemie BIOS i nie mam dostępnej instalacji systemu Windows do przetestowania i sprawdzenia, czy działa.

Już raz przesłałem płytę główną do RMA, ale druga ma dokładnie takie samo zachowanie, więc myślę, że mogę bezpiecznie wykluczyć awarię sprzętu (ponieważ zachowanie jest identyczne, nie wydaje mi się, że dziwne jest, że dostaję dwie identycznie uszkodzone płyty główne są większe niż prawdopodobieństwo, że jest to problem z Linuksem).

Co jeszcze mogę spróbować, aby USB (a najlepiej moja sieć, ale na razie pozostaniemy przy USB) działał?

Edycja nr 1:

Ponieważ nie mam sieci, mogę dmesgstąd odnieść tylko interesujące fragmenty .

Zainteresowanych dmesgwidzę, że mam 11 kontrolerów hosta USB (OHCI, EHCI i xHCI). Wykrywa moje urządzenia USB, a następnie natychmiast ulega awarii w następujący sposób:

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

To się powtarza kilkakrotnie, zwiększając liczbę i próbując innych kontrolerów hosta USB, aż wróci do kontrolerów OHCI, które również zawodzą, ale mają dodatkowy komunikat:

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

Myślę, że moje problemy z siecią związane są z tym, że nie mam włączonej IPv6 na moim routerze i wydaje się, że to problem

eth1: no IPv6 routers present

Edytuj # 2:

lspci -vvvpokazuje, że moje karty sieciowe (zarówno wbudowane, jak i rozszerzające) to Realtek Semiconductor (nic dziwnego); RTL8111 / 8168B i RTL8169 / 8110 odpowiednio. Moje kontrolery USB to Etron Technology EJ168 (xHCI) i AMD nee ATI SB7x0 / SB8x0 / SB9x0 (EHCI i OHCI)

Teraz systemu Debian wheezy modprobepokazy usb_common, usbcore, xhci_hcd, ehci_hcd, i ohci_hcdwszystko załadowany i działa.


Awaria ładowania mikrokodu wydaje się osobliwa. Myślę o tym, że płyta główna nie jest jeszcze obsługiwana lub brakuje pakietu mikrokodu.
TNW

Wygląda na to, że ten problem może zniknąć ( butterflyofdream.wordpress.com/2012/09/10/... ), ponieważ ten procesor jest już wyłączony i istnieją pakiety, które aktualizują mikrokod. Zastanawiam się jednak, jak to uniemożliwiłoby USB działanie w systemie Linux, gdy USB działa w systemie BIOS bez problemu. Ponadto, dopóki nie dowiem się, dlaczego urządzenie sieciowe się nie łączy, nie będę mógł zastosować poprawki (chociaż karta dodatkowa może pozwolić mi wykluczyć to dziś wieczorem).
BrionS

1
Wolałbym powiedzieć, że byłoby dziwnie odwrotnie. BIOS, który ma obsługiwać wszystko na płycie głównej, musi działać. Linux nie. BIOS często obsługuje urządzenia w uproszczony sposób, na przykład VBE dla karty graficznej - podczas gdy nie chcesz ich używać zamiast zwykłych sterowników GPU.
TNW

Czy jest więc sposób, aby zmusić Linuksa, aby BIOS mógł zarządzać urządzeniami USB i kontrolerów sieciowych, dopóki nie będą one (lepiej?) Obsługiwane w jądrze Linuksa?
BrionS

Nie wydaje mi się Dawno minęły czasy, kiedy wszystkie urządzenia były dostępne przez BIOS. Nie mogę jednak zapewnić, że problem wynika z braku sterowników. Czy znalazłeś coś interesującego dmesg, próbowałeś modprobemodułów związanych z USB?
TNW

Odpowiedzi:


25

Znalazłem odpowiedź z tego wątku ( http://ubuntuforums.org/showthread.php?t=2114055 ) na stronie ubuntuforums.org.

Wydaje się, że w przypadku nowszych płyt głównych Gigabyte (przynajmniej) istnieje opcja o nazwie BIOS, IOMMU Controllerktóra jest domyślnie wyłączona i nie daje żadnych wskazówek ani wskazówek co do tego, do czego służy.

Włączenie tego ustawienia i ponowne „magiczne” ponowne uruchomienie przywraca wszystkie moje problemy związane z USB i siecią w 64-bitowym systemie operacyjnym Linux (nieważne, który z nich).

Jestem raczej zszokowany i podekscytowany, że tak długo szukałem tak prostej poprawki.

Dziękujemy wszystkim za pomoc i sugestie. Mam nadzieję, że inni uznają to za pomocne.

Aktualizacja: Chciałbym tylko dodać, że moje obecne ustawienia BIOS-u obejmują także włączenie XHCI Handoff i EHCI Handoff oprócz kontrolera IOMMU. Inni też o tym wspominali, a włączenie tych dwóch przełączeń pozwala również moim portom USB 3.0 działać zgodnie z oczekiwaniami.


1
Zwrócę uwagę, że chociaż włączenie IOMMU działało dla mnie, dezaktywowało wszystkie moje wewnętrzne porty USB 3. Ponadto miałem wcześniej pewne problemy z portem Ethernet, ale włączenie IOMMU w celu rozwiązania tych problemów.
Robbie

Czy próbowałeś włączyć xHCI Handoff, aby naprawić porty USB 3.0?
Stuart P. Bentley,

@ StuartP. Bentley tak Ustawienia XHCI i eHCI Handoff są włączone, podobnie jak kontroler IOMMU. To włącza moje porty USB 3.0, ale z jakiegokolwiek powodu nie pozwala mojej klawiaturze USB na pracę w BIOS-ie lub grub ekranach - jednak moja mysz USB tak (patrz rysunek). Mam drugą klawiaturę w stylu PS / 2 podłączoną wyłącznie do uruchamiania systemu BIOS.
BrionS

To coś więcej. Jeśli przejdziesz przez wszystkie fora ubuntu, okaże się, że zalecane jest ustawienie modułu ładującego („iommu = soft”) przy włączonym IOMMU DIS . Mój GB 990FXA-UD3 domyślnie jest włączony i nie mogłem używać mojego zewnętrznego koncentratora USB3. LINIA DOLNA: może to nie rozwiązać problemu. Jeśli nie, dalej googluj.
Bruce

Zaleca się pozostawienie wyłączonego przełączania EHCI w systemie BIOS, aby uzyskać najlepszą wydajność dzięki USB 2.0.
Marc.2377

5

Właśnie nauczyłem się z moim GA-990FXA-UD7, że zarówno kontrolery USB 2.0 i USB 3.0, jak i wbudowany kontroler Ethernet działają poprawnie w systemie Linux (używam wersji Mint 17.1), wymagały następujących ustawień w systemie BIOS:

  • Przekazywanie xHCI - włączone
  • Przekazywanie EHCI - włączone
  • Kontroler IOMMU - włączony

Nie zapomnij wyłączyć UEFI i zmienić wszystkie opcje rozruchu na „Tylko starsze”.

Jeśli naprawdę chcesz uruchomić z dysku twardego o pojemności> 2,2 TB, możesz mieć inny problem.

Używam dysku SSD 256 GB do napędu rozruchowego i pary dysków HDD o pojemności 3 TB w macierzy RAID 1 (dublowanej) przy użyciu mdadm dla mojego / home i wszystko działa dobrze.

Po dość dużej pracy z płytami Gigabyte wiem, że płyty 990FXA-UD5 i 990FXA-UD3 mają bardzo podobny BIOS, więc prawdopodobnie to samo będzie dotyczyć również tych płyt.


Cieszę się, że to działa dla ciebie. Mam dokładnie twoją konfigurację (dysk SSD 256 GB + dublowane dyski 3 TB dla / u (/ home)). Moje porty USB3 działają, ale hub USB3 zawieszony na jednym z nich nie działa. (Cóż, mogę użyć na nim napędu kciukiem, ale nie klawiatury ani myszy.)
Bruce

iommu=softw połączeniu z przekazywaniem xHCI + eHIC i kontrolerem IOMMU (wszystkie włączone), bez konieczności włączania opcji „Tylko starsze”. Archuj Linux przy pełnej prędkości rozruchu, EFI i bez problemów z urządzeniem root iommu lub usb3.


4

Co dziwne, mimo że mam prawie identyczną konfigurację (ta sama płyta główna, procesor FX8350), włączenie IOMMU nie zrobiło dla mnie żadnej różnicy. Wciąż brak USB, sieci itp.

Co zrobił pomoc, choć dodawał „IOMMU = miękki” do linii poleceń jądra. Teraz wszystko działa dobrze (poza tym, że z jakiegoś dziwnego powodu moja mysz Logitech Zone Touch Mouse nie działa).


1
Nigdy nie są takie same. Nawet kilkutygodniowa różnica w terminach produkcji może oznaczać nowe źródło wspólnego komponentu płyty głównej i / lub wersji superio. Produkcja obwodów drukowanych jest podejrzanym podwalinem komputerów.
mikeserv

3

Do Twojej wiadomości, techniczne powody, dla których Linux nie może używać urządzeń „przez” BIOS: po przejściu systemu operacyjnego na „tryb chroniony” (32-bit) lub „tryb długi” (64-bit), nie może już wysyłać przerwań do BIOS-u. W „trybie rzeczywistym” (16-bit, podczas rozruchu) może wywoływać przerwania systemu BIOS w celu odczytu dysków, wprowadzania danych z klawiatury itp.

Ale ma też swoje wady. Po pierwsze, nie masz nawet megabajta pamięci adresowalnej. Dlatego współczesne systemy operacyjne prawie całkowicie wyłączyły tryb rzeczywisty. (Właściwie uważam, że grub przełącza się w tryb chroniony, zanim jeszcze załaduje jądro).

Więcej informacji: http://wiki.osdev.org/Real_Mode http://wiki.osdev.org/Protected_Mode


2

Mam ten sam proc (ale 8-rdzeniowy) ten sam MB (rev 3) taką samą ilość pamięci RAM (Kingston)

Wskazówka z IOMMU trochę pomogła - wszystkie porty widzą klawiaturę USB, hub USB monitora i adapter WiFi USB (Realtek), ale nie ma dysku flash.

Wygląda na to, że to rozwiązanie pomogło mi:

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

Zobaczysz plik w formacie 0000: 00: xx.x. Wykonaj następujące polecenie:

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

Zamień xx.x na liczby wyświetlane w pliku. Powinno to wyłączyć ehci_hcd.

Możesz teraz użyć następującego skryptu, aby wyłączyć 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-disablowanie-ehci_hcd/


2
Byłoby bardziej pomocne, gdybyś podał rozwiązanie w tekście i używasz tylko linków do informacji w tle i nieistotnych szczegółów. Bez tego, gdy link stanie się nieważny, twoja odpowiedź nie będzie miała wartości.
Anthon

Tak jak jeden z użytkowników skomentował podany link „To NIE jest poprawka. Oznacza to, że nie używasz napędu z pełną prędkością. To jest jak nakładanie opaski na odciętą kończynę”.
entuzjastyczny

2

Te kroki działały dla mnie z GIGABYTE 970A-DS3P i AMD-FX-8320 z Ubuntu 15.04

  • Przekazywanie xHCI - włączone
  • Przekazywanie EHCI - włączone
  • Kontroler IOMMU - włączony
  • UEFI - wyłączone
  • Wszystkie opcje rozruchu - tylko starsze wersje

2

Mam ten sam FX8350 działający na Gigabyte 990FXA-UD3 przy użyciu OpenSuse 13.1. Rozwiązaniem, które działało dla mnie, było edytowanie bootloadera za pomocą YAST, domyślnego wyboru (lub wyboru, którego używasz do załadowania OpenSuse 13.1 w moim przypadku), „iommu = pt” po „cichym showopts”.

Na przykład:

„resume = / dev / disk / by-id / ata-Hitachi_HDS721010CLA332_JP2921HQ1076NA-part2 splash = cichy cichy showopts iommu = pt”

Teraz działają wszystkie moje porty USB 2.0 i 3.0, a także działa moja sieć internetowa! Upewnij się również, że IOMMU jest włączony w systemie BIOS.


1

Wczoraj dostałem ten problem podczas instalacji Ubuntu na mojej płycie głównej ASUSTek M5A99X. Moim celem była ponowna instalacja Ubuntu z pamięci USB w trybie UEFI, aby naprawić wykrywanie IOMMU przez system operacyjny (mój system został zainstalowany w trybie „Legacy BIOS”, pomyślałem, że może to być powód).

Wcześniej próbowałem tego, instalując Ubuntu z pamięci USB. Dobrze ze Starszą wersją, UEFI zawsze stanowiło problem - albo moja klawiatura / mysz / Wi-Fi nie działała poprawnie (tylko zasilanie) podczas wchodzenia do instalatora, lub instalator nie ładował interfejsu użytkownika z komunikatami w konsoli:

  • (…) device descriptor read/64, error -32 (dla każdego urządzenia USB)
  • (…) unable to find a live medium containing a live file system(po 5-6 minutach czytania z patyka). Ten błąd ma obejście polegające na zmianie typu pamięci USB na „Force Hard Disk”, ale system rozruchowy spowodował inne problemy później po instalacji.

Myślałem, że problemy pochodzą z „Unetbootin” lub „Startup Disk Creator” - nie są. Spędziłem ponad 2 godziny na wypróbowaniu wszystkich ustawień w systemie BIOS (nie mam IOMMU Controllerlub xHCI Handoffustawienia w moich), ale jedyna rzecz pomogła - uaktualnienie systemu BIOS do najnowszej wersji z plikiem ROM pobranym z witryny Asus dla mojego modelu płyty głównej. Jest to tak łatwe, jak rozpakowanie i skopiowanie pliku ROM na pamięć USB oraz użycie „EZ Flash Utility” (w systemie BIOS) do flashowania oprogramowania układowego.

W ten sposób naprawiłem wszelkiego rodzaju błędy, które miałem; Byłem w stanie zainstalować i używać Ubuntu w trybie UEFI. Co więcej, IOMMU jest teraz wykrywany przez Ubuntu magicznie bez żadnych problemów. Oznacza to, że moje problemy były spowodowane przez błędy oprogramowania układowego BIOS związane z obsługą USB 2.0 / 3.0 i obsługą IOMMU. (jeśli nie potrzebujesz IOMMU, powinieneś wyłączyć to w sekcji „Zaawansowane”, ponieważ nie jest to powszechne).

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.