Puoi rimuovere un dispositivo PCI aggiungendo una regola udev in /etc/udev/rules.d :
ACTION=="add", KERNEL=="0000:00:03.0", SUBSYSTEM=="pci", RUN+="/bin/sh -c 'echo 1 > /sys/bus/pci/devices/0000:00:03.0/remove'"
Sostituisci 0000:00:03.0
con l'indirizzo del dispositivo pci che desideri rimuovere
Nessuna delle risposte ha risolto il mio problema simile, ma mi hanno messo sulla strada per risolverlo!
Il mio errore di syslog:
[ 334.940158] hub 1-0:1.0: unable to enumerate USB device on port 7
Questa è una porta hub USB interna per un'opzione bluetooth che non ho.
l'annullamento del collegamento al dispositivo pci ha appena provocato il ripristino dell'hub come un altro hub (5 nel mio caso) e il flooding di syslog ulteriormente.
Per caso ho notato una struttura unbind sotto /sys/bus/usb/drivers/hub
. Usando gli esempi sopra ho appena aggiunto quanto segue in rc.local:
echo "1-0:1.0" > /sys/bus/usb/drivers/hub/unbind
Il risultato è il silenzio syslog! Ora per aggiungere l'esempio di script di kshurig per la gestione dell'alimentazione e dovrei essere d'oro.
Di recente mi sono imbattuto in questo problema durante la configurazione della mia scatola xen con più dispositivi USB. Volevo che uno fosse utilizzato da Dom-0 e l'altro da una VM, quindi avevo bisogno che il dispositivo fosse disponibile per xen-pciback. Tuttavia, il driver USB è stato inserito nel mio kernel, quindi non potevo semplicemente inserire nella blacklist il driver. La mia soluzione è stata quella di creare uno script initramfs personalizzato che sleghi la porta pci specifica molto presto nel processo di avvio.
Questo è Ubuntu 2016.04, ma dovrebbe funzionare nelle versioni precedenti.
Ci sono tre file coinvolti. Li ho nominati per il mio caso d'uso specifico, ma ymmv:
Il primo file, denominato /etc/unbindpci
file che è un semplice csv del numero del dispositivo pci e del driver (configurare come necessario qui):
0000:08:00.0,xhci_hcd
0000:03:00.0,radeon
Secondo file /etc/initramfs-tools/hooks/xenfiles
, che copia la configurazione precedente in initramfs.
#! /bin/bash
if [ -f /etc/unbindpci ]; then
cp -pP /etc/unbindpci $DESTDIR/etc/unbindpci
fi
Il terzo file è ciò che funziona all'avvio, l'ho inserito in /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
Infine, esegui update-initramfs -k all -u
e riavvia.
Potrei includere il supporto per i commenti nel file di configurazione e c'è un sacco di pulizia da fare qui, ma per me funziona.