Sony VAIOラップトップにDebianを再インストールしたところ、dmesg
と仮想コンソールがすべて同じメッセージで何度もスパム送信されています。
[ 59.662381] hub 1-1:1.0: unable to enumerate USB device on port 2
[ 59.901732] usb 1-1.2: new high-speed USB device number 91 using ehci_hcd
[ 59.917940] hub 1-1:1.0: unable to enumerate USB device on port 2
[ 60.157256] usb 1-1.2: new high-speed USB device number 92 using ehci_hcd
これらのメッセージは、内部的に接続されたUSBデバイス、おそらくWebカメラから送信されていると思います(それが機能しないのはこのためです)。 (実際に役立つUSBポートを強制終了せずに)シャットダウンしたように見える唯一の方法は、USBホストコントローラーの1つを無効にすることです。
# echo "0000:00:1a.0" > /sys/bus/pci/drivers/ehci_hcd/unbind
これは私のBluetoothインターフェースもダウンさせますが、私はそれで大丈夫です。
この設定を維持したいので、必要に応じて仮想コンソールを簡単に再度使用できます。私のオペレーティングシステム(Debian AMD64)が起こさないようにしたいのですが、これを行う方法がわかりません。 PCIデバイスのモジュールエイリアスをブラックリストに登録しようとしましたが、無視されているようです:
$ cat /sys/bus/pci/devices/0000\:00\:1a.0/modalias
pci:v00008086d00003B3Csv0000104Dsd00009071bc0Csc03i20
$ cat /etc/modprobe.d/blacklist
blacklist pci:v00008086d00003B3Csv0000104Dsd00009071bc0Csc03i20
ドライバーを完全に無効にすることなく、この特定のPCIデバイスが自動的にアクティブ化されないようにするにはどうすればよいですか?
-edit-モジュールの名前が最近変更されましたが、ユーザーランドから次のように動作します:
echo "0000:00:1a.0" > /sys/bus/pci/drivers/ehci-pci/unbind
それでも、そもそもカーネルがそのデバイスをバインドしないようにする方法を探しています。
最近、複数の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
を実行して再起動します。
構成ファイルにコメントのサポートを含めることができます。ここで行うクリーンアップはたくさんありますが、私にとってはうまくいきます。
/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
の下にバインドされていない構造があることに気づきました。上記の例を使用して、rc.localに次のコードを追加しました。
echo "1-0:1.0" > /sys/bus/usb/drivers/hub/unbind
結果は、syslog silenceです。ここで、電源管理のためのkshurigのスクリプト例を追加すると、私は黄金のはずです。
Askubuntuでこのスレッドを見つけました:
lspci -vv
を使用して、無効にするデバイスのPCIスロットを特定すると、次のコマンドを使用してそのスロットのデバイスをオフにできるように思えます。
% echo 0 > /sys/bus/pci/slot/$N/power
ブート用のecho "0000:00:1a.0" > /sys/bus/pci/drivers/ehci_hcd/unbind
に/etc/rc.local
がすでにある場合は、電源管理デーモン用のスクリプトに追加するだけで済みます。
次のようになります:0_disable_webcam
という名前の実行可能なbashスクリプトファイルをディレクトリ/etc/pm/sleep.d/
に作成します。
#!/bin/sh
case "$1" in
resume|thaw)
echo "0000:00:1a.0" > /sys/bus/pci/drivers/ehci_hcd/unbind
;;
esac
すぐに動作するはずです。私は、USBサムドライブで試してみましたが、ドライブが接続されている限り、機能していました(無効のままでした)。再接続にはudevルールが必要ですが、Webカメラは接続解除されないため、機能するはずです。それでうまくいかない場合は、別の提案をします。
回避策ほど質問に対する回答ではありません。
Syslog /を変更して、コンソールへのメッセージのロギングを単に抑制しないのはなぜですか(syslogまたはrsyslogなどを使用しているかどうかはわかりません。そのため、正確に正しいディレクトリを示すことはできませんが、 Syslog設定ファイルで「コンソール」と「tty」を検索します。これにより、適切な出発点が得られます。実際、おそらくコンソールを/ dev/tty1に変更し、メッセージをすべてではなくtty1にのみ記録することができます。コンソール。
他の解決策(あなたの質問には答えますが、私は好きではありません)は、ehci_hcdモジュール(ロードされている場合)をブラックリストに載せるか、カーネルを再コンパイルして、モジュールのみを使用することができます。 h ttp://www.cyberciti.biz/faq/rhel-redhat-centos-kernel-usb-reset-high-speed-ehci_hcd/ を見てください。これは、あなたが求めている質問を正確に解決します