GNU/Linux >> Tutoriels Linux >  >> Linux

désactiver un périphérique PCI spécifique au démarrage

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.


Linux
  1. Linux - Désactiver l'adaptateur réseau sans fil dans Arch ?

  2. Désactiver les applications tierces avec un démarrage propre dans Windows

  3. CentOS / RHEL 5 :Comment désactiver le multipath du mappeur de périphérique (dm-multipath)

  4. Empêcher le pilote Radeon de se connecter à des périphériques PCI spécifiques ?

  5. est-il possible de réveiller un appareil Linux à une heure précise

Désactiver l'authentification par mot de passe SSH pour un utilisateur ou un groupe spécifique

Comment désactiver la connexion SSH à un utilisateur spécifique sous Linux

Comment désactiver le démarrage sécurisé UEFI dans Windows 10

Comment désactiver ipv6 sur une interface spécifique sous Linux ?

désactiver les règles MTP udev pour un périphérique spécifique afin qu'il puisse être monté en tant que périphérique de stockage de masse USB

Comment puis-je désactiver MySQL sur Linux à partir du démarrage ou du statup ?