부팅 시 PCIe 장치를 비활성화하는 방법은 무엇입니까?

부팅 시 PCIe 장치를 비활성화하는 방법은 무엇입니까?

NVIDIA 그래픽 카드가 일시 중지 상태에서 다시 시작되는 문제를 디버깅하려고 합니다.이 스레드HDMI 카드를 출력하는 오디오 장치에 문제가 있는 것으로 생각됩니다. 장치를 비활성화하고 싶지만 udev 규칙과 커널 매개변수가 아무런 효과가 없습니다. 이러한 방법이 작동하지 않는 문제를 해결하거나 다른 방법을 사용하여 장치가 문제를 일으킬 가능성을 완전히 배제할 수 있도록 비활성화하려면 어떻게 해야 합니까?

sudo lspci -vv내 관련 장치에 대한 출력(관련 없는 필드가 제거됨):

58:00.1 Audio device: NVIDIA Corporation Device 10fa (rev a1)
    Subsystem: Micro-Star International Co., Ltd. [MSI] Device 3800
    Control: (...)
    Status: (...)
    Latency: 0
    Interrupt: pin B routed to IRQ 18
    IOMMU group: 19
    Region 0: Memory at 61080000 (32-bit, non-prefetchable) [size=16K]
    Capabilities: (...)
    Kernel driver in use: snd_hda_intel
    Kernel modules: snd_hda_intel

lspci -nns 58:00.1:

58:00.1 Audio device [0403]: NVIDIA Corporation Device [10de:10fa] (rev a1)

내가 시도한 것:

  • udev 규칙:
cat /etc/udev/rules.d/10-remove-nvidia-audio.rules 
ACTION==“add”, KERNEL=="0000:58:00.1", SUBSYSTEM=="pci", RUN="/bin/sh -c ‘echo 1 > /sys/bus/pci/devices/0000:58:00.1/remove’"

RUN 명령을 수동으로 실행하면 장치 연결이 끊어지지만 정지 문제가 지속되며 장치가 재개 시 다시 연결되는지 알 수 없습니다( journalctl재개에 관한 내용은 기록되지 않고 정지 작업만 기록됩니다. 컴퓨터를 다시 사용하기 전에 강제로 전원을 끄려면). udev 규칙을 적용하려면 추가로 수행해야 할 작업이 있나요?

  • 커널 매개변수를 사용해 보세요.이 방법:
pcistub=pci-stub.ids=10de:10fa

제가 검토한 답변에 설명된 다른 방법은 snd_hda_intel실제 오디오 출력에도 사용되기 때문에 사용할 수 없습니다.

어떤 제안이라도 감사하겠습니다. 감사해요!

답변1

시작 시 장치를 제거하는 시스템 서비스를 만들어 이 작업을 수행했습니다.

서비스 본문은 다음과 같습니다.

# systemctl cat remove-nvidia
# /etc/systemd/system/remove-nvidia.service
[Unit]
Description=removes pci nvidia upon boot

[Service]
Type=oneshot
User=root
RemainAfterExit=true
ExecStart=/usr/bin/bash -c "echo 1 > /sys/bus/pci/devices/0000:01:00.0/remove"
 
[Install]
WantedBy=multi-user.target

데몬을 다시 로드해야 합니다.

 # systemctl daemon-reload

서비스를 활성화하고

# systemctl enabled remove-nvidia

결과적으로 PCI VGA에 대한 별도의 서비스가 제거됩니다(제 경우).

pci 장치의 ID는 다음으로 찾을 수 있습니다.lspci -vv

행운을 빌어요

답변2

모든 것이 거의 정확합니다. 마지막에 넣지 마세요 '. 반드시 거기에 있어야 합니다.

  • 파일을 생성합니다 /etc/udev/rules.d/99-zz.rules(마지막 규칙으로 실행되도록 하기 위해).
  • 그런 다음 다음을 추가합니다.
    ACTION==“add”, KERNEL=="0000:58:00.1", SUBSYSTEM=="pci", RUN="/bin/sh -c ‘echo 1 > /sys/bus/pci/devices/0000:58:00.1/remove"   
    
    • 0000:58:00.1/remove'"- 작동하지 않습니다.
    • 0000:58:00.1/remove"- 좋아요

관련 정보