為什麼 USB 在 UEFI/BIOS 中工作時無法在 Linux 中工作?
作為背景,我剛剛用現代硬體建造了一台新機器,包括:
- AMD FX-8350
- 技嘉GA-990FXA-UD3主機板
- 16GB 記憶體
- 英偉達 GTX 650 鈦
- 金士頓固態硬碟
鑑於此,我嘗試在 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 wheezy
modprobe
顯示usb_common
,usbcore
,xhci_hcd
,ehci_hcd
, 以及ohci_hcd
所有已載入和執行。
我在 ubuntuforums.org 上從這個執行緒 ( http://ubuntuforums.org/showthread.php?t=2114055 ) 中找到了答案。
似乎對於較新的 Gigabyte 主機板(至少)有一個稱為 BIOS 選項
IOMMU Controller
,預設情況下該選項是禁用的,並且沒有提供任何關於它的用途的線索或指示。啟用此設置並“神奇地”重新啟動會在 64 位 Linux 作業系統中恢復我所有的 USB 和網路問題(不管是哪一個)。
我相當震驚和高興,尋找如此簡單的解決方案需要這麼長時間。
感謝大家的幫助和建議。希望其他人會發現這很有幫助。
**更新:**我想補充一點,除了 IOMMU 控制器之外,我目前的 BIOS 設置還包括啟用 XHCI Handoff 和 EHCI Handoff。其他人也提到了這一點,啟用這兩個切換還可以讓我的 USB 3.0 埠按預期執行。