Vous pouvez supprimer un périphérique PCI en ajoutant une règle udev sous /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'"
Remplacer 0000:00:03.0
avec l'adresse du périphérique pci que vous souhaitez supprimer
Aucune des réponses n'a résolu mon problème similaire, mais elles m'ont mis sur la voie pour le résoudre !
Mon erreur syslog :
[ 334.940158] hub 1-0:1.0: unable to enumerate USB device on port 7
Il s'agit d'un hub-port USB interne pour une option Bluetooth que je n'ai pas.
la dissociation du périphérique pci a simplement fait apparaître le concentrateur comme un autre concentrateur (5 dans mon cas) et inondé davantage syslog.
Par hasard, j'ai remarqué une structure non liée sous /sys/bus/usb/drivers/hub
. En utilisant les exemples ci-dessus, je viens d'ajouter ce qui suit dans rc.local :
echo "1-0:1.0" > /sys/bus/usb/drivers/hub/unbind
Le résultat est le silence syslog ! Maintenant, ajoutez l'exemple de script de kshurig pour la gestion de l'alimentation et je devrais être en or.
J'ai récemment rencontré ce problème lors de la configuration de ma boîte xen avec plusieurs périphériques USB. Je voulais que l'un soit utilisé par Dom-0 et l'autre par une machine virtuelle, j'avais donc besoin que le périphérique soit disponible pour xen-pciback. Cependant, le pilote USB a été intégré à mon noyau, je ne pouvais donc pas simplement mettre le pilote sur liste noire. Ma solution consistait à créer un script initramfs personnalisé qui dissocie le port pci spécifique très tôt dans le processus de démarrage.
Il s'agit d'Ubuntu 2016.04, mais cela devrait fonctionner dans les versions antérieures.
Trois dossiers sont concernés. Je les ai nommés pour mon cas d'utilisation spécifique, mais ymmv :
Le premier fichier, nommé /etc/unbindpci
fichier qui est un simple csv du numéro de périphérique pci et du pilote (configurez si nécessaire ici) :
0000:08:00.0,xhci_hcd
0000:03:00.0,radeon
Deuxième fichier /etc/initramfs-tools/hooks/xenfiles
, qui copie la configuration ci-dessus dans initramfs.
#! /bin/bash
if [ -f /etc/unbindpci ]; then
cp -pP /etc/unbindpci $DESTDIR/etc/unbindpci
fi
Le troisième fichier est ce qui fait le travail au démarrage, je l'ai placé dans /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
Enfin, exécutez update-initramfs -k all -u
et redémarrez.
Je pourrais inclure la prise en charge des commentaires dans le fichier de configuration, et il y a beaucoup de nettoyage à faire ici, mais cela fonctionne pour moi.