Tại sao USB không hoạt động trong Linux khi nó hoạt động trong UEFI / BIOS?


31

Đối với nền tôi vừa mới chế tạo một máy mới với phần cứng hiện đại bao gồm:

  • AMD FX-8350
  • Bo mạch chủ Gigabyte GA-990FXA-UD3
  • RAM 16GB
  • NVidia GTX 650 Ti
  • Ổ SSD Kingston

Do đó, tôi đã cố gắng cài đặt các phiên bản Linux khác nhau trên SSD và gặp lỗi gần như mọi lúc. Tôi đã thử cài đặt Arch, Debian ổn định, sid sid Debian và Ubuntu 12.10 từ ổ USB nhưng trong khi BIOS thấy ổ USB và bắt đầu khởi động từ nó, ngay khi HĐH cố gắng liệt kê các thiết bị USB tôi đã mất tất cả chức năng USB (bao gồm cả thiết bị khởi động).

Cuối cùng, tôi đã ghi một đĩa DVD và cài đặt Ubuntu 12.10 vào SSD. Cần lưu ý rằng bàn phím USB (và chuột) của tôi hoạt động tốt trong khi ở UEFI / BIOS Megatrends của Mỹ. Ngay cả khi tôi đang ở trong các menu cài đặt sẵn trên Live Ubuntu DVD, bàn phím vẫn hoạt động tốt.

Ngay khi Linux được khởi động (Live DVD hoặc từ SSD), tôi mất tất cả chức năng USB và chỉ có thể điều hướng HĐH bằng bàn phím PS / 2.

Những gì tôi thấy trong dmesg / syslog là một vài dòng về " failed to load microcode amd_ucode/microcode_amd_fam15h.bin" và tôi có thể thấy các thiết bị USB không khởi chạy được.

Nếu tôi làm lsusbtôi có thể thấy tất cả các bộ điều khiển máy chủ USB nhưng không có thiết bị nào. Làm một lspcicho tôi thấy tất cả các phần cứng tôi mong đợi. Và khi thực hiện, lsmodtôi không thấy bất kỳ mô-đun usb nào được tải ( usb_ehciví dụ).

Tôi đã thử chuyển qua noapicchuỗi khởi động kernel và nó không có tác dụng gì trong vấn đề này.

Bo mạch chủ hỗ trợ USB 3.0 nhưng tất cả các thiết bị tôi đã cắm vào cổng USB 2.0 bình thường.

Tôi khá bối rối trước những gì có thể giết / ngăn USB (và thẻ mạng trên máy bay của tôi) hoạt động trong Linux . Dường như không có bất kỳ vấn đề nào với bất kỳ thiết bị nào trong số này hoạt động trong BIOS và tôi không có sẵn bản cài đặt Windows để kiểm tra và xem nó có hoạt động không.

Tôi đã sử dụng bo mạch chủ một lần nhưng cái thứ hai có hành vi giống hệt nhau nên tôi nghĩ rằng tôi có thể loại trừ sự cố phần cứng một cách an toàn (vì hành vi này giống hệt nhau, tôi không nghĩ rằng tôi nhận được hai bảng bị lỗi giống hệt nhau lớn hơn khả năng đây là một vấn đề của Linux).

Tôi có thể thử dùng USB nào khác (và lý tưởng nhất là mạng của tôi, nhưng bây giờ chúng tôi sẽ sử dụng USB)?

Chỉnh sửa số 1:

Vì tôi không có kết nối mạng nên tôi chỉ có thể liên quan đến các bit thú vị từ dmesgđây.

Quan tâm đến dmesgtôi có thể thấy tôi có 11 bộ điều khiển máy chủ USB (OHCI, EHCI và xHCI). Nó phát hiện các thiết bị USB của tôi và sau đó bị lỗi ngay lập tức như sau:

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

Điều đó lặp đi lặp lại nhiều lần tăng số lượng và thử các bộ điều khiển Máy chủ lưu trữ USB khác cho đến khi nó quay trở lại bộ điều khiển OHCI cũng không thành công nhưng có một thông báo bổ sung:

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

Tôi nghĩ rằng các vấn đề về mạng của tôi liên quan đến thực tế là tôi không bật IPv6 trên bộ định tuyến của mình và đó dường như là một vấn đề

eth1: no IPv6 routers present

Chỉnh sửa # 2:

lspci -vvvcho thấy các bộ điều hợp mạng của tôi (cả trên bo mạch và mở rộng) là Bán dẫn Realtek (không có gì bất ngờ); RTL8111 / 8168B và RTL8169 / 8110 tương ứng. Bộ điều khiển USB của tôi là Etron Technology EJ168 (xHCI) và AMD nee ATI SB7x0 / SB8x0 / SB9x0 (EHCI & OHCI)

Bây giờ chạy Debian khò khè modprobeshow usb_common, usbcore, xhci_hcd, ehci_hcd, và ohci_hcdtất cả nạp và hoạt động.


Sự thất bại của việc tải microcode có vẻ đặc biệt. Tôi đang suy nghĩ về việc bo mạch chủ chưa được hỗ trợ hoặc thiếu gói vi mã.
TNW

Có vẻ như vấn đề đó có thể biến mất ( Butterflyofdream.wordpress.com/2012/09/10/NH ) vì CPU này đã ra mắt được một thời gian và có các gói cập nhật microcode. Tuy nhiên, tôi tự hỏi làm thế nào điều đó sẽ ngăn USB hoạt động trong Linux khi USB hoạt động trong BIOS mà không gặp vấn đề gì. Ngoài ra, cho đến khi tôi có thể tìm ra lý do tại sao thiết bị mạng không kết nối hoặc tôi sẽ không thể áp dụng bản vá (mặc dù thẻ bổ trợ có thể cho phép tôi loại trừ điều này tối nay).
BrionS

1
Tôi muốn nói rằng nó sẽ là lạ theo cách ngược lại. BIOS được cho là hỗ trợ mọi thứ trên bo mạch chủ phải hoạt động. Linux loại không. BIOS thường hỗ trợ các thiết bị theo cách đơn giản hóa, ví dụ VBE cho card đồ họa - trong khi bạn không muốn sử dụng chúng thay thế hoặc trình điều khiển GPU thông thường.
TNW

Vậy có cách nào để tôi buộc Linux cho phép BIOS quản lý các thiết bị cho USB và bộ điều khiển mạng cho đến khi chúng được hỗ trợ (tốt hơn?) Trong nhân Linux không?
BrionS

Tôi không nghĩ vậy. Ngày mà tất cả các thiết bị được truy cập thông qua BIOS đã qua lâu rồi. Tuy nhiên, tôi không thể đảm bảo với bạn rằng vấn đề là do thiếu trình điều khiển. Bạn có tìm thấy bất cứ điều gì thú vị trong dmesg, đã thử modprobecác mô-đun liên quan đến USB không?
TNW

Câu trả lời:


25

Tôi tìm thấy câu trả lời từ chủ đề này ( http://ubuntuforums.org/showthread.php?t=2114055 ) tại ubuntuforums.org.

Dường như với các bo mạch chính Gigabyte mới hơn (ít nhất), có một tùy chọn BIOS được gọi IOMMU Controllerlà bị tắt theo mặc định và không đưa ra manh mối hay chỉ dẫn nào về việc nó dùng để làm gì.

Bật cài đặt này và khởi động lại "một cách kỳ diệu" sẽ khôi phục tất cả các sự cố mạng và USB của tôi trong HĐH Linux 64 bit (không quan trọng là cái nào).

Tôi khá sốc và phấn khởi vì đó là một cuộc tìm kiếm dài như vậy cho một sửa chữa đơn giản như vậy.

Cảm ơn mọi người đã giúp đỡ và gợi ý của bạn. Hy vọng những người khác sẽ tìm thấy điều này hữu ích.

Cập nhật: Tôi chỉ muốn thêm rằng các cài đặt BIOS hiện tại của tôi cũng bao gồm bật XHCI Handoff và EHCI Handoff ngoài Bộ điều khiển IOMMU. Những người khác cũng đã đề cập đến điều này và cho phép hai bàn giao đó cũng cho phép các cổng USB 3.0 của tôi hoạt động như mong đợi.


1
Tôi sẽ chỉ ra rằng đối với tôi mặc dù bật IOMMU hoạt động với tôi, nó đã tắt tất cả các cổng USB 3 bên trong của tôi. Ngoài ra, trước đây tôi đã gặp một số vấn đề với cổng ethernet, nhưng bật IOMMU để khắc phục các sự cố đó.
Robbie

Bạn đã thử bật xHCI Handoff để sửa các cổng USB 3.0 chưa?
Stuart P. Bentley

@ StuartP.Bentley có xHCI và eHCI Cài đặt Handoff được bật cũng như Bộ điều khiển IOMMU. Điều này không cho phép các cổng USB 3.0 của tôi nhưng vì bất kỳ lý do gì không cho phép bàn phím USB của tôi hoạt động trong màn hình BIOS hoặc grub - tuy nhiên chuột USB của tôi thì không (đi hình). Tôi có một bàn phím kiểu PS / 2 thứ hai được cắm chỉ để khởi động vào BIOS.
BrionS

Có nhiều hơn cho nó. Nếu bạn đi qua tất cả các fora Ubuntu, bạn sẽ thấy rằng cài đặt bộ tải khởi động được khuyến nghị ("iommu = soft") với IOMMU DIS . GB 990FXA-UD3 của tôi mặc định được bật và tôi không thể sử dụng trung tâm USB3 bên ngoài của mình. LINE LINE: điều này có thể không giải quyết vấn đề của bạn. Nếu không, hãy tiếp tục googling.
Bruce

Bạn nên tắt chức năng chuyển giao EHCI trong BIOS để có hiệu suất tốt nhất với USB2.0.
Marc.2377

5

Tôi mới biết, với GA-990FXA-UD7 của tôi, rằng đối với cả bộ điều khiển USB 2.0 và USB 3.0 và bộ điều khiển Ethernet trên bo mạch để hoạt động chính xác trong Linux (tôi đang sử dụng Mint 17.1), nó yêu cầu các cài đặt sau trong BIOS:

  • bàn giao xHCI - Đã bật
  • Bàn giao EHCI - Đã bật
  • Bộ điều khiển IOMMU - Đã bật

Đừng quên tắt UEFI và thay đổi tất cả các tùy chọn khởi động thành "Chỉ di sản".

Nếu bạn thực sự cần khởi động từ ổ cứng có dung lượng> 2.2TB, bạn có thể gặp vấn đề khác.

Tôi đang sử dụng ổ SSD 256 GB cho ổ đĩa khởi động và một cặp ổ cứng 3TB trong mảng RAID 1 (được nhân đôi) sử dụng mdadm cho nhà / của tôi và tất cả đều hoạt động tốt.

Đã làm việc với các bảng Gigabyte khá nhiều, tôi biết các bảng 990FXA-UD5 và 990FXA-UD3 có BIOS rất giống nhau, vì vậy có khả năng cũng sẽ áp dụng tương tự với các bảng đó.


Tôi vui vì nó làm việc cho bạn. Tôi có chính xác thiết lập của bạn (SSD 256 GB + ổ đĩa 3TB được nhân đôi cho / u (/ home)). Các cổng USB3 của tôi hoạt động, nhưng cổng USB3 không hoạt động. (Chà, tôi có thể sử dụng một ổ ngón tay cái trên nó, nhưng không phải là bàn phím hoặc chuột.)
Bruce

iommu=softkết hợp với xHCI + eHIC Handoff và Bộ điều khiển IOMMU (tất cả được bật), mà không phải bật "Chỉ di sản". Arch Linux ở tốc độ khởi động đầy đủ, EFI và các vấn đề về thiết bị gốc iommu hoặc usb3.


4

Thật kỳ lạ, mặc dù tôi có một thiết lập gần như giống hệt nhau (cùng bo mạch chủ, bộ xử lý FX8350), cho phép IOMMU không tạo ra bất kỳ sự khác biệt nào đối với tôi. Vẫn không có USB, mạng, v.v.

Tuy nhiên, điều đã giúp là thêm "iommu = soft" vào dòng lệnh kernel. Bây giờ tất cả đều hoạt động tốt (ngoại trừ, vì một số lý do kỳ lạ, Chuột cảm ứng Logitech Zone của tôi không hoạt động).


1
Chúng không bao giờ giống nhau. Thậm chí chỉ một vài tuần khác biệt về ngày sản xuất có thể có nghĩa là một nguồn mới cho một thành phần bo mạch chủ phổ biến và / hoặc sửa đổi superio. Sản xuất bảng mạch là nền tảng mờ ám của máy tính.
mikeerv

3

FYI, lý do kỹ thuật tại sao Linux không thể sử dụng các thiết bị "thông qua" BIOS: một khi HĐH đã chuyển sang "chế độ được bảo vệ" (32 bit) hoặc "chế độ dài" (64 bit), nó không thể gửi các ngắt nữa. vào BIOS. Trong "chế độ thực" (16 bit, khi khởi động), nó có thể gọi các ngắt BIOS để đọc đĩa, nhập bàn phím, v.v.

Nhưng nó cũng có nhược điểm. Đối với một, bạn thậm chí không có một megabyte bộ nhớ địa chỉ. Vì vậy, hệ điều hành hiện đại chuyển khỏi chế độ thực gần như điều đầu tiên. (Trên thực tế, tôi tin rằng grub chuyển sang chế độ được bảo vệ trước khi nó tải kernel).

Thêm chi tiết: http://wiki.osdev.org/Real_Mode http://wiki.osdev.org/Protected_Mode


2

Tôi đã có cùng một Proc (nhưng 8 lõi) cùng MB (rev 3) cùng dung lượng RAM (Kingston)

Mẹo với IOMMU đã giúp một chút - tất cả các cổng có thể thấy bàn phím usb, bộ chia USB màn hình và bộ chuyển đổi wifi usb (Realtek), nhưng không có ổ đĩa flash.

Dường như, giải pháp này đã giúp tôi:

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

Bạn sẽ thấy một tệp có định dạng 0000: 00: xx.x. Thực hiện lệnh sau:

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

Thay thế xx.x bằng các số được hiển thị trên tệp của bạn. Nó sẽ vô hiệu hóa ehci_hcd.

Bây giờ bạn có thể sử dụng tập lệnh sau để tắt 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/solve-unable-to-enumarters-usb-device-diseac-ehci_hcd/


2
Sẽ hữu ích hơn nếu bạn cung cấp một giải pháp ở đây bằng văn bản và chỉ sử dụng các liên kết cho thông tin cơ bản và các chi tiết không cần thiết. Không có điều đó, một khi liên kết của bạn trở nên không hợp lệ, câu trả lời của bạn không có giá trị.
Anthon

Giống như một trong những người dùng đã nhận xét trong liên kết bạn cung cấp "Đây KHÔNG phải là bản sửa lỗi. Điều này có nghĩa là bạn không sử dụng ổ đĩa của mình ở tốc độ tối đa. Điều này giống như đặt một băng hỗ trợ trên một chi bị cắt đứt."
nhiệt tình

2

Các bước này hoạt động với tôi với GIGABYTE 970A-DS3P và AMD-FX-8320 chạy Ubuntu 15.04

  • bàn giao xHCI - Đã bật
  • Bàn giao EHCI - Đã bật
  • Bộ điều khiển IOMMU - Đã bật
  • UEFI - Vô hiệu hóa
  • Tất cả các tùy chọn khởi động - Chỉ dành cho di sản

2

Tôi có cùng FX8350 chạy trên Gigabyte 990FXA-UD3 bằng OpenSuse 13.1. Giải pháp hiệu quả với tôi là chỉnh sửa bộ tải khởi động bằng YAST, lựa chọn mặc định (hoặc lựa chọn bạn đang sử dụng để tải OpenSuse 13.1 trong trường hợp của tôi), "iommu = pt" sau "hiển thị yên tĩnh".

Ví dụ:

"sơ yếu lý lịch = / dev / đĩa / by-id / ata-Hitachi_HDS721010CLA332_JP2921HQ1076NA-part2 giật gân = im lặng hiển thị iommu = pt"

Bây giờ tất cả các cổng USB 2.0 và 3.0 của tôi đều hoạt động và mạng internet của tôi cũng hoạt động!. Đồng thời đảm bảo IOMMU được bật trong BIOS.


1

Hôm qua tôi đã gặp sự cố này khi cài đặt Ubuntu trên bo mạch chủ ASUSTek M5A99X của mình. Mục tiêu của tôi là cài đặt lại Ubuntu từ thẻ nhớ USB ở chế độ UEFI, để sửa lỗi phát hiện IOMMU bởi HĐH (hệ thống của tôi đã được cài đặt thông qua chế độ BIOS Legacy BIOS, tôi nghĩ đây có thể là một lý do).

Trước đây, tôi đã thử điều đó bằng cách cài đặt Ubuntu từ USB. Tốt với Legacy, UEFI luôn là một vấn đề - bàn phím / chuột / Wifi của tôi không hoạt động đúng (chỉ cấp nguồn) khi vào trình cài đặt hoặc trình cài đặt không tải được UI bằng tin nhắn trong bảng điều khiển:

  • (…) device descriptor read/64, error -32 (cho mỗi thiết bị USB)
  • (…) unable to find a live medium containing a live file system(sau 5-6 phút đọc từ thanh). Lỗi này có một cách giải quyết với việc thay đổi loại thẻ nhớ USB thành Ổ đĩa cứng cứng, nhưng hệ thống khởi động gây ra các vấn đề khác sau khi cài đặt.

Tôi đã nghĩ rằng các vấn đề là từ nhóm Unetbootin, hoặc Startup Startup Creator Creator - chúng không phải vậy. Đã dành hơn 2 giờ để thử tất cả các cài đặt trong BIOS (tôi không có IOMMU Controllerhoặc xHCI Handoffcài đặt trong tôi), nhưng điều duy nhất đã giúp - nâng cấp BIOS lên phiên bản mới nhất với tệp ROM được tải xuống từ trang web Asus cho mẫu bo mạch chủ của tôi. Thật dễ dàng khi giải nén và sao chép tệp ROM trên thanh USB và sử dụng tiện ích EZ EZ Flash (trong BIOS) để flash firmware.

Làm điều này đã sửa tất cả các loại lỗi tôi có; Tôi đã có thể cài đặt và sử dụng Ubuntu ở chế độ UEFI. Hơn nữa, IOMMU hiện được Ubuntu phát hiện một cách kỳ diệu mà không gặp sự cố nào. Điều này có nghĩa, các sự cố của tôi là do lỗi phần sụn BIOS liên quan đến hỗ trợ USB 2.0 / 3.0 và hỗ trợ IOMMU. (nếu bạn không cần IOMMU, bạn nên tắt phần này trong phần Advanced Advanced vì vì đó không phải là điều phổ biến).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.