我正在尝试让 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
我会以稍微不同的方式行事,那就是阻塞模块直到我需要:
- 防止系统加载
nvidia
模块列入黑名单它 - 让您的脚本完成 PCI 寄存器的工作
- 现在,
nvidia
手动加载模块,也许在同一个脚本中,最后(如果模块会自动加载,则可选)