GNU/Linux >> Znalost Linux >  >> Linux

zakázat konkrétní PCI zařízení při bootování

Zařízení PCI můžete odebrat přidáním pravidla udev do /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'"

Nahraďte 0000:00:03.0 s adresou zařízení pci, které chcete odstranit


Žádná z odpovědí nevyřešila můj podobný problém, ale přivedly mě na cestu k jeho vyřešení!

Moje chyba syslog:

[  334.940158] hub 1-0:1.0: unable to enumerate USB device on port 7

Toto je interní USB hub-port pro bluetooth možnost, kterou nemám.

unbind to pci device právě vyústilo v to, že se rozbočovač znovu objevil jako další rozbočovač (v mém případě 5) a dále zahltil syslog.

Náhodou jsem si všiml unbind struktury pod /sys/bus/usb/drivers/hub . Pomocí výše uvedených příkladů jsem právě přidal následující do rc.local:

echo "1-0:1.0" > /sys/bus/usb/drivers/hub/unbind

Výsledkem je ticho syslog! Nyní přidám kshurigův příklad skriptu pro správu napájení a měl bych být zlatý.


Nedávno jsem narazil na tento problém při konfiguraci mého xen boxu s více zařízeními USB. Chtěl jsem, aby jeden používal Dom-0 a druhý využíval VM, takže jsem potřeboval, aby bylo zařízení dostupné pro xen-pciback. Ovladač usb byl však v mém jádře kompatibilní, takže jsem nemohl ovladač jen tak zakázat. Mým řešením bylo vytvořit vlastní skript initramfs, který odpojí konkrétní port pci velmi brzy v procesu zavádění.

Toto je Ubuntu 2016.04, ale mělo by fungovat v dřívějších verzích.

Jedná se o tři soubory. Pojmenoval jsem je pro svůj konkrétní případ použití, ale ymmv:

První soubor s názvem /etc/unbindpci soubor, což je jednoduchý csv s číslem zařízení pci a ovladačem (zde nakonfigurujte podle potřeby):

0000:08:00.0,xhci_hcd
0000:03:00.0,radeon

Druhý soubor /etc/initramfs-tools/hooks/xenfiles , který zkopíruje výše uvedenou konfiguraci do initramfs.

#! /bin/bash

if [ -f /etc/unbindpci ]; then
  cp -pP /etc/unbindpci $DESTDIR/etc/unbindpci
fi

Třetí soubor je to, co funguje při startu, umístil jsem ho do /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

Nakonec spusťte update-initramfs -k all -u a restartujte.

Do konfiguračního souboru bych mohl zahrnout podporu pro komentáře a je zde spousta věcí, které je třeba vyčistit, ale pro mě to funguje.


Linux
  1. Zakažte aplikace třetích stran pomocí čistého spuštění ve Windows

  2. Změna velikosti spouštěcího oddílu

  3. Připojte zařízení se specifickými uživatelskými právy

  1. Linux – Zakázat bezdrátový síťový adaptér v Arch?

  2. je možné probudit linuxové zařízení v určitou dobu

  3. Jak mohu zakázat spuštění MySQL v Linuxu při spuštění nebo při spuštění?

  1. Dev-sda.device Mohu ji v Systemd-analyze zakázat?

  2. Ubuntu 16.04 – Jak mohu zakázat zabezpečené spouštění?

  3. CentOS / RHEL 5:Jak zakázat vícecestný mapovač zařízení (dm-multipath)