モジュールをロードする前にudevルールを実行する方法は?

モジュールをロードする前にudevルールを実行する方法は?

Macbook Pro(Arch Linuxを実行)で動作するようにnvidia GPUドライバを入手しようとしています。指示に従ってここ、一部のPCIレジスタを設定する必要があります。今後モジュールがnvidiaロードされました。それ以外の場合は動作しません。この段落では、「udevフック」を使用してこれを行うことができると述べていますが、udevルールがロードされるnvidia前に確実に実行される方法でこれを行う方法がわかりません。

次の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、同じスクリプトからモジュールを手動でロードし、最後に(モジュールが自動的にロードされる場合のオプション)

関連情報