GNU/Linux >> Tutoriales Linux >  >> Linux

deshabilitar un dispositivo PCI específico en el arranque

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í.


Linux
  1. Dev-sda.device en Systemd-analyze, ¿puedo deshabilitarlo?

  2. Ubuntu 16.04:¿cómo puedo desactivar el arranque seguro?

  3. Deshabilite las aplicaciones de terceros con un inicio limpio en Windows

  4. CentOS / RHEL 5:Cómo deshabilitar la ruta múltiple del mapeador de dispositivos (dm-multipath)

  5. Cómo deshabilitar un comando específico para un usuario específico en Linux

Deshabilitar la autenticación de contraseña SSH para un usuario o grupo específico

Cómo deshabilitar el inicio de sesión SSH para un usuario específico en Linux

Cómo deshabilitar el arranque seguro UEFI en Windows 10

¿Es posible activar un dispositivo Linux en un momento específico?

deshabilite las reglas MTP udev para un dispositivo específico para que pueda montarse como un dispositivo de almacenamiento masivo USB

¿Cómo deshabilito MySQL en Linux para que no se inicie en el arranque o la instalación?