GNU/Linux >> Linux の 問題 >  >> Linux

起動時に特定の PCI デバイスを無効にする

/etc/udev/rules.d の下に udev ルールを追加することで PCI デバイスを削除できます:

ACTION=="add", KERNEL=="0000:00:03.0", SUBSYSTEM=="pci", RUN+="/bin/sh -c 'echo 1 > /sys/bus/pci/devices/0000:00:03.0/remove'"

0000:00:03.0 を置き換えます 削除したい PCI デバイスのアドレス


答えのどれも私の同様の問題を解決しませんでしたが、それらは私を解決への道に導きました!

私の syslog エラー:

[  334.940158] hub 1-0:1.0: unable to enumerate USB device on port 7

これは、私が持っていない Bluetooth オプション用の内部 USB ハブ ポートです。

pci デバイスへのバインドを解除すると、ハブが別のハブ (私の場合は 5) としてポップアップし、syslog がさらにフラッディングされます。

たまたま /sys/bus/usb/drivers/hub の下に unbind 構造があることに気付きました .上記の例を使用して、rc.local に以下を追加しました:

echo "1-0:1.0" > /sys/bus/usb/drivers/hub/unbind

結果は syslog サイレンスです!ここで、kshurig の電源管理用のスクリプトの例を追加します。これで、私は金色になるはずです。


最近、複数の USB デバイスを使用して xen ボックスを構成しているときに、この問題に遭遇しました。 1 つを Dom-0 で使用し、もう 1 つを VM で使用したかったので、デバイスを xen-pciback で使用できるようにする必要がありました。ただし、usb ドライバーはカーネルに組み込まれていたため、ドライバーを単にブラックリストに登録することはできませんでした。私の解決策は、起動プロセスの非常に早い段階で特定の pci ポートのバインドを解除するカスタム initramfs スクリプトを作成することでした。

これは Ubuntu 2016.04 ですが、以前のバージョンでも動作するはずです。

関連する 3 つのファイルがあります。特定のユースケースに合わせて名前を付けましたが、ymmv:

/etc/unbindpci という名前の最初のファイル pci デバイス番号とドライバーの単純な csv であるファイル (必要に応じてここで構成):

0000:08:00.0,xhci_hcd
0000:03:00.0,radeon

2 番目のファイル /etc/initramfs-tools/hooks/xenfiles 、上記の構成を initramfs にコピーします。

#! /bin/bash

if [ -f /etc/unbindpci ]; then
  cp -pP /etc/unbindpci $DESTDIR/etc/unbindpci
fi

3 番目のファイルは、起動時に機能するもので、 /etc/initramfs-tools/scripts/init-top/unbind-early-pci に配置しました :

#!/bin/sh

PREREQ=""
prereqs()
{
        echo "$PREREQ"
}
case $1 in
# get pre-requisites
prereqs)
        prereqs
        exit 0
        ;;
esac

# This only executes if in a xen Dom-0.
# Edit if that's not your use case!          
if [ -f /sys/hypervisor/uuid -a -f /etc/unbindpci ]; then
        if [ $(cat /sys/hypervisor/uuid) = "00000000-0000-0000-0000-000000000000" ]; then
                echo "Unbinding pci ports..."
                IFS=,
                while read addr driver; do
                        if [ -f /sys/bus/pci/drivers/$driver/unbind ]; then
                                echo "Unbinding $addr, device $driver"
                                echo $addr > /sys/bus/pci/drivers/$driver/unbind
                        fi
                done < /etc/unbindpci
        fi
fi

最後に、update-initramfs -k all -u を実行します そして再起動してください。

構成ファイルにコメントのサポートを含めることができます。ここで行うクリーンアップはたくさんありますが、私にとってはうまくいきます。


Linux
  1. Linux – Archでワイヤレスネットワークアダプタを無効にしますか?

  2. setpci コマンド – PCI デバイスを構成する

  3. Cを使用して特定のメモリアドレスを取得する方法

  1. 組み込みデバイスにブートローダーが必要なのはなぜですか?

  2. Radeon ドライバーが特定の PCI デバイスに接続できないようにしますか?

  3. Linux の特定のインターフェイスで ipv6 を無効にする方法は?

  1. Dev-sda.device Systemd-analyzeで、無効にできますか?

  2. Ubuntu 16.04 –セキュアブートを無効にするにはどうすればよいですか?

  3. 特定の時間に Linux デバイスをウェイクアップすることは可能ですか?