GNU/Linux >> Belajar Linux >  >> Linux

nonaktifkan perangkat PCI tertentu saat boot

Anda dapat menghapus perangkat PCI dengan menambahkan aturan udev di bawah /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'"

Ganti 0000:00:03.0 dengan alamat perangkat pci yang ingin Anda hapus


Tidak ada jawaban yang menyelesaikan masalah saya yang serupa, tetapi mereka menempatkan saya di jalur untuk menyelesaikannya!

Kesalahan syslog saya:

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

Ini adalah port hub usb internal untuk opsi bluetooth yang tidak saya miliki.

unbind ke perangkat pci hanya mengakibatkan hub muncul kembali sebagai hub lain (5 dalam kasus saya) dan membanjiri syslog lebih lanjut.

Secara kebetulan saya melihat struktur unbind di bawah /sys/bus/usb/drivers/hub . Menggunakan contoh di atas, saya baru saja menambahkan yang berikut di rc.local:

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

Hasilnya adalah keheningan syslog! Sekarang untuk menambahkan contoh skrip kshurig untuk manajemen daya dan saya harus menjadi emas.


Saya baru-baru ini mengalami masalah ini saat mengonfigurasi kotak xen saya dengan beberapa perangkat usb. Saya ingin satu digunakan oleh Dom-0, dan yang lainnya digunakan oleh VM, jadi saya membutuhkan perangkat yang tersedia untuk xen-pciback. Namun, driver usb sudah sesuai dengan kernel saya, jadi saya tidak bisa begitu saja memasukkan driver ke daftar hitam. Solusi saya adalah membuat skrip initramfs khusus yang melepaskan port pci tertentu di awal proses booting.

Ini adalah Ubuntu 2016.04, tetapi seharusnya berfungsi di versi sebelumnya.

Ada tiga file yang terlibat. Saya menamainya untuk kasus penggunaan khusus saya, tetapi ymmv:

File pertama, bernama /etc/unbindpci file yang merupakan csv sederhana dari nomor perangkat pci dan driver (konfigurasikan seperlunya di sini):

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

File kedua /etc/initramfs-tools/hooks/xenfiles , yang menyalin konfigurasi di atas ke dalam initramfs.

#! /bin/bash

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

File ketiga adalah apa yang berfungsi saat boot, saya menempatkannya di /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

Terakhir, jalankan update-initramfs -k all -u dan reboot.

Saya dapat menyertakan dukungan untuk komentar di file konfigurasi, dan ada banyak pembersihan yang harus dilakukan di sini, tetapi ini berhasil untuk saya.


Linux
  1. Nonaktifkan aplikasi pihak ketiga dengan boot bersih di Windows

  2. perintah setpci – konfigurasikan perangkat PCI

  3. Mengapa kita membutuhkan bootloader di perangkat tertanam?

  1. Mengubah ukuran partisi boot

  2. Pasang perangkat dengan hak pengguna tertentu

  3. nonaktifkan aturan udev MTP untuk perangkat tertentu sehingga dapat dipasang sebagai perangkat Penyimpanan Massal USB

  1. Linux – Nonaktifkan Adaptor Jaringan Nirkabel Di Arch?

  2. Dev-sda.device Di Systemd-analyze, Bisakah Saya Menonaktifkannya?

  3. Ubuntu 16.04 – Bagaimana Saya Dapat Menonaktifkan Boot Aman?