모듈을 로드하기 전에 udev 규칙을 실행하는 방법은 무엇입니까?

모듈을 로드하기 전에 udev 규칙을 실행하는 방법은 무엇입니까?

Macbook Pro(Arch Linux 실행)에서 작동하도록 nvidia GPU 드라이버를 얻으려고 합니다. 지시에 따라여기, 일부 PCI 레지스터를 설정해야 합니다.앞으로모듈이 nvidia로드되었습니다. 그렇지 않으면 작동하지 않습니다. 이 단락에서는 "udev 후크"를 사용하여 이 작업을 수행할 수 있다고 언급하지만 nvidiaudev 규칙이 로드되기 전에 확실히 실행되는 방식으로 이를 수행하는 방법을 잘 모르겠습니다 .

다음 udev 규칙( 67-Nvidia-320M.rules)을 만들었습니다.

# Udev rule to set correct PCI register values for NVidia 320M GPU
# this is required for proprietary NVidia driver to work properly

KERNEL=="card[0-9]*", SUBSYSTEM=="drm", SUBSYSTEMS=="pci", ATTRS{vendor}=="0x10de", \
ATTRS{device}=="0x08a0", RUN+="/root/Scripts/set_pci_registers.sh"

/dev/dri/card0그래픽 카드가 감지되면 다음 스크립트를 실행하십시오.

#!/bin/bash

# Script to set correct PCI registers on boot for NVidia 320M GPU

# First, check to see if the driver has already loaded:

lsmod | grep nvid >> /root/pci_check.log

# Set pci registers:

echo "Registers before:" >> /root/pci_check.log
setpci -s "00:17.0" 3e.b >> /root/pci_check.log
setpci -s "04:00.0" 04.b >> /root/pci_check.log

setpci -s "00:17.0" 3e.b=8
setpci -s "04:00.0" 04.b=7

# Check registers are set correctly and output to a file:

echo "Registers after:" >> /root/pci_check.log
setpci -s "00:17.0" 3e.b >> /root/pci_check.log
setpci -s "04:00.0" 04.b >> /root/pci_check.log

스크립트를 실행하고 로그 파일에 기록합니다. 그러나 nvidia로드 후에 스크립트가 실행되고 있음이 출력에서 ​​분명하게 나타납니다 . 모듈을 로드하기 전에 실행되는 규칙을 어떻게 만들 수 있나요?

답변1

나는 일을 조금 다르게 할 것입니다.차단하다모듈이 필요할 때까지:

  1. 시스템이 nvidia모듈을 로드하지 못하도록 방지블랙리스트에 등록됨그것
  2. 스크립트가 PCI 레지스터 작업을 수행하도록 하세요.
  3. 이제 nvidia동일한 스크립트에서 모듈을 수동으로 로드하고 마지막으로 (모듈이 자동으로 로드되는 경우 선택사항)

관련 정보