Sie können ein PCI-Gerät entfernen, indem Sie eine udev-Regel unter /etc/udev/rules.d hinzufügen:
ACTION=="add", KERNEL=="0000:00:03.0", SUBSYSTEM=="pci", RUN+="/bin/sh -c 'echo 1 > /sys/bus/pci/devices/0000:00:03.0/remove'"
Ersetzen Sie 0000:00:03.0
mit der PCI-Geräteadresse, die Sie entfernen möchten
Keine der Antworten hat mein ähnliches Problem gelöst, aber sie haben mich auf den Weg gebracht, es zu lösen!
Mein Syslog-Fehler:
[ 334.940158] hub 1-0:1.0: unable to enumerate USB device on port 7
Dies ist ein interner USB-Hub-Port für eine Bluetooth-Option, die ich nicht habe.
Das Aufheben der Bindung an das PCI-Gerät führte nur dazu, dass der Hub als weiterer Hub (in meinem Fall 5) wieder auftauchte und Syslog weiter überschwemmte.
Zufällig ist mir unter /sys/bus/usb/drivers/hub
eine Unbind-Struktur aufgefallen . Unter Verwendung der obigen Beispiele habe ich einfach Folgendes in rc.local hinzugefügt:
echo "1-0:1.0" > /sys/bus/usb/drivers/hub/unbind
Ergebnis ist Syslog-Stille! Um nun das Skriptbeispiel von kshrig für die Energieverwaltung hinzuzufügen, sollte ich golden sein.
Ich bin kürzlich auf dieses Problem gestoßen, als ich meine Xen-Box mit mehreren USB-Geräten konfiguriert habe. Ich wollte, dass eines von Dom-0 und das andere von einer VM verwendet wird, also musste das Gerät für xen-pciback verfügbar sein. Der USB-Treiber wurde jedoch in meinen Kernel kompiliert, sodass ich den Treiber nicht einfach auf die schwarze Liste setzen konnte. Meine Lösung bestand darin, ein benutzerdefiniertes initramfs-Skript zu erstellen, das den spezifischen PCI-Port sehr früh im Boot-Prozess entbindet.
Dies ist Ubuntu 2016.04, sollte aber in früheren Versionen funktionieren.
Es sind drei Dateien beteiligt. Ich habe sie für meinen speziellen Anwendungsfall benannt, aber ymmv:
Die erste Datei namens /etc/unbindpci
Datei, die eine einfache CSV-Datei der PCI-Gerätenummer und des Treibers ist (konfigurieren Sie sie hier nach Bedarf):
0000:08:00.0,xhci_hcd
0000:03:00.0,radeon
Zweite Datei /etc/initramfs-tools/hooks/xenfiles
, das die obige Konfiguration in das initramfs kopiert.
#! /bin/bash
if [ -f /etc/unbindpci ]; then
cp -pP /etc/unbindpci $DESTDIR/etc/unbindpci
fi
Die dritte Datei erledigt die Arbeit beim Booten, ich habe sie in /etc/initramfs-tools/scripts/init-top/unbind-early-pci
abgelegt :
#!/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
Führen Sie abschließend update-initramfs -k all -u
aus und neu starten.
Ich könnte Unterstützung für Kommentare in die Konfigurationsdatei aufnehmen, und hier gibt es eine Menge Aufräumarbeiten zu erledigen, aber es funktioniert für mich.