summaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorSimon Rettberg2019-04-26 11:24:14 +0200
committerroot2019-04-26 11:24:14 +0200
commit24fb4ad142f7cb932a5e47ee80c9bbfc10a758c0 (patch)
tree5873fcbd617e6ea13f1c1bdc6145211441fbf764 /core
parentSupport multi-target targets with @ syntax (diff)
downloadmltk-24fb4ad142f7cb932a5e47ee80c9bbfc10a758c0.tar.gz
mltk-24fb4ad142f7cb932a5e47ee80c9bbfc10a758c0.tar.xz
mltk-24fb4ad142f7cb932a5e47ee80c9bbfc10a758c0.zip
[nvidia*/rfs-s31] Support shipping multiple driver versions
Diffstat (limited to 'core')
-rw-r--r--core/modules/kdm/data/etc/systemd/system/kdm.service2
-rw-r--r--core/modules/lightdm/data/etc/systemd/system/lightdm.service2
-rw-r--r--core/modules/nvidia-common/module.build16
-rw-r--r--core/modules/nvidia-common/module.conf3
-rw-r--r--core/modules/nvidia-kernel/module.build12
-rw-r--r--core/modules/nvidia-kernel/module.conf9
-rwxr-xr-xcore/modules/nvidia-libs/data/addon-init (renamed from core/modules/nvidia_libs/data/addon-init)0
-rw-r--r--core/modules/nvidia-libs/module.build11
-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.build97
-rw-r--r--core/modules/nvidia_kernel/module.conf12
-rw-r--r--core/modules/nvidia_libs/module.build47
-rwxr-xr-xcore/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-load_gfx_driver19
l---------core/targets/nvidia-libs@NVIDIA_VERSIONS/kernel1
l---------core/targets/nvidia-libs@NVIDIA_VERSIONS/nvidia-common1
l---------core/targets/nvidia-libs@NVIDIA_VERSIONS/nvidia-libs1
l---------core/targets/nvidia_libs/nvidia_libs1
l---------core/targets/stage31/nvidia-common1
l---------core/targets/stage31/nvidia-kernel1
l---------core/targets/stage31/nvidia_kernel1
21 files changed, 59 insertions, 185 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() {
- :
-}
-
diff --git a/core/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-load_gfx_driver b/core/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-load_gfx_driver
index b80bede7..2d113638 100755
--- a/core/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-load_gfx_driver
+++ b/core/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-load_gfx_driver
@@ -1,20 +1,13 @@
#!/bin/bash
-PCIFILE=/tmp/lspci-output
-
-if ! lspci -n > "$PCIFILE"; then
- echo "lspci -n failed..."
- exit 1
-fi
-
if lsmod | grep -q '^nvidia\s'; then
# nvidia kernel module was loaded in stage31 - download libs
- echo "Proprietary nvidia kernel drivers loaded - fetch user space libs"
- systemctl start setup-slx-addon@nvidia_libs &
- #echo -e "# Written by load-gfx-driver\nSLX_VMWARE_3D=yes" >> "/opt/openslx/config"
-elif grep -q -E ' (8086:0102|8086:0152|8086:0162|8086:0412|8086:0416|8086:041e|8086:0a16|8086:1626|8086:1912|8086:3e92|8086:5912|1002:6779|1002:68f9)( |$)' "$PCIFILE"; then
- echo "i915 - enable 3D"
- #echo -e "# Written by load-gfx-driver\nSLX_VMWARE_3D=yes" >> "/opt/openslx/config"
+ version=$( cat /sys/module/nvidia/version )
+ if [ -n "$version" ]; then
+ echo "Proprietary nvidia kernel drivers v$version loaded - fetch user space libs"
+ /opt/openslx/scripts/systemd-download_slx_addons "nvidia-libs@$version"
+ /opt/openslx/scripts/systemd-setup_slx_addons "nvidia-libs@$version" || exit 1
+ fi
fi
# Seems we can finally always do that; in fact, not doing so seems to crash VMs left and right
diff --git a/core/targets/nvidia-libs@NVIDIA_VERSIONS/kernel b/core/targets/nvidia-libs@NVIDIA_VERSIONS/kernel
new file mode 120000
index 00000000..1369e8ff
--- /dev/null
+++ b/core/targets/nvidia-libs@NVIDIA_VERSIONS/kernel
@@ -0,0 +1 @@
+../../modules/kernel-vanilla \ No newline at end of file
diff --git a/core/targets/nvidia-libs@NVIDIA_VERSIONS/nvidia-common b/core/targets/nvidia-libs@NVIDIA_VERSIONS/nvidia-common
new file mode 120000
index 00000000..b44a22fe
--- /dev/null
+++ b/core/targets/nvidia-libs@NVIDIA_VERSIONS/nvidia-common
@@ -0,0 +1 @@
+../../modules/nvidia-common \ No newline at end of file
diff --git a/core/targets/nvidia-libs@NVIDIA_VERSIONS/nvidia-libs b/core/targets/nvidia-libs@NVIDIA_VERSIONS/nvidia-libs
new file mode 120000
index 00000000..9b2ea56f
--- /dev/null
+++ b/core/targets/nvidia-libs@NVIDIA_VERSIONS/nvidia-libs
@@ -0,0 +1 @@
+../../modules/nvidia-libs \ No newline at end of file
diff --git a/core/targets/nvidia_libs/nvidia_libs b/core/targets/nvidia_libs/nvidia_libs
deleted file mode 120000
index 27f398eb..00000000
--- a/core/targets/nvidia_libs/nvidia_libs
+++ /dev/null
@@ -1 +0,0 @@
-../../modules/nvidia_libs \ No newline at end of file
diff --git a/core/targets/stage31/nvidia-common b/core/targets/stage31/nvidia-common
new file mode 120000
index 00000000..b44a22fe
--- /dev/null
+++ b/core/targets/stage31/nvidia-common
@@ -0,0 +1 @@
+../../modules/nvidia-common \ No newline at end of file
diff --git a/core/targets/stage31/nvidia-kernel b/core/targets/stage31/nvidia-kernel
new file mode 120000
index 00000000..41abd1ca
--- /dev/null
+++ b/core/targets/stage31/nvidia-kernel
@@ -0,0 +1 @@
+../../modules/nvidia-kernel \ No newline at end of file
diff --git a/core/targets/stage31/nvidia_kernel b/core/targets/stage31/nvidia_kernel
deleted file mode 120000
index be4a96a8..00000000
--- a/core/targets/stage31/nvidia_kernel
+++ /dev/null
@@ -1 +0,0 @@
-../../modules/nvidia_kernel \ No newline at end of file