Linux에서 PCI 장치 재설정

Linux에서 PCI 장치 재설정

명령줄에서 Linux의 PCI 장치를 재설정하는 보편적인 방법이 있습니까? PCI 버스가 재설정 명령을 발행하는 경우에도 마찬가지입니다.

답변1

~에 따르면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.

답변2

위 해결 방법의 문제점은 장치의 협조가 필요하다는 것입니다. 그러나 대부분의 경우 장치를 재설정하는 이유는 바로 장치의 협조가 부족하기 때문입니다.

그러나 설명된 바와 같이여기, PCI 레벨에서 재설정하는 또 다른 "더 어려운" 방법이 있습니다. PCI 버스에서 제거하고 다시 검색하여 다시 삽입하는 것입니다.

단계:

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

여기에 문제가 있는 pci 장치가 있고 때로는 PCI 레벨 재설정이 있으며 때로는 이 삭제 읽기 트릭으로 문제가 해결됩니다. 나는 이것을 자동화하는 스크립트를 작성하려고 합니다. :-)

답변3

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

답변4

일반 PCI 장치는 핫 플러그가 가능하지 않기 때문에 이를 재설정하고 커널이 이를 다시 열거하도록 할 수 있는 방법이 없습니다.

어떤 유형의 문제를 해결하려고 하든 재설정보다 더 좋은 방법이 분명히 있습니다.

관련 정보