Почему USB не работает в Linux, когда он работает в UEFI / BIOS?

31

Для справки я только что построил новую машину с современным оборудованием, включая:

  • AMD FX-8350
  • Gigabyte GA-990FXA-UD3 материнская плата
  • 16 ГБ ОЗУ
  • NVidia GTX 650 Ti
  • Кингстон SSD

Учитывая это, я пытался установить различные версии Linux на SSD и почти каждый раз встречался с ошибкой. Я попытался установить Arch, Debian stable, Debian sid и Ubuntu 12.10 с флэш-накопителя USB, но в то время как BIOS увидел USB-накопитель и начал загружаться с него, как только ОС попыталась перечислить USB-устройства, я потерял все функции USB (включая загрузочное устройство).

В конце концов я записал DVD и установил Ubuntu 12.10 на SSD. Следует отметить, что моя USB-клавиатура (и мышь) отлично работают в то время как в американском Megatrends UEFI / BIOS. Даже когда я в меню предустановки на Live Ubuntu DVD, клавиатура работает нормально.

Как только Linux загружается (Live DVD или SSD), я теряю все функции USB и могу перемещаться по ОС только с клавиатуры PS / 2.

В dmesg / syslog я вижу несколько строк о " failed to load microcode amd_ucode/microcode_amd_fam15h.bin", и я вижу, что USB-устройства не могут инициализироваться.

Если я это сделаю, lsusbто смогу увидеть все хост-контроллеры USB, но ни одно из устройств. Выполнение lspciпоказывает мне все оборудование, которое я ожидал. И делать lsmodя не вижу загруженных модулей USB ( usb_ehciнапример).

Я попытался передать noapicстроку загрузки ядра, и это не повлияло на эту проблему.

Материнская плата поддерживает USB 3.0, но все устройства, которые я подключил к обычным портам USB 2.0.

Я довольно озадачен тем, что может убивать / мешать USB (и моей встроенной сетевой карте) работать в Linux . Кажется, нет никаких проблем с любым из этих устройств, работающих в BIOS, и у меня нет доступной установки Windows для тестирования и проверки работоспособности.

Я уже однажды использовал RMA на материнской плате, но вторая имеет точно такое же поведение, так что я думаю, что могу смело исключить аппаратный сбой (поскольку поведение идентично, я не думаю, что странно, что я получил две идентично неисправные платы больше, чем вероятность того, что это проблема Linux).

Что еще я могу попытаться заставить работать USB (и в идеале мою сеть, но пока мы будем придерживаться USB)?

Редактировать № 1:

Поскольку у меня нет сети, я могу рассказать только интересные вещи dmesgотсюда.

Интересно, dmesgчто у меня есть 11 хост-контроллеров USB (OHCI, EHCI и xHCI). Он обнаруживает мои USB-устройства, а затем сразу выходит из строя следующим образом:

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

Это повторяет несколько раз, увеличивая число и пробуя другие контроллеры USB Host, пока не переключится на контроллеры OHCI, которые также отказывают, но имеют дополнительное сообщение:

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

Я думаю, что мои проблемы с сетью связаны с тем, что у меня не включен IPv6 на моем маршрутизаторе, и это, кажется, проблема

eth1: no IPv6 routers present

Изменить № 2:

lspci -vvvпоказывает, что мои сетевые адаптеры (как встроенные, так и расширения) являются Realtek Semiconductor (неудивительно); RTL8111 / 8168B и RTL8169 / 8110 соответственно. Мои USB-контроллеры - это Etron Technology EJ168 (xHCI) и AMD ATI SB7x0 / SB8x0 / SB9x0 (EHCI & OHCI)

Сейчас работает в Debian свистящих modprobeпоказывает usb_common, usbcore, xhci_hcd, ehci_hcd, и ohci_hcdвсе загружены и функционируют.

BrionS
источник
Сбой загрузки микрокода кажется своеобразным. Я думаю о том, что материнская плата еще не поддерживается или отсутствует пакет микрокода.
TNW
Похоже, что эта проблема может быть устранена ( butterflyofdream.wordpress.com/2012/09/10/… ), так как этот процессор давно отсутствует, и есть пакеты, которые обновляют микрокод. Однако мне интересно, как это помешает USB работать в Linux, когда USB работает в BIOS без проблем. Кроме того, пока я не смогу выяснить, почему сетевое устройство не подключается, я не смогу применить исправление (хотя карта расширения может позволить мне исключить это сегодня вечером).
BrionS
1
Я бы предпочел сказать, что это будет странно с противоположной стороны. BIOS, который должен поддерживать все на материнской плате, должен работать. Linux вроде нет. BIOS часто поддерживает устройства в упрощенном виде, например, VBE для видеокарты, хотя вы не хотели бы использовать их вместо обычных драйверов графического процессора.
TNW
Так есть ли у меня способ заставить Linux позволить BIOS управлять устройствами для USB и сетевых контроллеров до тех пор, пока они (лучше?) Не будут поддерживаться в ядре Linux?
BrionS
Я так не думаю. Дни, когда все устройства были доступны через BIOS, давно прошли. Тем не менее, я не могу заверить вас, что проблема связана с отсутствием драйверов. Нашли что-нибудь интересное dmesg, попробовали modprobeподключить USB-модули?
TNW

Ответы:

25

Я нашел ответ в этой теме ( http://ubuntuforums.org/showthread.php?t=2114055 ) на сайте ubuntuforums.org.

Кажется, что на более новых материнских платах Gigabyte (по крайней мере) есть опция BIOS, IOMMU Controllerкоторая по умолчанию отключена и не дает никакой подсказки или указания относительно ее предназначения.

Включение этого параметра и перезагрузка «волшебным образом» восстанавливают все мои проблемы с USB и сетью в 64-битной ОС Linux (не имеет значения, какая именно).

Я довольно шокирован и воодушевлен тем, что это был такой долгий поиск такого простого решения.

Спасибо всем за вашу помощь и предложения. Надеюсь, другие найдут это полезным.

Обновление: я просто хотел бы добавить, что мои текущие настройки BIOS также включают в себя включение передачи обслуживания XHCI и передачи обслуживания EHCI в дополнение к контроллеру IOMMU. Другие также упоминали об этом, и включение этих двух передач также позволяет моим портам USB 3.0 работать должным образом.

BrionS
источник
1
Я укажу, что для меня, хотя включение IOMMU работало для меня, оно деактивировало все мои внутренние порты USB 3. Кроме того, ранее у меня возникали некоторые проблемы с портом Ethernet, но при включении IOMMU эти проблемы были устранены.
Робби
Вы пробовали включить xHCI Handoff для исправления портов USB 3.0?
Стюарт П. Бентли
@ StuartP.Bentley да Настройки передачи обслуживания xHCI и eHCI включены, а также контроллер IOMMU. Это активирует мои порты USB 3.0, но по какой-то причине не позволяет моей клавиатуре USB работать в BIOS или на экранах grub - однако моя мышь USB работает (см. Рисунок). У меня есть вторая клавиатура в стиле PS / 2, подключенная исключительно для загрузки в BIOS.
Брайонс
Это еще не все. Если вы пройдете через все форумы по Ubuntu, вы обнаружите, что рекомендуется настройка загрузчика («iommu = soft») с возможностью IOMMU DIS . Мой GB 990FXA-UD3 по умолчанию включен, и я не могу использовать свой внешний USB3-концентратор. НИЖНЯЯ ЛИНИЯ: это может не решить вашу проблему. Если нет, продолжайте гуглить.
Брюс
Рекомендуется оставить эстафетную передачу обслуживания EHCI отключенной в BIOS для лучшей производительности с USB2.0.
23 марта
5

Я только что узнал с помощью GA-990FXA-UD7, что для правильной работы контроллеров USB 2.0 и USB 3.0 и встроенного контроллера Ethernet в Linux (я использую Mint 17.1) необходимы следующие настройки в BIOS:

  • передача обслуживания xHCI - включена
  • Передача обслуживания EHCI - включена
  • Контроллер IOMMU - включен

Не забудьте отключить UEFI и изменить все параметры загрузки на «Legacy Only».

Если вам действительно нужно загрузиться с жесткого диска емкостью> 2,2 ТБ, у вас может быть другая проблема.

Я использую 256 ГБ SSD для моего загрузочного диска и пару 3 ТБ жестких дисков в массиве RAID 1 (зеркальный), используя mdadm для моего / дома, и все работает хорошо.

Я довольно много работал с платами Gigabyte, я знаю, что платы 990FXA-UD5 и 990FXA-UD3 имеют очень похожий BIOS, так что, вероятно, то же самое применимо и к этим платам.

PracticalTech
источник
Я рад, что это работает для вас. У меня есть именно ваши настройки (256 ГБ SSD + зеркальные диски 3 ТБ для / u (/ home)). Мои порты USB3 работают, но концентратор USB3, отсоединенный от одного, не работает. (Ну, я могу использовать на нем флеш-накопитель, но не клавиатуру или мышь.)
Брюс
iommu=softв сочетании с xHCI + eHIC Handoff и контроллером IOMMU (все включено), без необходимости включать «Legacy Only». Arch Linux при полной загрузке, EFI и без проблем с корневым устройством iommu или usb3.
Взгляните на этот связанный ответ Askubuntu .
Пабло А
4

Как ни странно, несмотря на то, что у меня есть почти идентичные настройки (та же материнская плата, процессор FX8350), включение IOMMU для меня не имело никакого значения. Все еще нет USB, сети и т. Д.

Что же помощь, хотя, добавлял «IOMMU = мягкая» в командной строке ядра. Теперь все работает нормально (за исключением того, что по какой-то странной причине моя мышь Logitech Zone Touch Mouse не работает).

Рон Мюррей
источник
1
Они никогда не одинаковы. Даже различие в датах производства на несколько недель может означать новый источник для общего компонента материнской платы и / или ревизию superio. Изготовление печатных плат является теневым подвалом вычислений.
mikeserv
3

К вашему сведению, технические причины, по которым Linux не может использовать устройства «через» BIOS: после перехода ОС в «защищенный режим» (32-разрядный режим) или «длинный режим» (64-разрядный режим), он больше не может отправлять прерывания. в биос. В «реальном режиме» (16-разрядный, при загрузке) он может вызывать прерывания BIOS для чтения дисков, ввода с клавиатуры и т. Д.

Но у этого также есть недостатки. Во-первых, у вас даже нет мегабайта адресуемой памяти. Поэтому современные ОС переключаются из реального режима практически на первое место. (На самом деле, я считаю, что grub переключается в защищенный режим еще до того, как загружает ядро).

Более подробная информация: http://wiki.osdev.org/Real_Mode http://wiki.osdev.org/Protected_Mode

DimeCadmium
источник
2

У меня такой же процесс (но 8-ядерный), тот же MB (rev 3) и тот же объем оперативной памяти (Kingston)

Совет с IOMMU немного помог - все порты могут видеть USB-клавиатуру, монитор USB-концентратор и USB-адаптер (Realtek) Wi-Fi, но без флешки.

Кажется, что это решение помогло мне:

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

Вы увидите файл в формате 0000: 00: xx.x. Выполните следующую команду:

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

Замените xx.x числами, отображаемыми в вашем файле. Следует отключить ehci_hcd.

Теперь вы можете использовать следующий скрипт для отключения 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/

Chek
источник
2
Было бы более полезно, если бы вы предоставили здесь решение в тексте и использовали ссылки только для справочной информации и несущественных деталей. Без этого, как только ваша ссылка станет недействительной, ваш ответ не будет иметь значения.
Антон
Как один из пользователей прокомментировал в ссылке, которую вы предоставили: «Это НЕ исправление. Это означает, что вы не используете свой диск на полной скорости. Это все равно, что наложить повязку на отрезанную конечность».
энтузиастик
2

Эти шаги работали для меня с GIGABYTE 970A-DS3P и AMD-FX-8320 под управлением Ubuntu 15.04

  • передача обслуживания xHCI - включена
  • Передача обслуживания EHCI - включена
  • Контроллер IOMMU - включен
  • UEFI - Отключено
  • Все варианты загрузки - Legacy Only
RVR
источник
2

У меня тот же FX8350, работающий на Gigabyte 990FXA-UD3 с использованием OpenSuse 13.1. Решение, которое работало для меня, состояло в том, чтобы отредактировать загрузчик, используя YAST, выбор по умолчанию (или выбор, который вы используете для загрузки OpenSuse 13.1 в моем случае), «iommu = pt» после «тихого показа».

Например:

"резюме = / dev / disk / by-id / ata-Hitachi_HDS721010CLA332_JP2921HQ1076NA-part2 splash = тихие тихие показы iommu = pt"

Теперь все мои USB-порты 2.0 и 3.0 работают, и мои интернет-сети тоже работают! Также убедитесь, что IOMMU включен в BIOS.

dipio
источник
1

Вчера у меня возникла эта проблема при установке Ubuntu на мою материнскую плату ASUSTek M5A99X. Моя цель состояла в том, чтобы переустановить Ubuntu с USB-накопителя в режиме UEFI, чтобы исправить обнаружение IOMMU операционной системой (моя система была установлена ​​через режим «Legacy BIOS», я подумал, что это может быть причиной).

Ранее я пробовал это, установив Ubuntu с флешки. Хорошо с Legacy, UEFI всегда был проблемой - либо моя клавиатура / мышь / Wifi не работала должным образом (только питание) при входе в установщик, либо установщик не мог загрузить интерфейс с сообщениями в консоли:

  • (…) device descriptor read/64, error -32 (для каждого USB-устройства)
  • (…) unable to find a live medium containing a live file system(через 5-6 минут чтения с флешки). Эта ошибка имеет обходной путь с изменением типа USB-накопителя на «Force Hard Disk», но загрузка системы вызвала другие проблемы позже после установки.

Я думал, что проблемы связаны с «Unetbootin» или «Startup Disk Creator» - это не так. Потратил более 2 часов на то, чтобы попробовать все настройки в BIOS (у меня их нет IOMMU Controllerили xHCI Handoffнастройки у меня), но помогло только одно - обновление BIOS до последней версии с файлом ROM, загруженным с веб-сайта Asus для моей модели материнской платы. Это просто, как разархивировать и скопировать файл ROM на USB-накопитель и использовать «EZ Flash утилиту» (в BIOS) для прошивки прошивки.

Это исправило все ошибки, которые у меня были; Я смог установить и использовать Ubuntu в режиме UEFI. Более того, IOMMU теперь магически обнаруживается Ubuntu без проблем. Это означает, что мои проблемы были вызваны ошибками прошивки BIOS, связанными с поддержкой USB 2.0 / 3.0 и поддержкой IOMMU. (если вам не нужен IOMMU, вы должны отключить это в разделе «Дополнительно», потому что это не обычное дело).

Кролл
источник