66 lines
1.7 KiB
Bash
Executable file
66 lines
1.7 KiB
Bash
Executable file
#!/bin/bash
|
|
# shellcheck disable=SC1091
|
|
|
|
function insert_INITRAMFSTOOLS() {
|
|
# Get the header and enabled modules separately from the /etc/modules file
|
|
local MODULES_HEADER
|
|
local MODULES_ENABLED
|
|
local VENDOR_RESET
|
|
MODULES_HEADER=$(head -n "$1" "$2" | grep -P "^#" | grep -v "# Added by quickpassthrough")
|
|
MODULES_ENABLED=$(grep -vP "^#" "$2" | grep -v "vendor-reset" | perl -pe "s/^\n//")
|
|
VENDOR_RESET=0
|
|
|
|
# If vendor-reset is present
|
|
if grep -q "vendor-reset" "$2" ;
|
|
then
|
|
VENDOR_RESET=1
|
|
fi
|
|
|
|
# Write header
|
|
echo "$MODULES_HEADER" > "$2"
|
|
|
|
# If vendor-reset existed from before
|
|
if [ $VENDOR_RESET == 1 ];
|
|
then
|
|
# Write vendor-reset as the first module!
|
|
echo "vendor-reset" >> "$2"
|
|
fi
|
|
|
|
# Append vfio
|
|
printf "
|
|
# Added by quickpassthrough #
|
|
vfio
|
|
vfio_iommu_type1
|
|
vfio_pci
|
|
vfio_virqfd
|
|
#############################
|
|
" >> "$2"
|
|
|
|
# Write the previously enabled modules under vfio in the load order
|
|
echo "$MODULES_ENABLED" >> "$2"
|
|
}
|
|
|
|
function set_INITRAMFSTOOLS () {
|
|
# Get the config paths
|
|
source "$SCRIPTDIR/lib/paths.sh"
|
|
|
|
# Insert modules in the correct locations as early as possible without
|
|
# conflicting with vendor-reset module if it is enabled
|
|
insert_INITRAMFSTOOLS 4 "$SCRIPTDIR/$ETCMODULES"
|
|
insert_INITRAMFSTOOLS 11 "$SCRIPTDIR/$INITRAMFS/modules"
|
|
|
|
# Bind GPU to VFIO
|
|
"$SCRIPTDIR/lib/set_VFIO.sh" "$1"
|
|
|
|
# Configure modprobe
|
|
exec "$SCRIPTDIR/lib/set_MODPROBE.sh" "$1"
|
|
}
|
|
|
|
|
|
function main () {
|
|
SCRIPTDIR=$(dirname "$(realpath "$0")" | perl -pe "s/\/\.\.\/lib//" | perl -pe "s/\/lib$//")
|
|
|
|
set_INITRAMFSTOOLS "$1"
|
|
}
|
|
|
|
main "$1"
|