diff options
author | Jonathan Bauer | 2019-08-05 16:48:43 +0200 |
---|---|---|
committer | Jonathan Bauer | 2019-08-05 16:48:43 +0200 |
commit | 70af22a0a0ea592a4d8eaa4860aa94f866842f87 (patch) | |
tree | daf4b78867e0b14ca5df6cfcb93da78071b37b8e /builder | |
parent | formatting round 1 (diff) | |
download | systemd-init-70af22a0a0ea592a4d8eaa4860aa94f866842f87.tar.gz systemd-init-70af22a0a0ea592a4d8eaa4860aa94f866842f87.tar.xz systemd-init-70af22a0a0ea592a4d8eaa4860aa94f866842f87.zip |
[slx-drm] support for multiple nvidia versions
Diffstat (limited to 'builder')
4 files changed, 67 insertions, 4 deletions
diff --git a/builder/modules.d/slx-drm/data/nvidia-nouveau-fallback.conf b/builder/modules.d/slx-drm/data/nvidia-nouveau-fallback.conf deleted file mode 100644 index 76b0793f..00000000 --- a/builder/modules.d/slx-drm/data/nvidia-nouveau-fallback.conf +++ /dev/null @@ -1,2 +0,0 @@ -install nouveau [ -e /sys/module/nvidia ] || { /sbin/modprobe --ignore-install nvidia || /sbin/modprobe --ignore-install nouveau $CMDLINE_OPTS ; } -install nvidia /sbin/modprobe --ignore-install nvidia $CMDLINE_OPTS || /sbin/modprobe --ignore-install nouveau diff --git a/builder/modules.d/slx-drm/hooks/activate-nvidia-drivers.sh b/builder/modules.d/slx-drm/hooks/activate-nvidia-drivers.sh new file mode 100644 index 00000000..ae6c3e26 --- /dev/null +++ b/builder/modules.d/slx-drm/hooks/activate-nvidia-drivers.sh @@ -0,0 +1,37 @@ +#!/bin/bash + +detect_nvidia_cards() { + # hard check on nvidia graphic cards + local cards="$(lspci | grep 'Class 0300: 10de:' | awk '{print $4}')" + if ! [ -d "/drm.cfg.d" ] && [ -n $cards]; then + echo "Failed" + return 1 + fi + for card in $cards; do + local driver="$(awk '$1 = /'"$card"'/ {print $2}' /drm.cfg.d/*)" + [ -z "$driver" ] && continue + driver="${driver//@/}" + driver="${driver//-/\/}" + local driver_dir="/lib/modules/${driver}" + [ -d "$driver_dir" ] || continue + local driver_target="/lib/modules/$(uname -r)/kernel/drivers/gpu/drm/nvidia" + if [ -d "$driver_target" ]; then + echo "'$driver_target' exists, will overwrite!" + rm -rf -- "$driver_target" + fi + # all good, move it over + if ! mv "$driver_dir" "$driver_target" 2>&1; then + echo "Failed to move '$driver_dir' to '$driver_target'." + return 1 + fi + # finally run depmod to make it visible to udev + if ! depmod -a 2>&1 ; then + echo "Failed to run depmod, udev won't see the nvidia modules." + return 1 + fi + return 0 + done +} + +detect_nvidia_cards +: diff --git a/builder/modules.d/slx-drm/hooks/copy-nvidia-drivers.sh b/builder/modules.d/slx-drm/hooks/copy-nvidia-drivers.sh new file mode 100644 index 00000000..9442db57 --- /dev/null +++ b/builder/modules.d/slx-drm/hooks/copy-nvidia-drivers.sh @@ -0,0 +1,28 @@ +#!/bin/ash +# +# 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 diff --git a/builder/modules.d/slx-drm/module-setup.sh b/builder/modules.d/slx-drm/module-setup.sh index 8530b2d0..5637e8c1 100755 --- a/builder/modules.d/slx-drm/module-setup.sh +++ b/builder/modules.d/slx-drm/module-setup.sh @@ -11,6 +11,6 @@ installkernel() { instmods acpi_ipmi } install() { - mkdir -p "$initdir/etc/modprobe.d" - cp "$moddir/data/nvidia-nouveau-fallback.conf" "$initdir/etc/modprobe.d" + inst_hook pre-udev 10 "${moddir}/hooks/activate-nvidia-drivers.sh" + inst_hook pre-pivot 50 "${moddir}/hooks/copy-nvidia-drivers.sh" } |