Linux에서 PCI 장치 재설정


12

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

답변:


6

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.

5

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


1

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

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


4
QEMU에서 PCI 장치를 시뮬레이션하고 있으며 개발할 때 상태를 재설정해야합니다. 나는 손님 안에서 그것을하고 싶었다.
Jonathan

1
버그가있는 pci cctv 카드가 있는데 작동하지만 때로는 segfault로 죽습니다. 그 후, 전체 시스템을 다시 시작해야합니다 (PCI 재설정으로 피할 수 있음). 시스템이 안정적이며 손상되지 않으며 비디오 입력 만 공백으로 표시되므로 때때로 다시 시작하는 것보다 PCI를 재설정하는 것이 더 나은 방법입니다 매일 전체 기계. (특히 6 개월 동안 해당 기계에서 8000km 떨어져있는 경우)
Gipsz Jakab

1

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

그러나 여기 에 설명 된 것처럼 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 수준 재설정이 있으며 때로는이 제거 가능 트릭으로 문제를 해결합니다. 자동적으로 스크립트를 작성하려고합니다. :-)


어. 이 재설정 후에도 USB 컨트롤러가 여전히 버그가 있습니다.
크리스

@Chris 컨트롤러가 아닌 컨트롤러인지 확인하십시오.
peterh-Reinstate Monica

예, 컨트롤러라고 확신합니다 00:14.0 USB controller: Intel Corporation 200 Series/Z370 Chipset Family USB 3.0 xHCI Controller. VFIO를 통해 VM에 전달하고 VM을 재부팅 한 후 호스트를 재부팅해야 다시 작동해야합니다. 그렇지 않으면 연결된 USB가 감지되지만 통신이 실패합니다.
크리스
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.