Чому 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.