Чому USB не працює в Linux, коли він працює в UEFI / BIOS?


31

Щойно я створив нову машину із сучасним обладнанням, включаючи:

  • AMD FX-8350
  • Gigabyte GA-990FXA-UD3 материнська плата
  • 16 Гб оперативної пам’яті
  • NVidia GTX 650 Ti
  • Kingston SSD

Враховуючи це, я намагався встановити різні версії Linux на SSD, і щоразу траплявся з помилкою. Я спробував встановити Arch, Debian стабільний, Debian sid та Ubuntu 12.10 з USB-накопичувача, але поки BIOS побачив USB-накопичувач і почав завантажуватися з нього, як тільки ОС намагалася перерахувати USB-пристрої, я втратила всю функціональність USB (включаючи завантажувальний пристрій).

Врешті я записав DVD і встановив Ubuntu 12.10 на SSD. Слід зазначити, що моя клавіатура USB (і миша) відмінно працюють, перебуваючи в американських мегатрендах UEFI / BIOS. Навіть коли я перебуваю в меню перед встановленням на DVD Ubuntu Live, клавіатура працює чудово.

Як тільки Linux завантажиться (або в режимі Live DVD, або з SSD), я втрачаю всі функції USB і можу орієнтуватися в ОС лише за допомогою клавіатури PS / 2.

Що я бачу в dmesg / syslog - це кілька рядків про " failed to load microcode amd_ucode/microcode_amd_fam15h.bin", і я бачу, що USB-пристрої не можуть ініціалізуватися.

Якщо я це зробити, lsusbя можу побачити всі хост-контролери USB, але жоден із пристроїв. Я показую lspciмені все обладнання, яке я очікував. І роблячи lsmodI, я не бачу завантажених 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все завантажені і функціонують.


Збій завантаження мікрокоду здається своєрідним. Я думаю про те, що материнська плата ще не підтримується або відсутній пакет мікрокодів.
TNW

Здається, що ця проблема може бути усунена ( butterflyofdream.wordpress.com/2012/09/10/… ), оскільки цей процесор вже деякий час не працює, і є пакети, що оновлюють мікрокод. Однак мені цікаво, як це не дозволить USB працювати в Linux, коли USB працює в BIOS без проблем. Крім того, поки я не можу з’ясувати, чому мережевий пристрій не підключається, я не зможу застосувати патч (хоча картка надбудови може дозволити мені виправити це сьогодні ввечері).
BrionS

1
Я скоріше скажу, що це було б дивно навпаки. BIOS, який повинен підтримувати все на материнській платі , повинен працювати. Linux такого типу немає. BIOS часто підтримує пристрої спрощеним способом, наприклад VBE для відеокарти, хоча ви не хочете використовувати їх замість них або звичайні драйвери GPU.
TNW

Тож чи є для мене спосіб змусити Linux дозволити BIOS керувати пристроями для USB та мережевих контролерів до тих пір, поки вони (краще?) Підтримуються в ядрі Linux?
BrionS

Я не думаю, що так. Часи, коли всі пристрої отримували доступ через BIOS, давно минули. Однак я не можу запевнити, що проблема пов’язана з відсутністю драйверів. Ви знайшли щось цікаве dmesg, пробували modprobeUSB-модулі?
TNW

Відповіді:


25

Я знайшов відповідь з цієї теми ( http://ubuntuforums.org/showthread.php?t=2114055 ) на сайті ubuntuforums.org.

Здається, що з новими гігабайтними платами (принаймні) є опція BIOS, IOMMU Controllerяка за замовчуванням вимкнена і не дає ніякого підказки чи вказівки для чого вона потрібна .

Увімкнення цього параметра та перезавантаження "магічним" відновлює всі мої проблеми з USB та мережами в 64-бітній ОС Linux (не важливо, яка з них).

Я досить шокований і піднесений, що це був такий довгий пошук такого простого виправлення.

Дякуємо всім за допомогу та пропозиції. Сподіваємось, інші знайдуть це корисним.

Оновлення: Я хотів би лише додати, що мої поточні налаштування BIOS також включають включення XHCI Handoff та EHCI Handoff на додаток до контролера IOMMU. Інші згадали про це також, і якщо ці два передачі даних також дозволяють моїм портам USB 3.0 функціонувати так, як очікувалося.


1
Я зазначу, що для мене, навіть якщо ввімкнення IOMMU працювало на мене, воно деактивувало всі мої внутрішні порти USB 3. Крім того, раніше у мене виникли деякі проблеми з портом ethernet, але я звертався до IOMMU для вирішення цих проблем.
Роббі

Ви намагались увімкнути xHCI Handoff виправити порти USB 3.0?
Стюарт П. Бентлі

@ StuartP.Bentley так, параметри xHCI та eHCI Handoff включені, а також контролер IOMMU. Це дозволяє включити мої порти USB 3.0, але з будь-якої причини не дозволяє моїй USB-клавіатурі працювати на екранах BIOS або grub - однак моя USB-миша робить (іде на малюнок). У мене підключена друга клавіатура стилю PS / 2 виключно для завантаження в BIOS.
BrionS

Є більше. Якщо ви проходите через усі форуми ubuntu, ви виявите, що рекомендується налаштування завантажувача ("iommu = soft") з можливістю IOMMU DIS . Мої GB 990FXA-UD3 за замовчуванням увімкнено, і я не міг використовувати зовнішній концентратор USB3. LOT BOTTOM: це може не вирішити вашу проблему. Якщо ні, продовжуйте гугліти.
Брюс

Для кращої роботи з USB2.0 рекомендується залишити EHCI вручну в BIOS.
Марк.2377

5

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

  • xHCI передача - увімкнено
  • Обмін EHCI - увімкнено
  • Контролер IOMMU - увімкнено

Не забудьте відключити UEFI та змінити всі параметри завантаження на "Тільки спадщина".

Якщо вам дійсно потрібно завантажуватися з жорсткого диска ємністю> 2,2 ТБ, у вас може виникнути інша проблема на руках.

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

Попрацювавши з гігабайтними платами досить багато, я знаю, що плати 990FXA-UD5 та 990FXA-UD3 мають дуже схожий BIOS, тому, ймовірно, те саме стосуватиметься і цих плат.


Я радий, що це працює на тебе. У мене саме ваша установка (256 Гб SSD + дзеркальні 3 ТБ диски для / u (/ home)). Мої порти USB3 працюють, але концентратор USB3 відключений від цього не працює. (Ну, я можу використовувати на ньому палець, але не клавіатуру чи мишку.)
Брюс

iommu=softспільно з xHCI + eHIC Handoff та IOMMU-контролером (всі включені), не вмикаючи "Legacy Only". Arch Linux на повній швидкості завантаження, EFI та без проблем з root-пристроєм iommu чи usb3.


4

Як не дивно, навіть якщо я маю майже однакову настройку (та сама материнська плата, процесор FX8350), що дозволяє IOMMU не змінити для мене ніяких змін. Ще немає USB, мереж тощо.

Що ж допомогу, хоча, додавав «IOMMU = м'яка» в командному рядку ядра. Зараз все працює нормально (за винятком того, що з якихось дивних причин моя Logitech Zone Touch Mouse не працює).


1
Вони ніколи не однакові. Навіть лише кілька тижневих різниць у датах виготовлення може означати нове джерело для загального компонента материнської плати та / або перегляду Superio. Виробництво друкованих плат - це тінистий підводний обчислювач.
mikeserv

3

FYI, технічні причини, чому Linux не може використовувати пристрої "через" BIOS: після переходу ОС у "захищений режим" (32-розрядний) або "довгий режим" (64-бітний), він більше не може надсилати переривання до BIOS. У "реальному режимі" (16-бітний, під час завантаження) він може викликати переривання BIOS для читання дисків, введення з клавіатури тощо.

Але це також має і мінуси. Для одного, у вас навіть немає мегабайт адресируемой пам'яті. Тож сучасний ОС вимикається з реального режиму майже першим ділом. (Насправді, я вважаю, grub переходить у захищений режим, перш ніж він навіть завантажить ядро).

Детальніше: http://wiki.osdev.org/Real_Mode http://wiki.osdev.org/Protected_Mode


2

У мене однаковий процесор (але 8-ядерний) той же МБ (rev 3), стільки ж оперативної пам’яті (Kingston)

Порада з IOMMU допомогла трохи - усі порти можуть бачити usb-клавіатуру, usb-концентратор монітора та wifi-адаптер usb (Realtek), але флешку.

Здається, що це рішення допомогло мені:

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/


2
Було б корисніше, якби ви надали тут рішення в тексті і використовували лише посилання для довідкової інформації та несуттєвих деталей. Без цього, як тільки ваше посилання стає недійсним, ваша відповідь не має значення.
Антон

Як і один із користувачів, коментуючи посилання, яке ви надали, "Це НЕ виправлення. Це означає, що ви не користуєтесь своїм приводом на повній швидкості. Це як надягання стрічки на відірвану кінцівку".
enthusiasticgeek

2

Ці кроки працювали для мене з GIGABYTE 970A-DS3P та AMD-FX-8320 під керуванням Ubuntu 15.04

  • xHCI передача - увімкнено
  • Обмін EHCI - увімкнено
  • Контролер IOMMU - увімкнено
  • UEFI - інваліди
  • Усі параметри завантаження - Тільки спадщина

2

У мене той самий FX8350 працює на Gigabyte 990FXA-UD3 за допомогою OpenSuse 13.1. Для мене працювало рішення редагувати завантажувач за допомогою YAST, вибір за замовчуванням (або вибір, який ви використовуєте для завантаження OpenSuse 13.1 в моєму випадку), "iommu = pt" після "тихих знімків".

Наприклад:

"відновити = / dev / disk / by-id / ata-Hitachi_HDS721010CLA332_JP2921HQ1076NA-part2 сплеск = тихий тихий знімок iommu = pt"

Зараз усі мої порти USB 2.0 і 3.0 працюють, і моя мережа Інтернет також працює !. Також переконайтеся, що IOMMU увімкнено в BIOS.


1

Вчора у мене виникла ця проблема під час встановлення Ubuntu на моїй материнській платі ASUSTek M5A99X. Моєю метою було встановити Ubuntu з USB-накопичувача в режимі UEFI, виправити виявлення IOMMU ОС (моя система була встановлена ​​через режим "Legacy BIOS", я вважав, що це може бути причиною).

Раніше я спробував це, встановивши Ubuntu з USB-накопичувача. Відмінно від Legacy, UEFI завжди був проблемою - або моя клавіатура / миша / Wi-Fi не працювала належним чином (лише живлення) під час входу в інсталятор, або інсталятор не завантажував інтерфейс користувача повідомленнями в консолі:

  • (…) device descriptor read/64, error -32 (для кожного пристрою USB)
  • (…) unable to find a live medium containing a live file system(через 5-6 хвилин читання з палички). Ця помилка вирішила зміну типу USB-накопичувача на "Форс жорсткого диска", але завантажувальна система спричинила інші проблеми пізніше після встановлення.

Я думав, що проблеми пов'язані з “Unetbootin” або “Creator Disk Creator” - вони не є. Випробувавши всі налаштування в BIOS (у мене немає IOMMU Controllerабо xHCI Handoffналаштувань у мене) витрачено більше 2 годин , але єдине, що допомогло - оновлення BIOS до новітньої версії з файлом ROM, завантаженим з веб-сайту Asus для моєї моделі материнської плати. Це легко, як розпаковувати та копіювати файл ROM на USB-накопичувач, а також використовувати «Утиліту EZ Flash» (в BIOS) для прошивки мікропрограмного забезпечення.

Роблячи це, виправляли всі помилки, які у мене були; Мені вдалося встановити та використовувати Ubuntu в режимі UEFI. Більше того, IOMMU тепер Ubuntu виявляється магічно без проблем. Це означає, що мої проблеми були викликані помилками мікропрограмного забезпечення BIOS, пов'язаними з підтримкою USB 2.0 / 3.0 та підтримкою IOMMU. (якщо вам не потрібен IOMMU, слід вимкнути це в розділі "Додатково", оскільки це не звичайна річ).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.