Linux'ta PCI Aygıtını Sıfırlama


12

Linux'ta bir PCI aygıtını komut satırından sıfırlamanın genel bir yolu var mı? Yani, PCI veri yolunun bir sıfırlama komutu vermesine neden olur.

Yanıtlar:


6

http://www.kernel.org/doc/Documentation/ABI/testing/sysfs-bus-pci uyarınca, destekleniyorsa cihazın ayrı işlevlerini sıfırlayabilirsiniz:

What:       /sys/bus/pci/devices/.../reset
Description:
            Some devices allow an individual function to be reset
            without affecting other functions in the same device.
            For devices that have this support, a file named reset
            will be present in sysfs.  Writing 1 to this file
            will perform reset.

5

PCI veri yolunun cihaz düzeyinde sıfırlanmasına en yakın şey, güç durumunu D3'e ve tekrar D0'a değiştirmektir. Sürücüyü kaldırdıktan sonra (donanımı sürücünün altından sıfırlamak kötü olurdu), setpcigüç durumunu değiştirmek için kontrol kayıtlarına yazmak için kullanabilirsiniz , ancak sürücüyü kaldırdığınızda bunun otomatik olarak gerçekleştiğine inanıyorum.


1

Genel bir PCI aygıt çalışırken takılabilir olmadığından, cihazı sıfırlamanın ve çekirdeği yeniden numaralandırmanın bir yolu olmayacaktır.

Çözmeye çalıştığınız sorunlar ne olursa olsun, kesinlikle sıfırlamaktan daha iyi bir yol var.


4
QEMU'da bir PCI aygıtını simüle ediyorum ve geliştirirken durumunu sıfırlamam gerekiyor. Konuk içinden yapmak istedim.
Jonathan

1
Ben bir arabası pci cctv kart var, çalışıyor ama bazen bir segfault ile ölür. Bundan sonra, tüm sistemin yeniden başlatılması gerekir, bir PCI sıfırlama ile bu önlenebilir olabilir ... Sistem kararlı, zarar vermez, sadece video girişi boş kalır, bu nedenle bazen PCI'yi yeniden başlatmaktan daha iyi bir çözümdür tüm makine her gün. (özellikle 6 ay boyunca bu makineden
8000km uzaktaysanız

1

Yukarıdaki çözümlerle ilgili sorun, cihazın işbirliğini gerektirmesidir; ancak çoğu senaryoda bunu sıfırlamanın nedeni tam olarak işbirlikçi olmamasıdır.

Ancak, burada açıklandığı gibi , PCI düzeyinde sıfırlamanın başka bir "daha zor" yolu vardır: PCI veriyolundan çıkarırız ve sonra yeniden taramayla yeniden takarız.

Adımlar:

  1. echo 1 >/sys/bus/pci/<pci-id-of-device>/remove. PCI kimliğini bir lspcikomutla bulabiliriz.
  2. echo 1 >/sys/bus/pci/rescan

Burada buggy pci cihazım var, bazen PCI seviyesinde sıfırlama var, bazen bu kaldırma-okuma hilesi onu düzeltir. Ben otomatik olarak yapmak için bir senaryo yazmak üzereyim. :-)


Ugh. USB denetleyicim bu sıfırlamadan sonra bile hala hatalı.
Chris

@Chris Bunun üzerindeki bir aygıt değil, denetleyici olduğundan emin misiniz?
peterh - Monica

Evet, eminim denetleyici 00:14.0 USB controller: Intel Corporation 200 Series/Z370 Chipset Family USB 3.0 xHCI Controller. VFIO aracılığıyla VM'ye geçiyorum ve VM yeniden başlatıldıktan sonra, tekrar çalışması için ana bilgisayarı yeniden başlatmam gerekiyor, aksi takdirde takılı herhangi bir USB tespit ediliyor, ancak iletişim başarısız oluyor.
Chris
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.