當嘗試運行時
#!/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 已經存在,其內容是「(無效的)”
答案1
此問題可能是因為您沒有以 root 權限執行腳本。 Linux 中的目錄/sys
是虛擬檔案系統的一部分並且受到保護。此處修改檔案通常需要 root(或超級使用者)權限。
就您而言,您正在嘗試修改driver_override
需要更高權限的檔案。
嘗試使用 sudo 運行腳本,如下所示:
sudo ./a.sh
此命令將以 root 權限執行腳本,您應該不會再看到「權限被拒絕」錯誤。
但是,在使用 root 權限執行腳本時要小心,尤其是當它們修改系統檔案時,因為錯誤可能會損害您的系統。在以 root 使用者身分執行腳本之前,請務必確保您了解該腳本正在執行的操作。
文件中的「(null)」內容driver_override
可能是因為沒有指定驅動程式來覆寫目前驅動程式。此driver_override
介面可讓您在執行裝置驅動程式自動探測時指定要綁定到裝置的特定驅動程式。這是一項高級功能,應謹慎使用。