summaryrefslogtreecommitdiffstats
path: root/modules.d/slx-drm/hooks/s3-copy-nvidia-drivers.sh
diff options
context:
space:
mode:
authorSimon Rettberg2024-01-25 15:47:09 +0100
committerSimon Rettberg2024-01-29 09:53:08 +0100
commitabb148916593de63554ef58c53cb1dd8fbbb0ab1 (patch)
treed8c640c33f699f3abc567d9bbf111190c779b7d2 /modules.d/slx-drm/hooks/s3-copy-nvidia-drivers.sh
parent[dnbd3-rootfs] Try optimized ext4 mount options if none are given (diff)
downloadsystemd-init-abb148916593de63554ef58c53cb1dd8fbbb0ab1.tar.gz
systemd-init-abb148916593de63554ef58c53cb1dd8fbbb0ab1.tar.xz
systemd-init-abb148916593de63554ef58c53cb1dd8fbbb0ab1.zip
Try to use more systemd services
Diffstat (limited to 'modules.d/slx-drm/hooks/s3-copy-nvidia-drivers.sh')
-rwxr-xr-xmodules.d/slx-drm/hooks/s3-copy-nvidia-drivers.sh28
1 files changed, 28 insertions, 0 deletions
diff --git a/modules.d/slx-drm/hooks/s3-copy-nvidia-drivers.sh b/modules.d/slx-drm/hooks/s3-copy-nvidia-drivers.sh
new file mode 100755
index 00000000..5afc71c7
--- /dev/null
+++ b/modules.d/slx-drm/hooks/s3-copy-nvidia-drivers.sh
@@ -0,0 +1,28 @@
+#!/bin/bash
+#
+# This script checks whether the nvidia kernel module was loaded by udev
+# and copies the kernel modules over to stage4 and disables nouveau
+
+type emergency_shell >/dev/null 2>&1 || . /lib/dracut-lib.sh
+
+copy_nvidia_modules() {
+ local nvidia_moddir="/lib/modules/$(uname -r)/kernel/drivers/gpu/drm/nvidia"
+ if [ -d "${NEWROOT}/${nvidia_moddir}" ]; then
+ warn "Stage4 contains nvidia driver which would be overwritten - skipping."
+ return 1
+ fi
+ if ! ( cp -r "$nvidia_moddir" "${NEWROOT}/${nvidia_moddir}" \
+ && depmod -a -b "$NEWROOT" ); then
+ warn "Failed to copy/depmod nvidia modules to stage4."
+ return 1
+ fi
+ # nouveau driver would needlessly load, prevent that
+ mkdir -p "${NEWROOT}/etc/modprobe.d" # cause why not
+ echo "blacklist nouveau" > "${NEWROOT}/etc/modprobe.d/disable-nouveau.conf"
+ return 0
+}
+
+if lsmod | grep -q '^nvidia'; then
+ copy_nvidia_modules
+fi
+: # fake success