GNU/Linux >> Linux Esercitazione >  >> Linux

disabilitare un dispositivo PCI specifico all'avvio

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.


Linux
  1. Dev-sda.device In Systemd-analyze, posso disabilitarlo?

  2. Ubuntu 16.04 – Come posso disabilitare l'avvio protetto?

  3. comando setpci:configura il dispositivo PCI

  4. Come ottenere un indirizzo di memoria specifico usando C

  5. Perché abbiamo bisogno di un bootloader in un dispositivo integrato?

Disabilita l'autenticazione con password SSH per utenti o gruppi specifici

Come disabilitare l'accesso SSH a un utente specifico in Linux

Come disabilitare UEFI Secure Boot in Windows 10

Ridimensionamento della partizione di avvio

Come disabilitare ipv6 su un'interfaccia specifica in Linux?

è possibile riattivare un dispositivo Linux in un momento specifico