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.