GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Deaktivieren Sie bestimmte PCI-Geräte beim Booten

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.


Linux
  1. Linux – Deaktivieren Sie den drahtlosen Netzwerkadapter in Arch?

  2. Kann ich Dev-sda.device in Systemd-analyze deaktivieren?

  3. Ubuntu 16.04 – Wie kann ich Secure Boot deaktivieren?

  4. Größe der Bootpartition ändern

  5. Wie deaktiviere ich IPv6 auf einer bestimmten Schnittstelle in Linux?

Deaktivieren Sie die SSH-Passwortauthentifizierung für bestimmte Benutzer oder Gruppen

So deaktivieren Sie die SSH-Anmeldung für einen bestimmten Benutzer in Linux

So deaktivieren Sie UEFI Secure Boot in Windows 10

Mounten Sie das Gerät mit bestimmten Benutzerrechten

Verhindern, dass der Radeon-Treiber an bestimmte PCI-Geräte angeschlossen wird?

Wie deaktiviere ich MySQL unter Linux vom Starten beim Booten oder Statup?