ทำไม USB ไม่ทำงานใน Linux เมื่อทำงานใน UEFI / BIOS


31

สำหรับพื้นหลังฉันเพิ่งสร้างเครื่องจักรใหม่พร้อมฮาร์ดแวร์ที่ทันสมัยรวมถึง:

  • AMD FX-8350
  • Gigabyte GA-990FXA-UD3 มาเธอร์บอร์ด
  • RAM 16GB
  • NVidia GTX 650 Ti
  • Kingston SSD

ระบุว่าฉันพยายามติดตั้ง Linux เวอร์ชันต่างๆบน SSD และพบกับความล้มเหลวเกือบทุกครั้ง ฉันพยายามติดตั้ง Arch, Debian stable, Debian sid และ Ubuntu 12.10 จาก USB thumb drive แต่ในขณะที่ BIOS เห็นไดรฟ์ USB และเริ่มบูตจากนั้นทันทีที่ OS พยายามระบุอุปกรณ์ 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 (และการ์ดเครือข่ายของฉัน on-board) จากการทำงานในลินุกซ์ ดูเหมือนว่าจะไม่มีปัญหาใด ๆ กับอุปกรณ์เหล่านี้ที่ทำงานใน BIOS และฉันไม่มีการติดตั้ง Windows สำหรับทดสอบและดูว่ามันใช้งานได้หรือไม่

ฉันเคยเมนบอร์ด RMA เคย แต่ครั้งที่สองมีพฤติกรรมเดียวกันดังนั้นฉันคิดว่าฉันสามารถออกกฎความล้มเหลวของฮาร์ดแวร์ได้อย่างปลอดภัย (เนื่องจากพฤติกรรมเหมือนกันฉันไม่คิดว่าแปลกที่ฉันได้รับสองแผงที่มีข้อบกพร่องเหมือนกัน มากกว่าราคาของสิ่งนี้เป็นปัญหาของ Linux)

มีอะไรอีกบ้างที่ฉันสามารถลองใช้ USB (และเครือข่ายของฉันได้อย่างยอดเยี่ยม แต่ตอนนี้เราจะใช้งานได้กับ USB)?

แก้ไข # 1:

เนื่องจากฉันไม่มีเครือข่ายฉันสามารถเชื่อมโยงบิตที่น่าสนใจจากdmesgที่นี่เท่านั้น

น่าสนใจที่dmesgฉันเห็นว่าฉันมีคอนโทรลเลอร์โฮสต์ USB 11 ตัว (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 ดังเสียงฮืด ๆmodprobeแสดงให้เห็นusb_common, usbcore, xhci_hcd, ehci_hcdและohci_hcdทั้งหมดที่โหลดและการทำงาน


ความล้มเหลวในการโหลดไมโครโค้ดดูเหมือนเป็นเรื่องแปลก ฉันกำลังคิดเกี่ยวกับเมนบอร์ดที่ไม่ได้รับการสนับสนุนหรือขาดแพ็คเกจไมโครโค้ด
TNW

ดูเหมือนว่าปัญหาดังกล่าวอาจหายไปได้ ( butterflyofdream.wordpress.com/2012/09/10/… ) เนื่องจากซีพียูนี้ใช้งานได้นานและมีแพ็คเกจที่อัปเดตไมโครโค้ด อย่างไรก็ตามฉันสงสัยว่าจะป้องกันไม่ให้ USB ทำงานใน Linux ได้อย่างไรเมื่อ USB ทำงานใน BIOS โดยไม่มีปัญหา นอกจากนี้จนกระทั่งฉันสามารถทราบได้ว่าทำไมอุปกรณ์เครือข่ายไม่เชื่อมต่อฉันจะไม่สามารถใช้โปรแกรมแก้ไข (แม้ว่าการ์ดเสริมอาจให้ฉันออกกฎคืนนี้)
BrionS

1
ฉันอยากจะบอกว่ามันจะแปลกในทางตรงกันข้าม ไบออสซึ่งควรจะรองรับทุกอย่างบนเมนบอร์ดต้องทำงาน Linux ไม่เหมือนกัน BIOS มักจะรองรับอุปกรณ์ในรูปแบบที่เรียบง่ายเช่น VBE สำหรับการ์ดกราฟิกในขณะที่คุณไม่ต้องการใช้แทนหรือไดรเวอร์ GPU ทั่วไป
TNW

ดังนั้นมีวิธีใดบ้างที่ฉันจะบังคับให้ Linux อนุญาตให้ BIOS จัดการอุปกรณ์สำหรับตัวควบคุม USB และเครือข่ายจนกว่าจะถึงเวลาที่รองรับ (ดีกว่า) ในเคอร์เนล Linux หรือไม่
BrionS

ฉันไม่คิดอย่างนั้น จำนวนวันที่อุปกรณ์ทั้งหมดเข้าถึงผ่าน BIOS นั้นใช้เวลานาน อย่างไรก็ตามฉันไม่สามารถรับประกันได้ว่าปัญหาเกิดจากการขาดไดรเวอร์ คุณพบสิ่งที่น่าสนใจdmesgลองmodprobeใช้โมดูลที่เกี่ยวข้องกับ USB หรือไม่
TNW

คำตอบ:


25

ฉันพบคำตอบจากกระทู้นี้ ( http://ubuntuforums.org/showthread.php?t=2114055 ) ที่ ubuntuforums.org

ดูเหมือนว่ากับเมนบอร์ด Gigabyte ที่ใหม่กว่า (อย่างน้อย) มีตัวเลือก BIOS ที่เรียกIOMMU Controllerว่าถูกปิดใช้งานโดยค่าเริ่มต้นและไม่ให้เบาะแสหรือข้อบ่งชี้เกี่ยวกับสิ่งที่มันเป็น

การเปิดใช้งานการตั้งค่านี้และการรีบูต "อย่างน่าอัศจรรย์" จะกู้คืนปัญหา USB และเครือข่ายทั้งหมดของฉันในระบบปฏิบัติการ 64 บิต Linux (ไม่สำคัญว่าจะใช้อันใด)

ฉันค่อนข้างตกใจและดีใจที่มันเป็นการค้นหาที่ยาวนานสำหรับการแก้ไขที่ง่าย

ขอบคุณทุกคนสำหรับความช่วยเหลือและคำแนะนำของคุณ หวังว่าคนอื่นจะพบว่าสิ่งนี้มีประโยชน์

อัปเดต:ฉันต้องการเพิ่มว่าการตั้งค่า BIOS ปัจจุบันของฉันยังรวมถึงการเปิดใช้งาน XHCI Handoff และ EHCI Handoff เพิ่มเติมจาก IOMMU Controller คนอื่นพูดถึงเรื่องนี้เช่นกันและการเปิดใช้งานการแฮนด์สองสองครั้งนั้นยังช่วยให้พอร์ต USB 3.0 ของฉันทำงานได้อย่างที่คาดไว้


1
ฉันจะชี้ให้เห็นว่าสำหรับฉันแม้ว่าการเปิดใช้ IOMMU ทำงานได้สำหรับฉันมันจะปิดการใช้งานพอร์ต USB 3 ภายในทั้งหมดของฉัน นอกจากนี้ก่อนหน้านี้ฉันเคยประสบปัญหาบางอย่างกับพอร์ตอีเธอร์เน็ต แต่เปลี่ยน IOMMU ในการแก้ไขปัญหาเหล่านั้น
Robbie

คุณลองเปิดใช้งาน xHCI Handoff เพื่อแก้ไขพอร์ต USB 3.0 หรือไม่
Stuart P. Bentley

@ StuartP.Bentley ใช่การตั้งค่า xHCI และ eHCI Handoff ถูกเปิดใช้งานเช่นเดียวกับ IOMMU Controller สิ่งนี้จะเปิดใช้งานพอร์ต USB 3.0 ของฉัน แต่ไม่ว่าด้วยเหตุผลใดก็ตามจะไม่เปิดใช้งานแป้นพิมพ์ USB ของฉันให้ทำงานในหน้าจอ BIOS หรือด้วง - อย่างไรก็ตามเมาส์ USB ของฉันก็ทำ (ไปที่รูป) ฉันมีแป้นพิมพ์แบบ PS / 2 ตัวที่สองเสียบเข้ากับการบูทเข้า BIOS เท่านั้น
BrionS

มันมีมากกว่านั้น หากคุณ wend ทางของคุณผ่านทุกอูบุนตูเวทีคุณจะพบว่าการตั้งค่าการบูตจะแนะนำ ( "iommu = อ่อน") กับ IOMMU DIS abled GB 990FXA-UD3 เป็นค่าเริ่มต้นของฉันที่เปิดใช้งานและฉันไม่สามารถใช้ฮับ USB3 ภายนอกของฉันได้ BOTTOM LINE: วิธีนี้อาจไม่สามารถแก้ปัญหาของคุณได้ ถ้าไม่ให้ googling
Bruce

ขอแนะนำให้ปิดการใช้งานแฮนด์ออฟ EHCI ไว้ใน BIOS เพื่อประสิทธิภาพที่ดีที่สุดกับ USB2.0
Marc.2377

5

ฉันเพิ่งเรียนรู้ด้วย GA-990FXA-UD7 ของฉันว่าทั้งคอนโทรลเลอร์ USB 2.0 และ USB 3.0 และคอนโทรลเลอร์ออนบอร์ดอีเธอร์เน็ตเพื่อให้ทำงานได้อย่างถูกต้องใน Linux (ฉันใช้ Mint 17.1) จำเป็นต้องใช้การตั้งค่าต่อไปนี้ใน BIOS:

  • xHCI แฮนด์ออฟ - เปิดใช้งานแล้ว
  • EHCI แฮนด์ออฟ - เปิดใช้งานแล้ว
  • ตัวควบคุม IOMMU - เปิดใช้งาน

อย่าลืมปิดการใช้งาน UEFI และเปลี่ยนตัวเลือกการบูตทั้งหมดเป็น "Legacy Only"

หากคุณต้องการบู๊ตจาก HDD ที่มีความจุมากกว่า> 2.2TB คุณอาจมีปัญหาในมือของคุณ

ฉันใช้ 256GB SSD สำหรับไดรฟ์สำหรับบูตและ HDD 3TB คู่หนึ่งในอาร์เรย์ RAID 1 (มิร์เรอร์) โดยใช้ mdadm สำหรับบ้าน / ของฉันและทำงานได้ดี

เมื่อทำงานกับบอร์ด Gigabyte ค่อนข้างมากฉันรู้ว่า 990FXA-UD5 และ 990FXA-UD3 บอร์ดมี BIOS คล้ายกันดังนั้นจึงมีแนวโน้มที่จะใช้กับบอร์ดเหล่านั้นเช่นกัน


ฉันดีใจที่ได้ผลกับคุณ ฉันมีการตั้งค่าของคุณอย่างแน่นอน (256GB SSD + ไดรฟ์สะท้อน 3TB สำหรับ / u (/ home)) พอร์ต USB3 ของฉันใช้งานได้ แต่ฮับ USB3 ไม่ทำงาน (ดีฉันสามารถใช้ไดรฟ์หัวแม่มือกับมัน แต่ไม่ใช่แป้นพิมพ์หรือเมาส์)
Bruce

iommu=softร่วมกับ xHCI + eHIC Handoff และ IOMMU Controller (เปิดใช้งานทั้งหมด) โดยไม่ต้องเปิดใช้งาน "Legacy Only" Arch Linux ที่บูทความเร็วสูง, EFI และ witout iommu หรือปัญหาอุปกรณ์รูท usb3


4

ผิดปกติถึงแม้ว่าฉันจะมีการตั้งค่าที่เหมือนกันเกือบ (เมนบอร์ดเดียวกันโปรเซสเซอร์ FX8350) การเปิดใช้งาน IOMMU ไม่ได้สร้างความแตกต่างให้ฉัน ยังคงไม่มี USB ระบบเครือข่าย ฯลฯ

สิ่งที่ได้ช่วยเหลือ แต่ถูกเพิ่ม "iommu = อ่อน" บรรทัดคำสั่งเคอร์เนล ตอนนี้มันใช้งานได้ดี (ยกเว้นว่าด้วยเหตุผลแปลก ๆ Logitech Zone Touch Mouse ของฉันไม่ทำงาน)


1
พวกเขาไม่เหมือนเดิม แม้ความแตกต่างเพียงไม่กี่สัปดาห์ในวันที่ผลิตอาจหมายถึงแหล่งใหม่สำหรับส่วนประกอบเมนบอร์ดทั่วไปและ / หรือการแก้ไข superio การผลิตแผงวงจรเป็นจุดอ่อนของการคำนวณ
mikeserv

3

FYI เหตุผลทางเทคนิคที่ทำให้ Linux ไม่สามารถใช้อุปกรณ์ "ผ่าน" BIOS ได้: เมื่อระบบปฏิบัติการได้เปลี่ยนเป็น "โหมดป้องกัน" (32 บิต) หรือ "โหมดยาว" (64 บิต) จะไม่สามารถส่งสัญญาณขัดจังหวะได้อีกต่อไป กับ BIOS ใน "โหมดจริง" (16 บิตเมื่อบูต) สามารถเรียกการขัดจังหวะ BIOS เพื่อให้ดิสก์อ่านอินพุตคีย์บอร์ด ฯลฯ

แต่มันก็มีข้อเสียเช่นกัน สำหรับหนึ่งคุณไม่มีหน่วยความจำที่สามารถระบุตำแหน่งได้เมกะไบต์ ดังนั้นระบบปฏิบัติการที่ทันสมัยจึงเปลี่ยนจากโหมดจริงเกือบจะเป็นสิ่งแรก (อันที่จริงฉันเชื่อว่าด้วงสลับไปที่โหมดป้องกันก่อนที่มันจะโหลดเคอร์เนล)

รายละเอียดเพิ่มเติม: http://wiki.osdev.org/Real_Mode http://wiki.osdev.org/Protected_Mode


2

ฉันมี proc เดียวกัน (แต่ 8 คอร์) MB เดียวกัน (รอบ 3) จำนวน RAM เท่ากัน (Kingston)

เคล็ดลับกับ IOMMU ช่วยได้เล็กน้อย - ทุกพอร์ตสามารถเห็นแป้นพิมพ์ usb, ฮับ usb จอภาพและอะแดปเตอร์ไร้สาย usb (Realtek) แต่ไม่มีแฟลชไดรฟ์

ดูเหมือนว่าวิธีนี้ช่วยฉันได้:

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

ขั้นตอนเหล่านี้เหมาะสำหรับฉันกับ GIGABYTE 970A-DS3P และ AMD-FX-8320 ที่ใช้ Ubuntu 15.04

  • xHCI แฮนด์ออฟ - เปิดใช้งานแล้ว
  • EHCI แฮนด์ออฟ - เปิดใช้งานแล้ว
  • ตัวควบคุม IOMMU - เปิดใช้งาน
  • UEFI - ปิดการใช้งาน
  • ตัวเลือกการบูตทั้งหมด - แบบดั้งเดิมเท่านั้น

2

ฉันมี FX8350 เดียวกันกับที่ทำงานบน Gigabyte 990FXA-UD3 โดยใช้ OpenSuse 13.1 วิธีแก้ปัญหาที่ใช้งานได้สำหรับฉันคือการแก้ไข bootloader โดยใช้ YAST การเลือกเริ่มต้น (หรือการเลือกที่คุณใช้ในการโหลด OpenSuse 13.1 ในกรณีของฉัน), "iommu = pt" หลังจาก "เงียบ showopts"

ตัวอย่างเช่น:

"resume = / dev / disk / by-id / ata-Hitachi_HDS721010CLA332_JP2921HQ1076NA-part2 splash = เงียบเงียบโชว์ผลงาน iommu = pt"

ตอนนี้พอร์ต USB 2.0 และ 3.0 ทั้งหมดของฉันใช้งานได้แล้วและเครือข่ายอินเทอร์เน็ตของฉันก็ใช้งานได้เช่นกัน! ตรวจสอบให้แน่ใจด้วยว่าเปิดใช้งาน IOMMU ใน BIOS


1

เมื่อวานนี้ฉันพบปัญหานี้ขณะติดตั้ง Ubuntu บนเมนบอร์ด ASUSTek M5A99X ของฉัน วัตถุประสงค์ของฉันคือติดตั้ง Ubuntu ใหม่จาก USB stick ในโหมด UEFI เพื่อแก้ไขการตรวจจับ IOMMU โดย OS (ระบบของฉันถูกติดตั้งผ่านโหมด "Legacy BIOS" ฉันคิดว่านี่อาจเป็นเหตุผล)

ก่อนหน้านี้ฉันลองโดยติดตั้ง Ubuntu จากแท่ง USB ใช้ได้กับ Legacy 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” หรือ“ Startup Disk Creator” - ไม่ใช่ ใช้เวลามากกว่า 2 ชั่วโมงในการลองการตั้งค่าทั้งหมดใน BIOS (ฉันไม่มีIOMMU ControllerหรือxHCI Handoffตั้งค่าไว้ในเหมือง) แต่สิ่งเดียวที่ช่วยได้คือการอัพเกรด BIOSเป็นเวอร์ชั่นใหม่ล่าสุดด้วยไฟล์ ROM ที่ดาวน์โหลดจากเว็บไซต์ Asus สำหรับรุ่นเมนบอร์ดของฉัน มันง่ายเหมือนการคลายซิปและคัดลอกไฟล์ ROM บนแท่ง USB และใช้“ EZ Flash ยูทิลิตี้” (ใน BIOS) เพื่อแฟลชเฟิร์มแวร์

การทำเช่นนี้แก้ไขข้อผิดพลาดทุกชนิดที่ฉันมี ฉันสามารถติดตั้งและใช้ Ubuntu ในโหมด UEFI ยิ่งไปกว่านั้น IOMMU ถูกตรวจพบโดย Ubuntu อย่างน่าอัศจรรย์โดยไม่มีปัญหา ซึ่งหมายความว่าปัญหาของฉันเกิดจากข้อผิดพลาดของเฟิร์มแวร์ BIOS ที่เกี่ยวข้องกับการสนับสนุน USB 2.0 / 3.0 และการสนับสนุน IOMMU (ถ้าคุณไม่ต้องการ IOMMU คุณควรปิดการใช้งานในส่วน "ขั้นสูง" เพราะมันไม่ใช่เรื่องธรรมดา)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.