Linux에서 PCI 장치 재설정 방법이 있습니까? 즉, PCI 버스가 재설정

명령 줄에서 Linux의 PCI 장치를 재설정하는 일반적인 방법이 있습니까? 즉, PCI 버스가 재설정 명령을 발행하게합니다.



답변

http://www.kernel.org/doc/Documentation/ABI/testing/sysfs-bus-pci 에 따르면 지원되는 장치의 개별 기능을 재설정 할 수 있습니다.

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.


답변

PCI 버스가 장치 수준 재설정에 가장 가까운 것은 전원 상태를 D3으로 변경하고 다시 D0으로 변경하는 것입니다. 드라이버를 언로드 한 후 (드라이버에서 하드웨어를 재설정하는 것은 좋지 않습니다) setpci전원 상태를 변경하기 위해 제어 레지스터에 쓰는 데 사용할 수 있지만 드라이버를 언로드하면 자동으로 발생한다고 생각합니다.


답변

일반 PCI 장치는 핫 플러그 ​​가능하지 않으므로 장치를 재설정하고 커널에서 다시 열거 할 수 없습니다.

어떤 종류의 문제를 해결하려고하더라도 반드시 재설정하는 것보다 더 좋은 방법이 있습니다.


답변

위의 솔루션의 문제점은 장치의 협력이 필요하다는 것입니다. 그러나 대부분의 시나리오에서이를 재설정하는 이유는 비 협조성입니다.

그러나 여기 에 설명 된 것처럼 PCI 수준에서 다시 설정하는 또 다른 “더 어려운”방법이 있습니다. PCI 버스에서 제거한 다음 다시 스캔하여 다시 삽입합니다.

단계:

  1. echo 1 >/sys/bus/pci/<pci-id-of-device>/remove. lspci명령으로 PCI ID를 찾을 수 있습니다 .
  2. echo 1 >/sys/bus/pci/rescan

여기에 버그가있는 pci 장치, 때로는 PCI 수준 재설정이 있으며 때로는이 제거 가능 트릭으로 문제를 해결합니다. 자동적으로 스크립트를 작성하려고합니다. 🙂


답변