当尝试运行时
#!/bin/sh
for i in /sys/bus/pci/devices/*/boot_vga; do
if [ $(cat "$i") -eq 0 ]; then
GPU="${i%/boot_vga}"
AUDIO="$(echo "$GPU" | sed -e "s/0$/1/")"
USB="$(echo "$GPU" | sed -e "s/0$/2/")"
echo "vfio-pci" > "$GPU/driver_override"
if [ -d "$AUDIO" ]; then
echo "vfio-pci" > "$AUDIO/driver_override"
fi
if [ -d "$USB" ]; then
echo "vfio-pci" > "$USB/driver_override"
fi
fi
done
modprobe -i vfio-pci
(作为 sh 文件)我得到了输出
./a.sh: 8: cannot create /sys/bus/pci/devices/0000:17:00.0/driver_override: Permission denied
./a.sh: 10: cannot create /sys/bus/pci/devices/0000:17:00.1/driver_override: Permission denied
查看这些文件位置时,我发现 /sys/bus/pci/devices/0000:17:00.0/driver_override 和 /sys/bus/pci/devices/0000:17:00.1/driver_override 已经存在,其内容为“(null)”
答案1
此问题可能是因为您没有以 root 权限运行脚本。Linux/sys
中的目录是虚拟文件系统的一部分,受到保护。修改此处的文件通常需要 root(或超级用户)权限。
就您而言,您正在尝试修改driver_override
需要更高权限的文件。
尝试使用 sudo 运行脚本,如下所示:
sudo ./a.sh
此命令将以 root 权限执行脚本,并且您将不再看到“权限被拒绝”错误。
但是,在以 root 权限运行脚本时要小心谨慎,尤其是当它们修改系统文件时,因为错误可能会损害您的系统。在以 root 用户身份运行脚本之前,请务必确保您了解脚本的作用。
文件中的“(null)”内容driver_override
可能是因为没有指定驱动程序来覆盖当前驱动程序。该driver_override
接口允许您在执行设备驱动程序自动探测时指定要绑定到设备的特定驱动程序。这是一项高级功能,应谨慎使用。