如何在加载某个模块之前运行 udev 规则?

如何在加载某个模块之前运行 udev 规则?

我正在尝试让 nvidia GPU 驱动程序在 Macbook Pro(运行 Arch Linux)上运行。根据说明这里,需要设置一些PCI寄存器模块nvidia被加载,否则它将无法工作。该段落还提到可以使用“udev hook”来完成;但是,我不确定如何以 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手动加载模块,也许在同一个脚本中,最后(如果模块会自动加载,则可选

相关内容