当USB在UEFI / BIOS中工作时,为什么USB在Linux中不工作?


31

作为背景,我刚刚用现代硬件制造了一台新机器,包括:

  • AMD FX-8350
  • 技嘉GA-990FXA-UD3主板
  • 16GB RAM
  • 英伟达GTX 650 Ti
  • 金士顿固态硬盘

鉴于此,我尝试在SSD上安装各种版本的Linux,几乎每次都遇到失败。我尝试从USB拇指驱动器安装Arch,Debian稳定版,Debian sid和Ubuntu 12.10,但是在BIOS看到USB驱动器并开始从中引导时,一旦操作系统尝试枚举USB设备,我就失去了所有USB功能(包括引导设备)。

最终,我刻录了DVD并将Ubuntu 12.10安装到SSD上。应该注意的是,在American Megatrends UEFI / BIOS中,我的USB键盘(和鼠标)工作正常。即使当我进入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端口。

我对在Linux中使用 USB(以及我的板载网卡)会被杀死/阻止的事情感到困惑。这些设备在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 nee ATI SB7x0 / SB8x0 / SB9x0(EHCI&OHCI)

现在运行Debian喘息modprobe显示usb_commonusbcorexhci_hcdehci_hcd,和ohci_hcd所有的加载和运行。


加载微码的失败似​​乎很奇怪。我正在考虑不支持主板或缺少微代码包。
TNW

似乎该问题可能会消失(butterflyofdream.wordpress.com/2012/09/10/…),因为此CPU已经停产了一段时间,并且有用于更新微码的软件包。但是,我想知道当USB在BIOS中正常工作时,如何防止USB在Linux中工作。另外,直到我弄清楚为什么网络设备无法连接为止,我将无法应用补丁(尽管附加卡可能会让我今晚无法使用此补丁)。
BrionS 2013年

1
我宁愿说相反的做法也很奇怪。应该支持主板所有功能的BIOS 必须正常工作。Linux则没有。BIOS通常以简化的方式支持设备,例如用于图形卡的VBE-而您不希望使用它们代替常规的GPU驱动程序。
TNW

那么,有没有办法让我强迫Linux让BIOS管理USB和网络控制器的设备,直到Linux内核支持它们(更好?)?
BrionS 2013年

我不这么认为。通过BIOS访问所有设备的日子早已一去不复返了。但是,我不能向您保证问题是由于缺少驱动程序造成的。您在dmesg尝试与modprobeUSB相关的模块中发现了什么有趣的东西吗?
TNW

Answers:


25

我在ubuntuforums.org上找到了该线程(http://ubuntuforums.org/showthread.php?t=2114055)的答案。

似乎(至少)在较新的技嘉主板上,有一个BIOS选项称为IOMMU Controller,默认情况下处于禁用状态,并且不提供任何提示或指示。

启用此设置并“神奇地”重新启动,可以在64位Linux操作系统中恢复所有USB和网络问题(与哪一个无关)。

对于如此简单的解决方案进行了如此长时间的搜索,我感到非常震惊和欣喜。

感谢大家的帮助和建议。希望其他人会对此有所帮助。

更新:我想补充一点,除了IOMMU Controller,我当前的BIOS设置还包括启用XHCI切换和EHCI切换。其他人也提到了这一点,启用这两个切换也使我的USB 3.0端口能够按预期运行。


1
我要指出的是,即使对我来说,打开IOMMU仍然有效,但它会停用所有内部USB 3端口。另外,我以前在以太网端口上遇到过一些问题,但是将IOMMU修复了这些问题。
罗比

您是否尝试启用xHCI Handoff来修复USB 3.0端口?
Stuart P. Bentley's

@ StuartP.Bentley是,已启用xHCI和eHCI切换设置以及IOMMU Controller。这确实启用了我的USB 3.0端口,但是由于任何原因都无法使我的USB键盘在BIOS或grub屏幕中工作-但是我的USB鼠标却可以(如图)。我还有第二个PS / 2样式键盘,仅用于引导进入BIOS。
BrionS '16

还有更多。如果遍历所有ubuntu论坛,则会发现建议启用IOMMU DIS的引导加载程序设置(“ iommu = soft”)。我的GB 990FXA-UD3默认启用,并且我无法使用外部USB3集线器。底线:这可能无法解决您的问题。如果没有,请继续使用谷歌搜索。
2016年

建议在BIOS中禁用EHCI切换功能,以实现USB2.0的最佳性能。
Marc.2377

5

我刚刚通过GA-990FXA-UD7了解到,要使USB 2.0和USB 3.0控制器以及板载以太网控制器都能在Linux(我使用的是Mint 17.1)上正常工作,它需要在BIOS中进行以下设置:

  • xHCI切换-已启用
  • EHCI切换-已启用
  • IOMMU控制器-已启用

不要忘记禁用UEFI并将所有启动选项更改为“仅旧版”。

如果您确实需要从容量大于2.2TB的HDD进行引导,则可能会遇到其他问题。

我正在为启动驱动器使用256GB SSD,在RAID 1(镜像)阵列中使用mdadm的/ home使用了一对3TB HDD,并且一切正常。

我与技嘉板进行了大量合作,我知道990FXA-UD5和990FXA-UD3板具有非常相似的BIOS,因此可能也适用于这些板。


很高兴为您服务。我的设置完全正确(256GB SSD + / u(/ home)的镜像3TB驱动器)。我的USB3端口可以工作,但挂在一个端口上的USB3集线器却无法工作。(好吧,我可以在其上使用拇指驱动器,但不能使用键盘或鼠标。)
Bruce

iommu=soft与xHCI + eHIC切换和IOMMU控制器(均已启用)结合使用,而不必启用“仅旧版”。Arch Linux处于全速启动,EFI和witout iommu或usb3根设备问题。


4

奇怪的是,即使我具有几乎相同的设置(相同的主板,FX8350处理器),启用IOMMU对我也没有任何影响。仍然没有USB,网络等。

什么确实的帮助,虽然是将“IOMMU =软”到内核的命令行。现在一切正常(除非出于某种奇怪的原因,我的Logitech Zone Touch Mouse不起作用)。


1
他们从来都不一样。即使在制造日期上仅相差几周,也可能意味着通用主板组件和/或superio版本的新来源。电路板制造是计算的阴暗面。
mikeserv

3

仅供参考,Linux无法通过“ BIOS”使用设备的技术原因:一旦操作系统已转换为“保护模式”(32位)或“长模式”(64位),它将不再发送中断到BIOS。在“实模式”(引导时为16位)下,它可以调用BIOS中断以读取磁盘,键盘输入等。

但这也有缺点。首先,您甚至没有一兆字节的可寻址内存。因此,现代操作系统几乎要退出实模式。(实际上,我相信grub甚至在加载内核之前就切换到保护模式)。

更多详细信息:http : //wiki.osdev.org/Real_Mode http://wiki.osdev.org/Protected_Mode


2

我有相同的进程(但8核),相同的MB(版本3)和相同数量的RAM(金斯敦)

IOMMU的技巧有所帮助-所有端口都可以看到一个USB键盘,一个显示器USB集线器和一个USB(Realtek)WiFi适配器,但没有闪存驱动器。

看来,这种解决方案对我有帮助:

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
如果您在此处以文本形式提供了解决方案,并且仅使用链接获取背景信息和非必要的详细信息,将对您有所帮助。否则,一旦链接失效,您的答案就毫无价值。
Anthon

就像其中一个用户在您提供的链接中指出的那样:“这不是解决方案。这意味着您没有全速使用驱动器。这就像在被切断的肢体上贴上创可贴。”
热情的

2

这些步骤适用于运行Ubuntu 15.04的GIGABYTE 970A-DS3P和AMD-FX-8320

  • xHCI切换-已启用
  • EHCI切换-已启用
  • IOMMU控制器-已启用
  • UEFI-禁用
  • 所有启动选项-仅旧版

2

我在使用OpenSuse 13.1的技嘉990FXA-UD3上运行了相同的FX8350。对我有用的解决方案是使用YAST(默认选择(或在我的情况下,您用来加载OpenSuse 13.1的选择)),“ iommu = pt”(在“ quiet showopts”之后)编辑引导加载程序。

例如:

““ resume = / dev / disk / by-id / ata-Hitachi_HDS721010CLA332_JP2921HQ1076NA-part2 splash = silent quiet showopts iommu = pt”

现在我所有的USB端口2.0和3.0都可以使用,并且我的Internet网络也可以使用!还要确保在BIOS中启用了IOMMU。


1

昨天在华硕M5A99X主板上安装Ubuntu时遇到了这个问题。我的目标是在UEFI模式下从USB记忆棒重新安装Ubuntu,以修复操作系统对IOMMU的检测(我的系统是通过“传统BIOS”模式安装的,我认为这可能是一个原因)。

以前,我是通过从USB记忆棒安装Ubuntu来尝试的。使用旧版功能很好,UEFI始终是一个问题-输入安装程序时我的键盘/鼠标/ Wifi无法正常运行(仅电源),或者安装程序无法在控制台中加载带有消息的UI:

  • (…) 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”或“启动磁盘创建器”中,而事实并非如此。尝试使用BIOS中的所有设置(我没有设置IOMMU Controller或我的设置)花了2个多小时xHCI Handoff,但唯一有用的方法是-使用华硕网站上为我的主板型号下载的ROM文件将BIOS升级到最新版本。轻松解压缩并复制USB记忆棒上的ROM文件,然后使用“ EZ Flash Utility”(在BIOS中)来刷新固件。

这样做可以解决我遇到的所有错误;我能够在UEFI模式下安装和使用Ubuntu。此外,Ubuntu现在可以毫无问题地神奇地检测到IOMMU。这意味着我的问题是由与USB 2.0 / 3.0支持和IOMMU支持有关的BIOS固件错误引起的。(如果您不需要IOMMU,则应在“高级”部分中将其禁用,因为这并不常见)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.