Mengapa USB tidak berfungsi di Linux saat bekerja di UEFI / BIOS?

31

Untuk latar belakang saya baru saja membangun mesin baru dengan perangkat keras modern termasuk:

  • AMD FX-8350
  • Motherboard Gigabyte GA-990FXA-UD3
  • RAM 16GB
  • NVidia GTX 650 Ti
  • SSD Kingston

Mengingat itu, saya mencoba menginstal berbagai versi Linux pada SSD dan menemui kegagalan hampir setiap waktu. Saya mencoba menginstal Arch, Debian stable, Debian sid, dan Ubuntu 12.10 dari USB thumb drive tetapi ketika BIOS melihat USB drive dan mulai mem-boot darinya, segera setelah OS mencoba untuk menyebutkan perangkat USB saya kehilangan semua fungsi USB (termasuk perangkat boot).

Akhirnya saya membakar DVD dan menginstal Ubuntu 12.10 ke SSD. Perlu dicatat bahwa keyboard USB (dan mouse) saya berfungsi dengan baik saat di American Megatrends UEFI / BIOS. Bahkan ketika saya berada di menu pra-instalasi pada DVD Ubuntu Live, keyboard berfungsi dengan baik.

Segera setelah Linux di-boot (baik DVD langsung atau dari SSD) saya kehilangan semua fungsi USB dan hanya dapat menavigasi OS menggunakan keyboard PS / 2.

Apa yang saya lihat di dmesg / syslog adalah beberapa baris tentang " failed to load microcode amd_ucode/microcode_amd_fam15h.bin" dan saya dapat melihat perangkat USB gagal diinisialisasi.

Jika saya melakukan, lsusbsaya bisa melihat semua pengontrol host USB tetapi tidak ada perangkat. Melakukan lspcimenunjukkan semua perangkat keras yang saya harapkan. Dan melakukan lsmodsaya tidak melihat modul usb dimuat ( usb_ehcimisalnya).

Saya mencoba meneruskan noapicke string boot kernel dan itu tidak berpengaruh pada masalah ini.

Motherboard ini mendukung USB 3.0 tetapi semua perangkat yang saya hubungkan ke port USB 2.0 normal.

Saya agak bingung dengan apa yang bisa mematikan / mencegah USB (dan kartu jaringan on-board saya) dari bekerja di Linux . Sepertinya tidak ada masalah dengan salah satu perangkat ini bekerja di BIOS dan saya tidak memiliki instalasi Windows yang tersedia untuk menguji dan melihat apakah itu berfungsi.

Saya sudah RMA akan motherboard sekali tetapi yang kedua memiliki perilaku yang persis sama jadi saya pikir saya dapat dengan aman mengesampingkan kegagalan perangkat keras (karena perilaku itu identik, saya tidak berpikir aneh saya mendapatkan dua papan identik identik lebih besar dari kemungkinan ini menjadi masalah Linux).

Apa lagi yang bisa saya coba untuk mendapatkan USB (dan idealnya jaringan saya, tetapi kami akan tetap menggunakan USB untuk saat ini) berfungsi?

Edit # 1:

Karena saya tidak punya jaringan, saya hanya bisa menghubungkan bit-bit menarik dari dmesgsini.

Yang menarik dmesgsaya dapat melihat saya memiliki 11 pengendali host USB (OHCI, EHCI, dan xHCI). Mendeteksi perangkat USB saya dan kemudian gagal segera sebagai berikut:

usb 3-1: new high-speed USB device number 2 using ehci_hcd
usb 3-1: device descriptor read/64, error -32

Itu berulang beberapa kali menambah angka dan mencoba pengontrol Host USB lainnya hingga jatuh kembali ke pengontrol OHCI yang juga gagal tetapi memiliki pesan tambahan:

usb 8-1: device not accepting address 4, error -32

Saya pikir masalah jaringan saya ada hubungannya dengan fakta bahwa saya tidak memiliki IPv6 diaktifkan di router saya dan itu tampaknya menjadi masalah

eth1: no IPv6 routers present

Edit # 2:

lspci -vvvmenunjukkan bahwa adapter jaringan saya (baik onboard dan ekspansi) adalah Realtek Semiconductor (tidak mengejutkan); RTL8111 / 8168B dan RTL8169 / 8110 masing-masing. Pengontrol USB saya adalah Teknologi Etron EJ168 (xHCI) dan AMD nee ATI SB7x0 / SB8x0 / SB9x0 (EHCI & OHCI)

Sekarang menjalankan Debian serak modprobemenunjukkan usb_common, usbcore, xhci_hcd, ehci_hcd, dan ohci_hcdsemua dimuat dan berfungsi.

BrionS
sumber
Kegagalan memuat mikrokode tampaknya aneh. Saya sedang berpikir tentang motherboard yang belum didukung atau paket mikrokode yang hilang.
TNW
Sepertinya masalah itu mungkin dapat hilang ( butterflyofdream.wordpress.com/2012/09/10/… ) karena CPU ini telah keluar untuk sementara waktu dan ada paket yang memperbarui mikrokode. Namun, saya bertanya-tanya bagaimana itu akan mencegah USB bekerja di Linux ketika USB bekerja di BIOS tanpa masalah. Juga, sampai saya dapat mengetahui mengapa perangkat jaringan tidak terhubung baik saya tidak akan dapat menerapkan tambalan (meskipun kartu tambahan mungkin membuat saya mengesampingkan hal ini malam ini).
BrionS
1
Saya lebih suka mengatakan bahwa itu akan aneh sebaliknya. BIOS yang seharusnya mendukung semua yang ada di motherboard harus berfungsi. Jenis Linux tidak. BIOS sering mendukung perangkat dengan cara yang disederhanakan, misalnya VBE untuk kartu grafis - sementara Anda tidak akan suka menggunakannya atau driver GPU biasa.
TNW
Jadi, apakah ada cara bagi saya untuk memaksa Linux membiarkan BIOS mengelola perangkat untuk USB dan pengontrol jaringan sampai mereka (lebih baik?) Didukung di kernel Linux?
BrionS
Saya kira tidak. Hari-hari ketika semua perangkat diakses melalui BIOS sudah lama berlalu. Namun, saya tidak dapat meyakinkan Anda bahwa masalahnya adalah karena kurangnya driver. Apakah Anda menemukan sesuatu yang menarik dmesg, mencoba modprobemodul terkait USB?
TNW

Jawaban:

25

Saya menemukan jawaban dari utas ini ( http://ubuntuforums.org/showthread.php?t=2114055 ) lewat di ubuntuforums.org.

Sepertinya dengan mainboard Gigabyte yang lebih baru (setidaknya) ada opsi BIOS yang disebut IOMMU Controlleryang dinonaktifkan secara default dan tidak memberikan petunjuk atau indikasi untuk apa itu.

Mengaktifkan pengaturan ini dan me-reboot "secara ajaib" mengembalikan semua masalah USB dan jaringan saya di OS Linux 64-bit (tidak masalah yang mana).

Saya agak terkejut dan gembira bahwa itu adalah pencarian yang panjang untuk perbaikan sederhana.

Terima kasih semuanya atas bantuan dan saran Anda. Semoga orang lain akan menemukan ini bermanfaat.

Pembaruan: Saya hanya ingin menambahkan bahwa pengaturan BIOS saya saat ini juga termasuk mengaktifkan XHCI Handoff dan EHCI Handoff di samping IOMMU Controller. Yang lain juga menyebutkan hal ini dan mengaktifkan kedua handoff tersebut juga memungkinkan port USB 3.0 saya berfungsi seperti yang diharapkan.

BrionS
sumber
1
Saya akan menunjukkan bahwa bagi saya meskipun menyalakan IOMMU bekerja untuk saya, itu menonaktifkan semua port USB 3 internal saya. Juga, saya sebelumnya mengalami beberapa masalah dengan port ethernet, tetapi menyalakan IOMMU untuk memperbaiki masalah tersebut.
Robbie
Apakah Anda mencoba mengaktifkan xHCI Handoff untuk memperbaiki port USB 3.0?
Stuart P. Bentley
@ StuartP.Bentley ya pengaturan xHCI dan eHCI Handoff diaktifkan serta IOMMU Controller. Ini memang mengaktifkan port USB 3.0 saya tetapi karena alasan apa pun tidak mengaktifkan keyboard USB saya untuk bekerja di layar BIOS atau grub - namun mouse USB saya melakukannya (lihat gambar). Saya memiliki keyboard gaya PS / 2 kedua yang dicolokkan hanya untuk boot ke BIOS.
BrionS
ada lebih banyak lagi. Jika Anda berjalan melalui semua fora ubuntu, Anda menemukan bahwa pengaturan boot loader direkomendasikan ("iommu = soft") dengan IOMMU DIS mampu. GB 990FXA-UD3 saya default untuk diaktifkan dan saya tidak bisa menggunakan hub USB3 eksternal saya. BOTTOM LINE: ini mungkin tidak menyelesaikan masalah Anda. Jika tidak, teruskan googling.
Bruce
Dianjurkan untuk membiarkan handoff EHCI dinonaktifkan di BIOS untuk kinerja terbaik dengan USB2.0.
Marc.2377
5

Saya baru belajar, dengan GA-990FXA-UD7 saya, bahwa untuk pengontrol USB 2.0 dan USB 3.0 dan pengontrol Ethernet onboard agar berfungsi dengan benar di Linux (saya menggunakan Mint 17.1) memerlukan pengaturan berikut di BIOS:

  • handoff xHCI - Diaktifkan
  • Handoff EHCI - Diaktifkan
  • IOMMU controller - Diaktifkan

Jangan lupa untuk menonaktifkan UEFI dan ubah semua opsi booting ke "Hanya Legacy".

Jika Anda benar-benar perlu mem-boot dari HDD dengan kapasitas> 2.2TB, Anda mungkin memiliki masalah yang berbeda di tangan Anda.

Saya menggunakan SSD 256GB untuk boot drive saya dan sepasang HDD 3TB dalam array RAID 1 (mirrored) menggunakan mdadm untuk rumah saya / dan semuanya bekerja dengan baik.

Setelah bekerja dengan papan Gigabyte cukup banyak, saya tahu board 990FXA-UD5 dan 990FXA-UD3 memiliki BIOS yang sangat mirip, sehingga kemungkinan hal yang sama juga berlaku pada papan tersebut.

Teknologi Praktis
sumber
Saya senang itu bekerja untuk Anda. Saya memiliki pengaturan persis (SSD 256GB + mirror drive 3TB untuk / u (/ home)). Port USB3 saya berfungsi, tetapi hub USB3 tidak terhubung. (Yah, saya bisa menggunakan thumb drive di atasnya, tapi bukan keyboard atau mouse.)
Bruce
iommu=softbersamaan dengan xHCI + eHIC Handoff dan IOMMU Controller (semua diaktifkan), tanpa harus mengaktifkan "Legacy Only". Arch Linux dengan boot kecepatan penuh, EFI dan tanpa masalah iommu atau masalah perangkat usb3.
Lihatlah jawaban Askubuntu terkait ini .
Pablo A
4

Anehnya, walaupun saya memiliki setup yang hampir identik (motherboard yang sama, prosesor FX8350), mengaktifkan IOMMU tidak membuat perbedaan bagi saya. Masih tidak ada USB, jaringan, dll.

Apa memang membantu, meskipun, menambahkan "IOMMU = lunak" untuk baris perintah kernel. Sekarang semuanya berfungsi dengan baik (kecuali bahwa, untuk beberapa alasan aneh, Logitech Zone Touch Mouse saya tidak berfungsi).

Ron Murray
sumber
1
Mereka tidak pernah sama. Bahkan hanya beberapa minggu perbedaan tanggal pembuatan dapat berarti sumber baru untuk komponen motherboard umum dan / atau revisi superio. Pembuatan papan sirkuit adalah bagian bawah komputasi yang teduh.
mikeserv
3

FYI, alasan teknis mengapa Linux tidak dapat menggunakan perangkat "melalui" BIOS: begitu OS telah beralih ke "mode terlindungi" (32-bit) atau "mode panjang" (64-bit), ia tidak dapat lagi mengirim interupsi ke BIOS. Dalam "mode nyata" (16-bit, saat booting) ia dapat memanggil interupsi BIOS agar disk dapat dibaca, input keyboard, dll.

Tapi itu juga punya kelemahan. Pertama, Anda bahkan tidak memiliki megabita memori yang dapat dialamatkan. Jadi OS modern beralih dari mode nyata hampir hal pertama. (Sebenarnya, saya percaya grub beralih ke mode terproteksi bahkan sebelum kernel dimuat).

Rincian lebih lanjut: http://wiki.osdev.org/Real_Mode http://wiki.osdev.org/Protected_Mode

DimeCadmium
sumber
2

Saya punya proc yang sama (tapi 8-core) MB yang sama (rev 3) jumlah RAM yang sama (Kingston)

Tip dengan IOMMU sedikit membantu - semua port dapat melihat keyboard usb, monitor usb-hub, dan adaptor wifi usb (Realtek), tetapi tidak ada flash drive.

Tampaknya, solusi ini membantu saya:

cd /sys/bus/pci/drivers/ehci_hcd
ls

Anda akan melihat file dengan format 0000: 00: xx.x. Jalankan perintah berikut:

sudo sh -c 'echo -n "0000:00:xx.x" > unbind'

Ganti xx.x dengan angka yang ditampilkan di file Anda. Seharusnya menonaktifkan ehci_hcd.

Anda sekarang dapat menggunakan skrip berikut untuk menonaktifkan 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/

cek
sumber
2
Akan lebih membantu jika Anda memberikan solusi di sini dalam bentuk teks, dan hanya menggunakan tautan untuk informasi latar belakang dan detail yang tidak penting. Tanpa itu, begitu tautan Anda menjadi tidak valid, jawaban Anda tidak memiliki nilai.
Anthon
Seperti salah satu pengguna yang berkomentar di tautan yang Anda berikan, "Ini BUKAN perbaikan. Ini berarti Anda tidak menggunakan drive Anda dengan kecepatan penuh. Ini seperti meletakkan band-aid pada tungkai yang terpotong."
Antusiasme
2

Langkah-langkah ini berhasil bagi saya dengan GIGABYTE 970A-DS3P dan AMD-FX-8320 yang menjalankan Ubuntu 15.04

  • handoff xHCI - Diaktifkan
  • Handoff EHCI - Diaktifkan
  • IOMMU controller - Diaktifkan
  • UEFI - Dinonaktifkan
  • Semua opsi boot - Khusus Legacy
RVR
sumber
2

Saya memiliki FX8350 yang sama yang berjalan pada Gigabyte 990FXA-UD3 menggunakan OpenSuse 13.1. Solusi yang berhasil bagi saya adalah mengedit bootloader menggunakan YAST, pilihan default (atau pilihan yang Anda gunakan untuk memuat OpenSuse 13.1 dalam kasus saya), "iommu = pt" setelah "quiet showopts".

Sebagai contoh:

"resume = / dev / disk / oleh-id / ata-Hitachi_HDS721010CLA332_JP2921HQ1076NA-part2 splash = acara sunyi senyap iommu = pt"

Sekarang semua port USB 2.0 dan 3.0 saya berfungsi dan jaringan internet saya juga berfungsi !. Pastikan juga IOMMU diaktifkan di BIOS.

dipio
sumber
1

Kemarin saya mendapatkan masalah ini saat menginstal Ubuntu pada motherboard ASUSTek M5A99X saya. Tujuan saya adalah menginstal ulang Ubuntu dari stik USB dalam mode UEFI, untuk memperbaiki deteksi IOMMU oleh OS (sistem saya diinstal melalui mode "Legacy BIOS", saya pikir ini bisa menjadi alasan).

Sebelumnya, saya mencobanya dengan menginstal Ubuntu dari USB stick. Baik dengan Legacy, UEFI selalu menjadi masalah - baik keyboard / mouse / Wifi saya tidak berfungsi dengan baik (hanya daya) ketika memasuki installer, atau installer gagal memuat UI dengan pesan di konsol:

  • (…) device descriptor read/64, error -32 (untuk setiap perangkat USB)
  • (…) unable to find a live medium containing a live file system(setelah 5-6 menit membaca dari tongkat). Kesalahan ini memiliki solusi untuk mengubah jenis stik USB menjadi "Force Hard Disk", tetapi sistem booting menyebabkan masalah lain kemudian setelah menginstal.

Saya berpikir masalahnya adalah dari "Unetbootin" atau "Startup Disk Creator" - mereka tidak. Menghabiskan lebih dari 2 jam untuk mencoba semua pengaturan di BIOS (saya tidak punya IOMMU Controlleratau xHCI Handoffpengaturan di tambang), tetapi satu - satunya hal yang membantu - memutakhirkan BIOS ke versi terbaru dengan file ROM yang diunduh dari situs Asus untuk model motherboard saya. Semudah membuka ritsleting dan menyalin file ROM pada stik USB dan menggunakan "EZ Flash utility" (di BIOS) untuk mem-flash firmware.

Melakukan ini memperbaiki semua jenis kesalahan yang saya miliki; Saya dapat menginstal dan menggunakan Ubuntu dalam mode UEFI. Terlebih lagi, IOMMU sekarang terdeteksi oleh Ubuntu secara ajaib tanpa masalah. Ini berarti, masalah saya disebabkan oleh bug firmware BIOS yang terkait dengan dukungan USB 2.0 / 3.0, dan dukungan IOMMU. (jika Anda tidak membutuhkan IOMMU, Anda harus menonaktifkan ini di bagian "Advanced" karena itu bukan hal yang umum).

Gulungan
sumber