web-dev-qa-db-ja.com

USBがUEFI / BIOSで動作するのにLinuxで動作しないのはなぜですか?

背景として、次のような最新のハードウェアを備えた新しいマシンを構築しました。

  • AMD FX-8350
  • ギガバイトGA-990FXA-UD3マザーボード
  • 16GB RAM
  • NVidia GTX 650 Ti
  • キングストンSSD

そのため、SSDにさまざまなバージョンのLinuxをインストールしようとすると、ほぼ毎回失敗しました。 USBサムドライブからArch、Debian安定版、Debian sid、Ubuntu 12.10をインストールしてみましたが、BIOSがUSBドライブを認識し、そこから起動を開始しましたが、OSがUSBデバイスを列挙しようとするとすぐに、すべてのUSB機能が失われました(起動デバイスを含む)。

最終的に私はDVDを焼き、Ubuntu 12.10をSSDにインストールしました。 American Megatrends UEFI/BIOSでUSBキーボード(およびマウス)が正常に動作することに注意してください。ライブUbuntu DVDのプレインストールメニューにいるときでも、キーボードは正常に動作します。

Linuxが起動するとすぐに(Live DVDまたはSSDから)、すべてのUSB機能が失われ、PS/2キーボードを使用してのみOSをナビゲートできます。

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のインストールがありません。

私はすでにマザーボードを1回RMAしたが、2番目のマザーボードはまったく同じ動作をするので、ハードウェア障害を安全に除外できると思います(動作は同じであるため、2つの同一の欠陥のあるボードを取得することはあまりありません。これが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

OHCIコントローラーにフォールバックするまで数をインクリメントして他のUSBホストコントローラーを試行することを数回繰り返します。

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_commonusbcorexhci_hcdehci_hcdohci_hcdがすべてロードされ、機能していることが示されます。

31
BrionS

このスレッド( http://ubuntuforums.org/showthread.php?t=2114055 )からの回答をubuntuforums.orgで見つけました。

新しいギガバイトのメインボードでは(少なくとも)IOMMU Controllerと呼ばれるBIOSオプションがあり、デフォルトで無効になっていて、それが何のためにあるのか手掛かりや表示がありません。

この設定を有効にして「魔法のように」再起動すると、64ビットLinux OSでUSBとネットワークの問題がすべて復元されます(どちらでもかまいません)。

こんなに簡単な修正を探すのはとても長い間だったので、私はむしろショックを受けてうれしく思います。

あなたの助けと提案をみんなに感謝します。うまくいけば、他の人がこれが役に立つと思うでしょう。

更新:現在のBIOS設定には、IOMMUコントローラーに加えて、XHCIハンドオフとEHCIハンドオフの有効化も含まれていることを追加したいと思います。他の人もこれについて言及しており、これらの2つのハンドオフを有効にすると、USB 3.0ポートが期待どおりに機能するようになります。

25
BrionS

GA-990FXA-UD7を使用して、USB 2.0およびUSB 3.0コントローラーとオンボードイーサネットコントローラーの両方がLinux(Mint 17.1を使用)で正しく機能するには、BIOSで次の設定が必要であることを知りました。

  • xHCIハンドオフ-有効
  • EHCIハンドオフ-有効
  • IOMMUコントローラ-有効

UEFIを無効にし、すべての起動オプションを「レガシーのみ」に変更することを忘れないでください。

容量が2.2 TBを超えるHDDから起動する必要がある場合は、別の問題が発生している可能性があります。

/ homeにmdadmを使用して、RAID 1(ミラーリング)アレイでブートドライブに256GB SSDと3TB HDDのペアを使用していますが、すべて正常に動作しています。

ギガバイトボードでの作業はかなり多かったので、990FXA-UD5ボードと990FXA-UD3ボードのBIOSは非常に似ているため、これらのボードでも同じことが当てはまる可能性があります。

5
PracticalTech

奇妙なことに、ほぼ同じ設定(同じマザーボード、FX8350プロセッサ)を使用していますが、IOMMUを有効にしても違いはありませんでした。 USB、ネットワークなどはまだありません.

しかしdidヘルプは、カーネルコマンドラインに「iommu = soft」を追加していました。これで、すべて正常に動作します(ただし、奇妙な理由で、私のLogitech Zone Touch Mouseが動作しません)。

4
Ron Murray

参考までに、LinuxがBIOSを介してデバイスを使用できない技術的な理由:OSが「保護モード」(32ビット)または「ロングモード」(64ビット)に移行すると、割り込みを送信できなくなりますBIOSに。 「リアルモード」(16ビット、起動時)では、BIOS割り込みを呼び出して、ディスクの読み取り、キーボード入力などを行うことができます。

しかし、それもマイナス面です。 1つには、1メガバイトのアドレス可能なメモリさえありません。したがって、最近のOSはリアルモードからほぼ最初に切り替わります。 (実際には、カーネルをロードする前にgrubがプロテクトモードに切り替わると思います)。

詳細: http://wiki.osdev.org/Real_Modehttp://wiki.osdev.org/Protected_Mode

3
DimeCadmium

私は同じプロセッサ(8コア)、同じMB(リビジョン3)、同じ量のRAM(Kingston)を持っています。

IOMMUのヒントは少し役に立ちました-すべてのポートはUSBキーボード、モニターUSBハブ、USB(Realtek)wifiアダプターを表示できますが、フラッシュドライブは表示できません。

この解決策が私を助けたようです:

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
Chek

これらの手順は、Ubuntu 15.04を実行しているGIGABYTE 970A-DS3PおよびAMD-FX-8320で私にとってうまくいきました

  • xHCIハンドオフ-有効
  • EHCIハンドオフ-有効
  • IOMMUコントローラ-有効
  • UEFI-無効
  • すべての起動オプション-レガシーのみ
2
RVR

OpenSuse 13.1を使用して、同じFX8350をGigabyte 990FXA-UD3で実行しています。私にとってうまくいった解決策は、YAST、デフォルトの選択(または私の場合はOpenSuse 13.1をロードするために使用している選択)、「quiet showopts」の後に「iommu = pt」を使用してブートローダーを編集することでした。

例えば:

「resume =/dev/disk/by-id/ata-Hitachi_HDS721010CLA332_JP2921HQ1076NA-part2 splash = silent quiet showopts iommu = pt」

これで、すべてのUSBポート2.0および3.0が機能し、インターネットネットワーキングも機能します。また、BIOSでIOMMUが有効になっていることを確認してください。

2
dipio

昨日、ASUSTek M5A99XマザーボードにUbuntuをインストールしているときにこの問題が発生しました。私の目的は、UEFIモードでUSBスティックからUbuntuを再インストールし、OSによるIOMMU検出を修正することでした(私のシステムは「レガシーBIOS」モードでインストールされましたが、これが理由かもしれません)。

以前は、UbuntuをUSBスティックからインストールして試してみました。レガシーで問題なく、UEFIは常に問題でした-インストーラーに入るときにキーボード/マウス/ Wifiが適切に機能していない(電源のみ)か、コンソールにメッセージが表示されてUIを読み込めませんでした:

  • (…) device descriptor read/64, error -32(各USBデバイス用)
  • (…) unable to find a live medium containing a live file system(スティックから5〜6分の読み取り後)。このエラーには、USBスティックのタイプを「強制ハードディスク」に変更することによる回避策がありますが、システムを起動すると、インストール後に他の問題が発生しました。

問題は「Unetbootin」または「Startup Disk Creator」にあると考えていましたが、そうではありません。 BIOSのすべての設定を試すのに2時間以上費やした(私はIOMMU ControllerまたはxHCI Handoff設定)、ただし助けになったのはBIOSのアップグレードで、最新バージョンにROMファイルをマザーボードモデル用にAsus Webサイトからダウンロードしました。解凍するのは簡単です)そして、ROMファイルをUSBスティックにコピーし、「EZ Flashユーティリティ」(BIOS内)を使用してファームウェアをフラッシュします。

これにより、私が抱えていたあらゆる種類のエラーが修正されました。 UEFIモードでUbuntuをインストールして使用することができました。さらに、IOMMUは問題なくUbuntuによって魔法のように検出されるようになりました。つまり、私の問題は、USB 2.0/3.0サポートとIOMMUサポートに関連するBIOSファームウェアのバグが原因でした。 (IOMMUが必要ない場合は、「詳細」セクションで無効にする必要がありますが、一般的ではありません)。

1
Croll