diff options
author | Simon Rettberg | 2019-04-26 11:24:14 +0200 |
---|---|---|
committer | root | 2019-04-26 11:24:14 +0200 |
commit | 24fb4ad142f7cb932a5e47ee80c9bbfc10a758c0 (patch) | |
tree | 5873fcbd617e6ea13f1c1bdc6145211441fbf764 /core/modules | |
parent | Support multi-target targets with @ syntax (diff) | |
download | mltk-24fb4ad142f7cb932a5e47ee80c9bbfc10a758c0.tar.gz mltk-24fb4ad142f7cb932a5e47ee80c9bbfc10a758c0.tar.xz mltk-24fb4ad142f7cb932a5e47ee80c9bbfc10a758c0.zip |
[nvidia*/rfs-s31] Support shipping multiple driver versions
Diffstat (limited to 'core/modules')
-rw-r--r-- | core/modules/kdm/data/etc/systemd/system/kdm.service | 2 | ||||
-rw-r--r-- | core/modules/lightdm/data/etc/systemd/system/lightdm.service | 2 | ||||
-rw-r--r-- | core/modules/nvidia-common/module.build | 16 | ||||
-rw-r--r-- | core/modules/nvidia-common/module.conf | 3 | ||||
-rw-r--r-- | core/modules/nvidia-kernel/module.build | 12 | ||||
-rw-r--r-- | core/modules/nvidia-kernel/module.conf | 9 | ||||
-rwxr-xr-x | core/modules/nvidia-libs/data/addon-init (renamed from core/modules/nvidia_libs/data/addon-init) | 0 | ||||
-rw-r--r-- | core/modules/nvidia-libs/module.build | 11 | ||||
-rw-r--r-- | core/modules/nvidia-libs/module.conf (renamed from core/modules/nvidia_libs/module.conf) | 7 | ||||
-rw-r--r-- | core/modules/nvidia-libs/module.conf.ubuntu (renamed from core/modules/nvidia_libs/module.conf.ubuntu) | 0 | ||||
-rw-r--r-- | core/modules/nvidia_kernel/module.build | 97 | ||||
-rw-r--r-- | core/modules/nvidia_kernel/module.conf | 12 | ||||
-rw-r--r-- | core/modules/nvidia_libs/module.build | 47 |
13 files changed, 48 insertions, 170 deletions
diff --git a/core/modules/kdm/data/etc/systemd/system/kdm.service b/core/modules/kdm/data/etc/systemd/system/kdm.service index e77d1cbd..97749a16 100644 --- a/core/modules/kdm/data/etc/systemd/system/kdm.service +++ b/core/modules/kdm/data/etc/systemd/system/kdm.service @@ -1,7 +1,7 @@ [Unit] Description=KDM Display Manager Conflicts=getty@tty7.service -After=systemd-user-sessions.service getty@tty7.service setup-slx-addon@nvidia_libs.service setup-slx-addon@vmware.service +After=systemd-user-sessions.service getty@tty7.service load-gfx-driver.service setup-slx-addon@vmware.service setup-slx-addon@virtualbox.service [Service] ExecStartPre=-/opt/openslx/bin/killall fbsplash diff --git a/core/modules/lightdm/data/etc/systemd/system/lightdm.service b/core/modules/lightdm/data/etc/systemd/system/lightdm.service index 898367fd..6acaaeb7 100644 --- a/core/modules/lightdm/data/etc/systemd/system/lightdm.service +++ b/core/modules/lightdm/data/etc/systemd/system/lightdm.service @@ -2,7 +2,7 @@ Description=LightDM Display Manager Conflicts=getty@tty7.service Requires=dev-tty7.device -After=dev-tty7.device systemd-user-sessions.service setup-slx-addon@nvidia_libs.service setup-slx-addon@vmware.service +After=dev-tty7.device systemd-user-sessions.service load-gfx-driver.service setup-slx-addon@vmware.service setup-slx-addmon@virtualbox.service [Service] ExecStart=/usr/sbin/lightdm diff --git a/core/modules/nvidia-common/module.build b/core/modules/nvidia-common/module.build index d43ce83f..9bf73af8 100644 --- a/core/modules/nvidia-common/module.build +++ b/core/modules/nvidia-common/module.build @@ -39,6 +39,10 @@ build() { /NVIDIA/nvidia-installer --no-nouveau-check --no-network --no-backup --no-rpms --no-runlevel-check \ --no-distro-scripts --no-cc-version-check --no-x-check --no-precompiled-interface --silent \ --kernel-source-path "/$KERNEL_HEADERS_DIR" + grep -qF '.ko failed to build' /var/log/nvidia-installer.log \ + || /NVIDIA/nvidia-installer --no-nouveau-check --no-network --no-backup --no-rpms --no-runlevel-check \ + --no-distro-scripts --no-cc-version-check --no-x-check --no-precompiled-interface --silent \ + --no-kernel-module exit 0 # Fake it since it will try to load the module and probably fail EOF if grep -qF '.ko failed to build' "${builddir}/var/log/nvidia-installer.log"; then @@ -47,14 +51,14 @@ build() { fi pinfo "chroot terminated, cleaning up" - # move whiteout list to its /opt/openslx/etc/nvidia.whiteout + # move whiteout list to its /opt/openslx/etc/nvidia.whiteout (inside $builddir, for lib target) if [ -e "${builddir}/overlay.whiteout.list" ]; then mkdir -p "${builddir}/opt/openslx/etc" mv "${builddir}/overlay.whiteout.list" "${builddir}/opt/openslx/etc/nvidia.whiteout" fi -# SNIP - NVIDIA_MODULES="${builddir}/lib/modules/nvidia/${version}" + # Kernel related - outside of version subdir ($builddir) + NVIDIA_MODULES="${MODULE_BUILD_DIR}/lib/modules/nvidia/${version}" mkdir -p "$NVIDIA_MODULES" pinfo "Copying kernel modules..." for file in nvidia.ko nvidia-uvm.ko nvidia-modeset.ko nvidia-drm.ko; do @@ -65,10 +69,10 @@ build() { cp "$RESULT" "$NVIDIA_MODULES" || perror "Could not copy $file" done - mkdir -p "${builddir}/drm.cfg.d" - drmfile="${builddir}/drm.cfg.d/$(( filenum++ ))-nvidia" + mkdir -p "${MODULE_BUILD_DIR}/drm.cfg.d" + drmfile="${MODULE_BUILD_DIR}/drm.cfg.d/$(( filenum++ ))-nvidia-$version" cat > "$drmfile" <<-BLOFF - @nvidia-${version} acpi_ipmi nvidia-$version/nvidia.ko nvidia-$version/nvidia-uvm.ko nvidia-$version/nvidia-modeset.ko nvidia-$version/nvidia-drm.ko + @nvidia-${version} acpi_ipmi nvidia/$version/nvidia.ko nvidia/$version/nvidia-uvm.ko nvidia/$version/nvidia/modeset.ko nvidia-$version/nvidia/drm.ko @nvidia-${version}_fallback nouveau BLOFF if ! [ -s "${builddir}/supportedchips.html" ]; then diff --git a/core/modules/nvidia-common/module.conf b/core/modules/nvidia-common/module.conf index 7645cb2e..f1327ca8 100644 --- a/core/modules/nvidia-common/module.conf +++ b/core/modules/nvidia-common/module.conf @@ -2,9 +2,6 @@ REQUIRED_URL="http://download.nvidia.com/XFree86/Linux-x86_64/%VERSION%/NVIDIA-Linux-x86_64-%VERSION%.run" REQUIRED_HTML="http://download.nvidia.com/XFree86/Linux-x86_64/%VERSION%/README/supportedchips.html" -# Here? No REQUIRED_ prefix so it won't get cleaned... -:; NVIDIA_VERSIONS="418.56 390.116" - REQUIRED_MODULES=" kernel " diff --git a/core/modules/nvidia-kernel/module.build b/core/modules/nvidia-kernel/module.build new file mode 100644 index 00000000..38c96a75 --- /dev/null +++ b/core/modules/nvidia-kernel/module.build @@ -0,0 +1,12 @@ +#!/bin/bash + +module_load() { + [ -z "$NVIDIA_VERSIONS" ] && perror "No NVIDIA_VERSIONS set in config" + local version + for version in $NVIDIA_VERSIONS; do + [ -d "${ROOT_DIR}/tmp/work/nvidia-common/build/${version}" ] || perror "nvidia-common did not build $version" + done + # XXX Now we change out build dir to that of nvidia-common + MODULE_BUILD_DIR="${ROOT_DIR}/tmp/work/nvidia-common/build" +} + diff --git a/core/modules/nvidia-kernel/module.conf b/core/modules/nvidia-kernel/module.conf new file mode 100644 index 00000000..193994e3 --- /dev/null +++ b/core/modules/nvidia-kernel/module.conf @@ -0,0 +1,9 @@ +#!/bin/bash +REQUIRED_DIRECTORIES=" + /lib/modules/nvidia + /drm.cfg.d +" +REQUIRED_MODULES=" + kernel + nvidia-common +" diff --git a/core/modules/nvidia_libs/data/addon-init b/core/modules/nvidia-libs/data/addon-init index 061bff6b..061bff6b 100755 --- a/core/modules/nvidia_libs/data/addon-init +++ b/core/modules/nvidia-libs/data/addon-init diff --git a/core/modules/nvidia-libs/module.build b/core/modules/nvidia-libs/module.build new file mode 100644 index 00000000..b35e6fd2 --- /dev/null +++ b/core/modules/nvidia-libs/module.build @@ -0,0 +1,11 @@ +#!/bin/bash + +module_load() { + [ -z "$VERSION" ] && perror "Not run from an @ target" + local SRC + SRC="${ROOT_DIR}/tmp/work/nvidia-common/build/$VERSION" + [ -d "$SRC" ] || perror "nvidia-common did not build $VERSION" + # XXX Now we override the MODULE_BUILD_DIR, where mltk will then grab alle the required files from + MODULE_BUILD_DIR="$SRC" +} + diff --git a/core/modules/nvidia_libs/module.conf b/core/modules/nvidia-libs/module.conf index ccb1e3ed..f5ca87eb 100644 --- a/core/modules/nvidia_libs/module.conf +++ b/core/modules/nvidia-libs/module.conf @@ -1,7 +1,4 @@ #!/bin/bash -REQUIRED_VERSION="410.93" -REQUIRED_NVIDIA="NVIDIA-Linux-x86_64-$REQUIRED_VERSION.run" -REQUIRED_URL="http://download.nvidia.com/XFree86/Linux-x86_64/$REQUIRED_VERSION/$REQUIRED_NVIDIA" REQUIRED_FILES=" /etc/OpenCL/vendors/nvidia.icd @@ -19,3 +16,7 @@ REQUIRED_DIRECTORIES=" /usr/share/X11 " +REQUIRED_MODULES=" + nvidia-common +" + diff --git a/core/modules/nvidia_libs/module.conf.ubuntu b/core/modules/nvidia-libs/module.conf.ubuntu index 5135d91e..5135d91e 100644 --- a/core/modules/nvidia_libs/module.conf.ubuntu +++ b/core/modules/nvidia-libs/module.conf.ubuntu diff --git a/core/modules/nvidia_kernel/module.build b/core/modules/nvidia_kernel/module.build deleted file mode 100644 index 3c8baa8d..00000000 --- a/core/modules/nvidia_kernel/module.build +++ /dev/null @@ -1,97 +0,0 @@ -#!/bin/bash -fetch_source() { - local url="$REQUIRED_URL_BASE/$REQUIRED_VERSION/$REQUIRED_NVIDIA" - mkdir -p src 2>/dev/null - cd src || perror "Could not change into src directory." - download "$REQUIRED_URL_BASE/$REQUIRED_VERSION/README/supportedchips.html" - download "$url" -} - -build() { - local ROOTUPPERDIR="$MODULE_WORK_DIR/rootupper" - - local NVIDIA="$MODULE_WORK_DIR/src/$REQUIRED_NVIDIA" - local NVIDIAEXTRACTDIR="$ROOTUPPERDIR/NVIDIA" - - [ -d "$NVIDIAEXTRACTDIR" ] && rm -rf "$NVIDIAEXTRACTDIR" - pinfo "Unpacking NVidia archive ($NVIDIA) ..." - sh "$NVIDIA" --extract-only --target "$NVIDIAEXTRACTDIR" || perror "Could not extract $NVIDIA to $NVIDIAEXTRACTDIR." - - pinfo "Ready to chroot - compiling may take some time." - pdebug "--- chroot ---------------------------------------------------------------------" - pdebug "- -" - pdebug "- Notice: This may take a while! -" - pdebug "- -" - pdebug "- Please keep note the Nvidia installer _will_ complain about -" - pdebug "- several warnings and errors. It will do this in any case. -" - pdebug "- -" - pdebug "- This does _not_ mean the kernel module compilation was unsuccessful! -" - pdebug "- -" - pdebug "--------------------------------------------------------------------------------" - - - chroot_run "$ROOTUPPERDIR" <<-EOF - /NVIDIA/nvidia-installer --no-nouveau-check --no-network --no-backup --no-rpms --no-runlevel-check --no-distro-scripts --no-cc-version-check --no-x-check --no-precompiled-interface --silent --kernel-source-path /"$KERNEL_HEADERS_DIR" # Do the work! - # fake success since the installer will exit with an error due to the module not loading properly. - exit 0 - EOF - pinfo "chroot terminated." - - local file - local RESULT - local NVIDIA_MODULES="$MODULE_BUILD_DIR/lib/modules/nvidia/" - mkdir -p "$NVIDIA_MODULES" - pinfo "Copying kernel modules..." - for file in nvidia.ko nvidia-uvm.ko nvidia-modeset.ko nvidia-drm.ko; do - RESULT=$(find "$ROOTUPPERDIR/NVIDIA/kernel" -name "$file" | head -n 1) - [ -z "$RESULT" ] && perror "Could not find built module $file in ./NVIDIA/kernel" - pinfo "Fetching ${file}..." - strip -g "$RESULT" || pwarning "Could not strip $file" - cp "$RESULT" "$NVIDIA_MODULES" || perror "Could not copy $file" - done - - rm -rf "$MODULE_BUILD_DIR/NVIDIA" - - mkdir -p "$MODULE_BUILD_DIR/drm.cfg.d" - local drmfile="$MODULE_BUILD_DIR/drm.cfg.d/00-nvidia" - cat > "$drmfile" <<-BLOFF - @nvidia acpi_ipmi nvidia/nvidia.ko nvidia/nvidia-uvm.ko nvidia/nvidia-modeset.ko nvidia/nvidia-drm.ko - @nvidia_fallback nouveau -BLOFF - if ! [ -s "$MODULE_WORK_DIR/src/supportedchips.html" ]; then - pwarning "No supportedchips.html -- using wildcard drm.cfg" - echo "10de @nvidia" >> "$drmfile" - else - local mode line name dev version - pinfo "Creating drm.cfg" - mode=0 - version= - while read -r line; do - if [[ "$line" =~ '<a name="legacy_' ]]; then - version=$(echo "$line" | sed -r 's/^.*name="legacy_([^"]+)".*$/\1/') - break # For now, we stop here; later on we could support legacy drivers - # By appending $version below and then having different locations for - # the modules, and in stage3.2 load different sqfs containers - elif [[ "$mode" = 0 ]] && [[ "$line" =~ ^'<tr' ]]; then - mode=1 - elif [[ "$mode" = 1 ]] && [[ "$line" =~ ^'<td' ]]; then - mode=2 - name=$(echo "$line" | sed -r 's/^.*<td[^>]*>([^<]+)<.*$/\1/') - elif [[ "$mode" = 2 ]] && [[ "$line" =~ ^'<td'[^'>']*'>'[0-9A-F]{4}'<' ]]; then - mode=0 - dev=$(echo "$line" | sed -r 's/^.*<td[^>]*>([0-9A-Fa-f]{4})<.*$/\1/' | tr 'A-Z' 'a-z') - echo "10de:$dev @nvidia$version" - else - mode=0 - name= - dev= - fi - done < "$MODULE_WORK_DIR/src/supportedchips.html" >> "$drmfile" - fi - -} - -post_copy() { - : -} - diff --git a/core/modules/nvidia_kernel/module.conf b/core/modules/nvidia_kernel/module.conf deleted file mode 100644 index 26d5a160..00000000 --- a/core/modules/nvidia_kernel/module.conf +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/bash -REQUIRED_VERSION="410.93" -REQUIRED_NVIDIA="NVIDIA-Linux-x86_64-$REQUIRED_VERSION.run" -REQUIRED_URL_BASE="http://download.nvidia.com/XFree86/Linux-x86_64" - -REQUIRED_DIRECTORIES=" - /lib/modules/nvidia - /drm.cfg.d -" -REQUIRED_MODULES=" - kernel -" diff --git a/core/modules/nvidia_libs/module.build b/core/modules/nvidia_libs/module.build deleted file mode 100644 index f7dfcda9..00000000 --- a/core/modules/nvidia_libs/module.build +++ /dev/null @@ -1,47 +0,0 @@ -#!/bin/bash -fetch_source() { - mkdir -p src - cd src || perror "Could not change into src directory." - download "$REQUIRED_URL" - cd .. -} - -build() { - local NVIDIA="${MODULE_WORK_DIR}/src/$REQUIRED_NVIDIA" - local NVIDIAEXTRACTDIR="$MODULE_BUILD_DIR/NVIDIA" - - pdebug "Unpacking NVidia-Installer ..." - [ -d "$NVIDIAEXTRACTDIR" ] && rm -rf "$NVIDIAEXTRACTDIR" - sh "$NVIDIA" --extract-only --target "$NVIDIAEXTRACTDIR" || perror "Could not extract $NVIDIA to $NVIDIAEXTRACTDIR." - - pinfo "Ready to chroot - may take some time." - pdebug "--- chroot ---------------------------------------------------------------------" - pdebug "- -" - pdebug "- Notice: This may take a while! -" - pdebug "- -" - pdebug "- Please keep note the Nvidia installer _will_ complain about -" - pdebug "- several warnings and errors. It will do this in any case. -" - pdebug "- -" - pdebug "- This does _not_ mean the library module compilation was unsuccessful! -" - pdebug "- -" - pdebug "--------------------------------------------------------------------------------" - - chroot_run "${MODULE_BUILD_DIR}" <<-EOF - /NVIDIA/nvidia-installer --no-nouveau-check --no-network --no-backup --no-rpms --no-runlevel-check --no-distro-scripts --no-cc-version-check --no-x-check --no-precompiled-interface --silent --no-kernel-module - EOF - pinfo "chroot terminated, cleaning up" - - # move whiteout list to its /opt/openslx/etc/nvidia.whiteout - if [ -e "${MODULE_BUILD_DIR}/overlay.whiteout.list" ]; then - mkdir -p "${MODULE_BUILD_DIR}/opt/openslx/etc" - mv "${MODULE_BUILD_DIR}/overlay.whiteout.list" "${MODULE_BUILD_DIR}/opt/openslx/etc/nvidia.whiteout" - fi - - - rm -rf "$MODULE_BUILD_DIR/NVIDIA" -} - -post_copy() { - : -} - |