명령 줄에서 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 버스에서 제거한 다음 다시 스캔하여 다시 삽입합니다.
단계:
echo 1 >/sys/bus/pci/<pci-id-of-device>/remove
.lspci
명령으로 PCI ID를 찾을 수 있습니다 .echo 1 >/sys/bus/pci/rescan
여기에 버그가있는 pci 장치, 때로는 PCI 수준 재설정이 있으며 때로는이 제거 가능 트릭으로 문제를 해결합니다. 자동적으로 스크립트를 작성하려고합니다. 🙂