Puede eliminar un dispositivo PCI agregando una regla udev en /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'"
Reemplazar 0000:00:03.0
con la dirección del dispositivo pci que desea eliminar
Ninguna de las respuestas resolvió mi problema similar, ¡pero me pusieron en el camino para resolverlo!
Mi error de registro del sistema:
[ 334.940158] hub 1-0:1.0: unable to enumerate USB device on port 7
Este es un puerto concentrador USB interno para una opción de bluetooth que no tengo.
la desvinculación del dispositivo pci resultó en que el concentrador volvió a aparecer como otro concentrador (5 en mi caso) e inundó aún más el syslog.
Por casualidad, noté una estructura de desvinculación en /sys/bus/usb/drivers/hub
. Usando los ejemplos anteriores, acabo de agregar lo siguiente en rc.local:
echo "1-0:1.0" > /sys/bus/usb/drivers/hub/unbind
¡El resultado es el silencio del syslog! Ahora para agregar el ejemplo de secuencia de comandos de kshrig para la administración de energía y debería ser dorado.
Recientemente me encontré con este problema al configurar mi xen box con varios dispositivos USB. Quería que uno fuera utilizado por Dom-0 y el otro por una máquina virtual, por lo que necesitaba que el dispositivo estuviera disponible para xen-pciback. Sin embargo, el controlador usb se compiló en mi kernel, por lo que no podía simplemente incluirlo en la lista negra. Mi solución fue crear un script initramfs personalizado que desvincula el puerto pci específico muy temprano en el proceso de arranque.
Este es Ubuntu 2016.04, pero debería funcionar en versiones anteriores.
Hay tres archivos involucrados. Los nombré para mi caso de uso específico, pero ymmv:
El primer archivo, llamado /etc/unbindpci
archivo que es un csv simple del número de dispositivo pci y el controlador (configure según sea necesario aquí):
0000:08:00.0,xhci_hcd
0000:03:00.0,radeon
Segundo archivo /etc/initramfs-tools/hooks/xenfiles
, que copia la configuración anterior en initramfs.
#! /bin/bash
if [ -f /etc/unbindpci ]; then
cp -pP /etc/unbindpci $DESTDIR/etc/unbindpci
fi
El tercer archivo es lo que hace el trabajo en el momento del arranque, lo coloqué en /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
Finalmente, ejecuta update-initramfs -k all -u
y reinicie.
Podría incluir soporte para comentarios en el archivo de configuración, y hay mucha limpieza que hacer aquí, pero funciona para mí.