为什么 USB 在 UEFI/BIOS 中工作时在 Linux 中不起作用?

为什么 USB 在 UEFI/BIOS 中工作时在 Linux 中不起作用?

作为背景,我刚刚建造了一台带有现代硬件的新机器,包括:

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

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

最终我刻录了 DVD 并将 Ubuntu 12.10 安装到 SSD 上。应该指出的是,我的 USB 键盘(和鼠标)在 American 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 主机控制器,直到它回退到 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 wheezymodprobe显示usb_commonusbcorexhci_hcdehci_hcd、 以及ohci_hcd所有已加载并正常运行。

答案1

我从这个帖子中找到了答案(http://ubuntuforums.org/showthread.php?t=2114055)在 ubuntuforums.org 上。

似乎在较新的技嘉主板(至少)中,有一个名为“IOMMU Controller默认情况下禁用”的 BIOS 选项,并且没有给出任何线索或指示来说明它的用途。

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

我感到相当震惊和高兴,因为寻找如此简单的修复程序花费了如此长的时间。

感谢大家的帮助和建议。希望其他人会发现这有帮助。

更新:我只想补充一点,我当前的 BIOS 设置除了 IOMMU 控制器外,还包括启用 XHCI Handoff 和 EHCI Handoff。其他人也提到了这一点,启用这两个切换也可以让我的 USB 3.0 端口正常运行。

答案2

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

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

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

如果您确实需要从 >2.2TB 容量的 HDD 启动,您可能会遇到不同的问题。

我使用 256GB SSD 作为启动驱动器,并使用 mdadm 将一对 3TB HDD 组成 RAID 1(镜像)阵列来管理我的 /home,一切运行良好。

由于经常使用技嘉主板,我知道 990FXA-UD5 和 990FXA-UD3 主板具有非常相似的 BIOS,因此很可能同样适用于这些主板。

答案3

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

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

答案4

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

什么做过不过,帮助是将“iommu=soft”添加到内核命令行中。现在一切正常(除了由于某些奇怪的原因,我的 Logitech Zone 触摸鼠标无法工作)。

相关内容