From 5cf0ebfb3552bf036f8fef75961eaf5506241330 Mon Sep 17 00:00:00 2001 From: Christian Rößler Date: Wed, 19 Feb 2014 14:13:14 +0100 Subject: [nvidia_kernel] Module building nvidia kernel modules --- remote/modules/nvidia_kernel/nvidia_kernel.build | 128 +++++++++++++++++++++++ remote/modules/nvidia_kernel/nvidia_kernel.conf | 3 + 2 files changed, 131 insertions(+) create mode 100644 remote/modules/nvidia_kernel/nvidia_kernel.build create mode 100644 remote/modules/nvidia_kernel/nvidia_kernel.conf (limited to 'remote/modules/nvidia_kernel') diff --git a/remote/modules/nvidia_kernel/nvidia_kernel.build b/remote/modules/nvidia_kernel/nvidia_kernel.build new file mode 100644 index 00000000..bf9c6ee6 --- /dev/null +++ b/remote/modules/nvidia_kernel/nvidia_kernel.build @@ -0,0 +1,128 @@ +fetch_source() { + mkdir -p src 2>/dev/null + cd src || perror "Could not change into src directory." + download "$REQUIRED_URL" +} + +build() { + local KERNELSRCDIR="$MODULE_DIR/../kernel/ksrc" # kernel sources + local TEMPDIR="$MODULE_DIR/temp" + local ROOTLOWERDIR="/" + local ROOTUPPERDIR="$TEMPDIR/rootupper" + local ROOTBINDDIR="$TEMPDIR/rootbind" + local ROOTMOUNTDIR="$TEMPDIR/rootmount" + local BINDMOUNTS="/dev /proc /run /sys" + local NVIDIA="$MODULE_DIR/src/$REQUIRED_NVIDIA" + local NVIDIAEXTRACTDIR="$ROOTMOUNTDIR/NVIDIA" + local NVEXTRACTDIR="/NVIDIA" # This is relative to the chroot. + + make_dirs () { + [ -d "$TEMPDIR" ] && rm -rf $TEMPDIR/* + mkdir -p "$TEMPDIR" || perror "Could not create base directory for mount directories $TEMPDIR." + for DIR in "$ROOTUPPERDIR" "$ROOTBINDDIR" "$ROOTMOUNTDIR"; do + mkdir -p "$DIR" || perror "Could not create directory for mount directory $DIR." + done + } + + mount_dirs () { + pinfo "Executing bind- and overlay mounts ..." + mount -o bind "$ROOTLOWERDIR" "$ROOTBINDDIR" || perror "Could not mount (bind) $ROOTLOWERDIR to $ROOTBINDDIR." + mount -o remount,ro "$ROOTBINDDIR" || perror "Could not remount $ROOTBINDDIR ro read-only." + mount -t overlayfs overlayfs -o lowerdir="$ROOTBINDDIR",upperdir="$ROOTUPPERDIR" "$ROOTMOUNTDIR" \ + || perror "Could not mount (overlayfs) $ROOTLOWERDIR, $ROOTUPPERDIR to $BINDDIR." + pinfo "Executing bind mounts ($BINDMOUNTS) for chroot root dir ..." + for MOUNT in $BINDMOUNTS; do + mount -o bind "$MOUNT" "$ROOTMOUNTDIR/$MOUNT" || perror "Could not mount (bind) $MOUNTS into chroot root dir." + done + } + + # We inject a bashrc to be executed later within the chroot. + gen_bashrc () { + local COMMON_OPTIONS=' --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 ' + + cat >"$ROOTMOUNTDIR/$HOME/.bashrc"<<-EOF + echo "chroot successful." + alias ll='ls -alF' # A little convenience for debugging purposes. + PS1='\[\e[1;33m\]chroot@\h:\w\$ \[\e[1;32m\]' # To recognize the chroot instantly when debugging (yellow on black). + cd "$NVEXTRACTDIR" + ./nvidia-installer $COMMON_OPTIONS --kernel-source-path /"$KERNELSRCDIR" # Do the work! + exit # Out-comment this for debugging: Then script stays in chroot. +EOF + } + + unpack_nvidia () { + [ -d "$NVIDIAEXTRACTDIR" ] && rm -rf "$NVIDIAEXTRACTDIR" + pinfo "Unpacking NVidia archive ($NVIDIA) ..." + sh "$NVIDIA" --extract-only --target "$NVIDIAEXTRACTDIR" || perror "Could not extract $NVIDIA to $NVIDIAEXTRACTDIR." + } + + umount_dirs () { + # Let's tidy the place, or at least the mounts: Otherwise these would stack up, and we do not like that, don't we. + for MOUNT in $BINDMOUNTS; do + umount "$ROOTMOUNTDIR/$MOUNT" || pwarning "Could not unmount $ROOTMOUNTDIR/$MOUNT!" + done + umount "$ROOTMOUNTDIR" || pwarning "Could not unmount $ROOTMOUNTDIR!" + umount "$ROOTBINDDIR" || pwarning "Could not unmount $ROOTBINDDIR!" + } + + strip_modules () { + strip -g "$ROOTUPPERDIR/$NVEXTRACTDIR/kernel/nvidia.ko" || \ + pwarning "Could not strip kernel module $ROOTUPPERDIR/$NVEXTRACTDIR/kernel/nvidia.ko." + strip -g "$ROOTUPPERDIR/$NVEXTRACTDIR/kernel/uvm/nvidia-uvm.ko" || \ + pwarning "Could not strip kernel module $ROOTUPPERDIR/$NVEXTRACTDIR/kernel/uvm/nvidia-uvm.ko." + } + + copy_modules () { + local NVIDIA_MODULES="$MODULE_DIR/build/lib/modules/nvidia/" + mkdir -p "$NVIDIA_MODULES" + cp "$ROOTUPPERDIR/$NVEXTRACTDIR/kernel/nvidia.ko" "$NVIDIA_MODULES" || perror "Could not copy nvidia.ko!" + cp "$ROOTUPPERDIR/$NVEXTRACTDIR/kernel/uvm/nvidia-uvm.ko" "$NVIDIA_MODULES" || perror "Could not copy nvidia-uvm.ko!" + } + + clean_temp () { + rm -rf "$TEMPDIR" || perror "Could not clean/delete temp directory $TEMPDIR." + } + + # Main stuff + pinfo "Generating temporary directories ..." + make_dirs + pinfo "Mounting directories ..." + mount_dirs + + pinfo "Injecting .bashrc into later chroot ..." + gen_bashrc + + pinfo "Unpacking NVidia-Installer ..." + unpack_nvidia + + 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 "$ROOTMOUNTDIR" + pinfo "chroot terminated." + + pinfo "Unmount directories." + umount_dirs + + pinfo "Stripping kernel modules." + strip_modules + + pinfo "Copying kernel modules." + copy_modules + + pinfo "Cleaning / deleting temp directories." + clean_temp +} + +post_copy() { + : +} + diff --git a/remote/modules/nvidia_kernel/nvidia_kernel.conf b/remote/modules/nvidia_kernel/nvidia_kernel.conf new file mode 100644 index 00000000..5086b37f --- /dev/null +++ b/remote/modules/nvidia_kernel/nvidia_kernel.conf @@ -0,0 +1,3 @@ +REQUIRED_VERSION="331.38" +REQUIRED_NVIDIA="NVIDIA-Linux-x86_64-$REQUIRED_VERSION.run" +REQUIRED_URL="http://download.nvidia.com/XFree86/Linux-x86_64/$REQUIRED_VERSION/$REQUIRED_NVIDIA" -- cgit v1.2.3-55-g7522