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


31

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

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

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

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

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

dmesg / syslogに表示されるのは、「failed to load microcode amd_ucode/microcode_amd_fam15h.bin」についての数行で、USBデバイスの初期化に失敗していることがわかります。

すると、lsusbすべてのUSBホストコントローラーが表示されますが、デバイスは表示されません。を実行すると、lspci予想されるすべてのハードウェアが表示されます。そして、lsmod私は(usb_ehciたとえば)ロードされたUSBモジュールが表示されません。

noapicカーネルブート文字列に渡そうとしましたが、この問題には影響しませんでした。

マザーボードはUSB 3.0をサポートしていますが、私が接続したすべてのデバイスは通常のUSB 2.0ポートに接続しています。

USB(およびオンボードネットワークカード)がLinuxで動作するのを殺したり防止したりすることに何となく困惑しています。BIOSで動作するこれらのデバイスのいずれにも問題はないようで、テストして動作するかどうかを確認するためのWindowsインストールがありません。

私はすでに一度マザーボードをRMAしましたが、2番目のものはまったく同じ動作をしているので、ハードウェア障害を安全に除外できると思います(動作が同じであるため、2つの同じ欠陥のあるボードを取得するという奇妙なことはないと思いますこれがLinuxの問題である確率よりも大きい)。

USB(そして理想的には私のネットワークですが、今はUSBに固執します)を機能させるには、他に何ができますか?

編集#1:

私はネットワークを持っていないので、dmesgここから興味深い部分だけを関連付けることができます。

興味深いのは、dmesg11個の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コントローラーにフォールバックしますが、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_commonusbcorexhci_hcdehci_hcd、およびohci_hcdすべてがロードされ、機能して。


マイクロコードのロードの失敗は独特のようです。マザーボードがまだサポートされていないか、マイクロコードパッケージが欠落していると考えています。
TNW

このCPUはしばらく使用されておらず、マイクロコードを更新するパッケージが存在するため、この問題は解消される可能性があります(butterflyofdream.wordpress.com/2012/09/10/…)。しかし、USBがBIOSで問題なく動作するときに、USBがLinuxで動作するのをどのように防ぐのだろうかと思っています。また、ネットワークデバイスが接続されない理由がわかるまで、パッチを適用できません(ただし、アドインカードを使用すると、今夜はこれを除外できます)。
BrionS

1
私はむしろ反対の方法で奇妙だと言いたいです。マザーボード上のすべてをサポートすることになっているBIOSはに持って仕事。Linuxにはありません。BIOSは、多くの場合、グラフィックカード用のVBEなど、単純化された方法でデバイスをサポートしますが、代わりにデバイスや通常のGPUドライバーを使用したくない場合があります。
TNW

だから、Linuxカーネルで(より良い?)サポートされるまで、BIOSがUSBおよびネットワークコントローラーのデバイスをLinuxに管理させるようにする方法はありますか?
-BrionS

そうは思いません。BIOSを介してすべてのデバイスにアクセスする時代は過ぎ去りました。ただし、問題がドライバーの不足によるものであることを保証することはできません。で何か面白いものを見つけましたかdmesgmodprobeUSB関連のモジュールを試してみましたか?
TNW

回答:


25

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

(少なくとも)新しいGigabyteメインボードでは、IOMMU Controllerデフォルトで無効になっているBIOSオプションがあり、それが何のためにあるのかについての手がかりや指示を与えていないようです。

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

私はかなりショックを受け、このような単純な修正のための非常に長い検索であったことを喜んでいます。

あなたの助けと提案をありがとう。これが他の人にも役立つことを願っています。

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


1
IOMMUをオンにしたのは効果的でしたが、すべての内部USB 3ポートが無効になったことを私は指摘します。また、以前はイーサネットポートでいくつかの問題が発生していましたが、IOMMUを有効にするとこれらの問題が修正されました。
ロビー

xHCI Handoffを有効にしてUSB 3.0ポートを修正しようとしましたか?
スチュアートP.ベントレー

@ StuartP.BentleyはいxHCIおよびeHCIハンドオフ設定とIOMMUコントローラーが有効になっています。これによりUSB 3.0ポートが有効になりますが、何らかの理由でUSBキーボードがBIOSまたはgrub画面で動作しません-ただし、USBマウスは動作します(図を参照)。BIOSを起動するためだけに2番目のPS / 2スタイルのキーボードが接続されています。
-BrionS

それだけではありません。すべてのubuntuフォーラムを調べてみると、IOMMU DISが有効なブートローダー設定(「iommu = soft」)が推奨されていることがわかります。GB 990FXA-UD3はデフォルトで有効になっており、外部USB3ハブを使用できませんでした。ボトムライン:これはあなたの問題を解決しないかもしれません。そうでない場合は、グーグルを続けます。
ブルース

USB2.0で最高のパフォーマンスを得るには、BIOSでEHCIハンドオフを無効にしておくことをお勧めします。
-Marc.2377

5

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

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

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

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

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

ギガバイトのボードでかなりの作業をしてきたので、990FXA-UD5と990FXA-UD3のボードは非常によく似たBIOSを持っているので、これらのボードにも同じことが当てはまるでしょう。


私はそれがあなたのために働くことをうれしく思います。正確にセットアップしています(256 GB SSD + / u(/ home)用のミラー化された3 TBドライブ)。USB3ポートは機能しますが、USB3ハブはハングしません。(まあ、サムドライブを使用できますが、キーボードやマウスは使用できません。)
ブルース

iommu=soft「レガシーのみ」を有効にすることなく、xHCI + eHICハンドオフおよびIOMMUコントローラー(すべて有効)と組み合わせて使用​​します。Arch Linuxのフルスピードブート、EFIおよびwitout iommuまたはusb3ルートデバイスの問題。


4

奇妙なことに、ほとんど同じセットアップ(同じマザーボード、FX8350プロセッサ)を持っているにもかかわらず、IOMMUを有効にしても何の違いもありませんでした。USB、ネットワーキングなどはまだありません

何がやった、カーネルコマンドラインに「IOMMUがソフト=」追加しましたが、助けを。これですべて正常に動作するようになりました(何らかの奇妙な理由により、Logitech Zone Touch Mouseが動作しないことを除きます)。


1
決して同じではありません。わずか数週間の製造日の違いでも、一般的なマザーボードコンポーネントやsuperioリビジョンの新しいソースになる可能性があります。回路基板の製造は、コンピューティングの陰に隠れています。
mikeserv 14年

3

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

しかし、欠点もあります。1つには、メガバイトのアドレス指定可能なメモリさえありません。そのため、最新のOSのリアルモードからの切り替えはほぼ最初に行われました。(実際には、grubはカーネルをロードする前に保護モードに切り替わると考えています)。

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


2

同じproc(ただし8コア)、同じMB(rev 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
ここでテキストで解決策を提供し、背景情報と重要でない詳細へのリンクのみを使用する方が便利です。それがなければ、リンクが無効になると、あなたの答えには価値がなくなります。
アントン

「これは修正ではありません。これは、ドライブを全速力で使用していないことを意味します。これは、切断された手足にバンドエイドをかけるようなものです。」
熱狂的な

2

これらの手順は、Ubuntu 15.04を実行しているGIGABYTE 970A-DS3PおよびAMD-FX-8320で機能しました

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

2

OpenSuse 13.1を使用するGigabyte 990FXA-UD3で同じFX8350を実行しています。私のために働いた解決策は、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がすべて動作し、インターネットネットワーキングも動作します!また、IOMMUがBIOSで有効になっていることを確認してください。


1

昨日、ASUSTek M5A99XマザーボードにUbuntuをインストールしているときにこの問題が発生しました。私の目的は、OSによるIOMMUの検出を修正するために、UbuntuをUEFIモードでUSBスティックから再インストールすることでした(私のシステムは「レガシー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スティックタイプを「Force Hard Disk」に変更する回避策がありますが、インストール後にシステムを起動すると他の問題が発生します。

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.