diff options
Diffstat (limited to 'modules.d/slx-drm/hooks/s3-activate-nvidia-drivers.sh')
-rwxr-xr-x | modules.d/slx-drm/hooks/s3-activate-nvidia-drivers.sh | 73 |
1 files changed, 34 insertions, 39 deletions
diff --git a/modules.d/slx-drm/hooks/s3-activate-nvidia-drivers.sh b/modules.d/slx-drm/hooks/s3-activate-nvidia-drivers.sh index 00c2334a..28b0c639 100755 --- a/modules.d/slx-drm/hooks/s3-activate-nvidia-drivers.sh +++ b/modules.d/slx-drm/hooks/s3-activate-nvidia-drivers.sh @@ -1,42 +1,37 @@ -#!/bin/bash +#!/bin/ash -type emergency_shell >/dev/null 2>&1 || . /lib/dracut-lib.sh - -detect_nvidia_cards() { - # hard check on nvidia graphic cards - local cards="$( lspci -n | grep -o ' 03..: 10de:....' | awk '{print $2}' )" - if ! [ -d "/drm.cfg.d" ] && [ -n "$cards" ]; then - warn "Failed to find '/drm.cfg.d', but have nvidia cards - will try nouveau." - return 1 +# hard check on nvidia graphic cards +cards="$( lspci -n | grep -o ' 03..: 10de:....' | awk '{print $2}' )" +if ! [ -d "/drm.cfg.d" ] && [ -n "$cards" ]; then + echo "Failed to find '/drm.cfg.d', but have nvidia cards - will try nouveau." + exit 1 +fi +for card in $cards; do + driver="$(awk '$1 = /'"$card"'/ {print $2; exit}' /drm.cfg.d/*)" + [ -z "$driver" ] && continue + driver="${driver#'@'}" + driver="${driver//-/\/}" + driver_dir="/lib/modules/${driver}" + [ -d "$driver_dir" ] || continue + driver_target="/lib/modules/$(uname -r)/kernel/drivers/gpu/drm/nvidia" + if [ -d "$driver_target" ]; then + echo "'$driver_target' exists, will not overwrite!" + exit 1 + fi + # all good, move it over + if ! mv "$driver_dir" "$driver_target" 2>&1; then + echo "Failed to move '$driver_dir' to '$driver_target'." + exit 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." + exit 1 fi - for card in $cards; do - local driver="$(awk '$1 = /'"$card"'/ {print $2; exit}' /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 - warn "'$driver_target' exists, will not overwrite!" - return 1 - fi - # all good, move it over - if ! mv "$driver_dir" "$driver_target" 2>&1; then - warn "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 - warn "Failed to run depmod, udev won't see the nvidia modules." - return 1 - fi - # blacklist nouveau - echo 'blacklist nouveau' > "/lib/modprobe.d/disable-nouveau.conf" - info "Initialized nvidia drivers." - return 0 - done -} + # blacklist nouveau + echo 'blacklist nouveau' > "/lib/modprobe.d/disable-nouveau.conf" + echo "Initialized nvidia drivers." + break +done -detect_nvidia_cards -: +exit 0 |