251 lines
7.3 KiB
Bash
Executable File
251 lines
7.3 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
set -e
|
|
|
|
DEB_FILE_OUTPUT="nvidia-l4t-driver-21.8-nyan_armhf"
|
|
DEB_SOURCE_DIRECTORY="linux-for-tegra-userspace-deb-source"
|
|
LINUX_FOR_TEGRA_FOLDER="Linux_for_Tegra"
|
|
WORK_DIRECTORY="work-directory"
|
|
APPLY_BINARIES_SCRIPT_FILE="apply_binaries.sh"
|
|
LINUX_FOR_TEGRA_USERSPACE_PACKAGE_FILE_FOLDER="l4t-userspace-package"
|
|
|
|
information() {
|
|
echo "Flags: --disable-exit-on-error --package-maintainer <name> --package-maintainer-contact <email>"
|
|
echo "--linux-for-tegra-userspace-archive-url <url> --triple-buffering-is-disabled"
|
|
exit 1
|
|
}
|
|
|
|
if [ $# -eq 0 ]; then
|
|
information
|
|
fi
|
|
|
|
while [[ $# -gt 0 ]]; do
|
|
case "$1" in
|
|
--disable-exit-on-error)
|
|
if [ -n "$2" ] && [[ "$2" != "--"* ]]; then
|
|
echo "The build image utility will not exit regardless of reported errors"
|
|
set +e
|
|
shift 2
|
|
else
|
|
information
|
|
fi
|
|
;;
|
|
--package-maintainer)
|
|
if [ -n "$2" ] && [[ "$2" != "--"* ]]; then
|
|
PACKAGE_MAINTAINER="$2"
|
|
shift 2
|
|
else
|
|
information
|
|
fi
|
|
;;
|
|
--package-maintainer-contact)
|
|
if [ -n "$2" ] && [[ "$2" != "--"* ]]; then
|
|
PACKAGE_MAINTAINER_CONTACT="$2"
|
|
shift 2
|
|
else
|
|
information
|
|
fi
|
|
;;
|
|
--linux-for-tegra-userspace-archive-url)
|
|
if [ -n "$2" ] && [[ "$2" != "--"* ]]; then
|
|
LINUX_FOR_TEGRA_URL="$2"
|
|
shift 2
|
|
else
|
|
information
|
|
fi
|
|
;;
|
|
--triple-buffering-is-disabled)
|
|
TRIPLE_BUFFERING_IS_DISABLED="YES"
|
|
shift
|
|
;;
|
|
*)
|
|
echo "Invalid flag specified: $1"
|
|
information
|
|
;;
|
|
esac
|
|
done
|
|
|
|
if [ -z "$PACKAGE_MAINTAINER" ]; then
|
|
echo "No package maintainer was specified"
|
|
PRELIMINARY_CHECK="FAIL"
|
|
fi
|
|
|
|
if [ -z "$PACKAGE_MAINTAINER_CONTACT" ]; then
|
|
echo "No package maintainer email address contact was specified"
|
|
PRELIMINARY_CHECK="FAIL"
|
|
fi
|
|
|
|
if type -P wget >/dev/null; then
|
|
DOWNLOAD_COMMAND="wget"
|
|
elif type -P curl >/dev/null; then
|
|
DOWNLOAD_COMMAND="curl"
|
|
else
|
|
"Neither 'curl' nor 'wget' were found by the script"
|
|
PRELIMINARY_CHECK="FAIL"
|
|
fi
|
|
|
|
if ! type -P dpkg-deb >/dev/null; then
|
|
echo "The script could not find 'dpkg-deb'"
|
|
PRELIMINARY_CHECK="FAIL"
|
|
fi
|
|
|
|
if [ "$PRELIMINARY_CHECK" == "FAIL" ]; then
|
|
echo "One or more preliminary checks failed"
|
|
exit 1
|
|
fi
|
|
|
|
if [ "$TRIPLE_BUFFERING_IS_DISABLED" == "YES" ]; then
|
|
echo "The package builder will not enable triple buffering in the X11 server configuration file"
|
|
fi
|
|
|
|
if [ ${EUID: -0} -ne 0 ] || [ "$(id -u)" -ne 0 ]; then
|
|
sudo -v
|
|
while true; do sudo -n true; sleep 60; kill -0 "$$" || exit; done 2>/dev/null &
|
|
PRIVILEGE_ESCALATION_COMMAND="sudo"
|
|
fi
|
|
|
|
if [ -d "$LINUX_FOR_TEGRA_USERSPACE_PACKAGE_FILE_FOLDER" ]; then
|
|
rm -rf "$LINUX_FOR_TEGRA_USERSPACE_PACKAGE_FILE_FOLDER"
|
|
fi
|
|
|
|
if [ -d "$WORK_DIRECTORY" ]; then
|
|
"$PRIVILEGE_ESCALATION_COMMAND" rm -rf "$WORK_DIRECTORY"
|
|
fi
|
|
|
|
mkdir "$WORK_DIRECTORY"
|
|
|
|
mkdir "$LINUX_FOR_TEGRA_USERSPACE_PACKAGE_FILE_FOLDER"
|
|
|
|
cd "$WORK_DIRECTORY"
|
|
|
|
echo "Preparing deb source tree"
|
|
|
|
mkdir -p "$DEB_SOURCE_DIRECTORY"/DEBIAN
|
|
|
|
echo
|
|
|
|
echo "Downloading NVIDIA Linux for Tegra (L4T) 21.8 userspace software and drivers"
|
|
|
|
echo -e "\n"
|
|
|
|
if [ -z "$LINUX_FOR_TEGRA_URL" ]; then
|
|
LINUX_FOR_TEGRA_URL="https://developer.download.nvidia.com/embedded/L4T/r21_Release_v8.0/release_files/Tegra124_Linux_R21.8.0_armhf.tbz2"
|
|
LINUX_FOR_TEGRA_ARCHIVE_FILE="$(basename "$LINUX_FOR_TEGRA_URL")"
|
|
fi
|
|
|
|
"$DOWNLOAD_COMMAND" "$LINUX_FOR_TEGRA_URL"
|
|
|
|
echo -e "\n"
|
|
|
|
echo "Extracting NVIDIA Linux for Tegra (L4T) archive"
|
|
|
|
echo
|
|
|
|
tar -xf "$LINUX_FOR_TEGRA_ARCHIVE_FILE" -v
|
|
|
|
echo
|
|
|
|
echo "Installing Linux for Tegra (L4T) userspace software and drivers to deb source tree"
|
|
|
|
echo
|
|
|
|
cd "$LINUX_FOR_TEGRA_FOLDER"
|
|
|
|
"$PRIVILEGE_ESCALATION_COMMAND" ./"$APPLY_BINARIES_SCRIPT_FILE" -r ../"$DEB_SOURCE_DIRECTORY"
|
|
|
|
cd ../"$DEB_SOURCE_DIRECTORY"
|
|
|
|
echo
|
|
|
|
echo "Preparing installed userspace files"
|
|
|
|
echo
|
|
|
|
"$PRIVILEGE_ESCALATION_COMMAND" mkdir -p etc/X11/xorg.conf.d
|
|
|
|
"$PRIVILEGE_ESCALATION_COMMAND" mv etc/X11/xorg.conf etc/X11/xorg.conf.d/20-tegra.conf -v
|
|
|
|
"$PRIVILEGE_ESCALATION_COMMAND" mv home/ubuntu/tegrastats usr/bin -v
|
|
|
|
"$PRIVILEGE_ESCALATION_COMMAND" chmod +x usr/bin/tegrastats
|
|
|
|
"$PRIVILEGE_ESCALATION_COMMAND" rm -rf boot home etc/{nv,pulse,systemd,modules,init,ld.so.conf.d,sysctl.d/10-console-messages.conf} usr/lib/arm-linux-gnueabihf/tegra-egl/ld.so.conf lib/firmware/{nvavp_os_f7e00000.bin,tegra_xusb_firmware} lib/modules usr/src etc/{fstab,wpa_supplicant.conf,asound.conf*} etc/udev/rules.d/{90,91,92,99-tegra-mmc-ra,99-nv-wifibt}*.rules etc/X11/xorg.conf.jetson-tk1 -v
|
|
|
|
echo "/usr/lib/arm-linux-gnueabihf/tegra" | "$PRIVILEGE_ESCALATION_COMMAND" tee usr/lib/arm-linux-gnueabihf/tegra/ld.so.conf
|
|
|
|
echo "/usr/lib/arm-linux-gnueabihf/tegra-egl" | "$PRIVILEGE_ESCALATION_COMMAND" tee usr/lib/arm-linux-gnueabihf/tegra-egl/ld.so.conf
|
|
|
|
if [ "$TRIPLE_BUFFERING_IS_DISABLED" != "YES" ]; then
|
|
"$PRIVILEGE_ESCALATION_COMMAND" sed -i '/Section "Device"/,/EndSection/{/EndSection/i\
|
|
Option "TripleBuffer" "true"
|
|
}' etc/X11/xorg.conf.d/20-tegra.conf
|
|
|
|
else
|
|
echo "Triple buffering will not be enabled in the X11 server config"
|
|
echo "Skipping the triple buffering enablement setup"
|
|
fi
|
|
|
|
echo
|
|
|
|
echo "Writing Debian postinst script"
|
|
|
|
cat << 'EOF' > DEBIAN/postinst
|
|
update-alternatives --install /etc/ld.so.conf.d/000-arm-linux-gnueabihf_GL.conf arm-linux-gnueabihf_gl_conf /usr/lib/arm-linux-gnueabihf/tegra/ld.so.conf 1000
|
|
|
|
update-alternatives --install /etc/ld.so.conf.d/001-arm-linux-gnueabihf_EGL.conf arm-linux-gnueabihf_egl_conf /usr/lib/arm-linux-gnueabihf/tegra-egl/ld.so.conf 1000
|
|
|
|
if [ -e "/usr/lib/arm-linux-gnueabihf/tegra/libglx.so" ]; then
|
|
ln -sf /usr/lib/arm-linux-gnueabihf/tegra/libglx.so /usr/lib/xorg/modules/extensions/libglx.so
|
|
fi
|
|
|
|
ldconfig
|
|
EOF
|
|
|
|
chmod +x DEBIAN/postinst
|
|
|
|
echo
|
|
|
|
echo "Writing Debian control file"
|
|
|
|
cat << 'EOF' > DEBIAN/control
|
|
Package: nvidia-l4t-driver-21-nyan
|
|
Version: 21.8
|
|
Architecture: armhf
|
|
Maintainer: MAINTAINER_IDENTIFIER <MAINTAINER_EMAIL_IDENTIFIER>
|
|
Depends: xserver-xorg-core, acpid
|
|
Section: non-free/libs
|
|
Priority: optional
|
|
Homepage: http://www.nvidia.com
|
|
Description: NVIDIA Linux for Tegra (L4T) driver package for the ChromeOS Nyan device platform
|
|
This package contains the NVIDIA Linux for Tegra (L4T) binary driver and all of its libraries,
|
|
optimized for the ChromeOS Nyan device platform to provide hardware acceleration for
|
|
OpenGL/GLX/EGL/GLES applications on X11.
|
|
EOF
|
|
|
|
sed -i "s/MAINTAINER_IDENTIFIER/$PACKAGE_MAINTAINER/g" "DEBIAN/control"
|
|
|
|
sed -i "s/MAINTAINER_EMAIL_IDENTIFIER/$PACKAGE_MAINTAINER_CONTACT/g" "DEBIAN/control"
|
|
|
|
echo
|
|
|
|
echo "Creating the .deb package containing the NVIDIA Linux for Tegra (L4T) 21.8 proprietary userspace software and drivers"
|
|
|
|
cd ..
|
|
|
|
dpkg-deb --build --root-owner-group "$DEB_SOURCE_DIRECTORY" ../"$LINUX_FOR_TEGRA_USERSPACE_PACKAGE_FILE_FOLDER"/"$DEB_FILE_OUTPUT".deb
|
|
|
|
cd ..
|
|
|
|
"$PRIVILEGE_ESCALATION_COMMAND" rm -rf "$WORK_DIRECTORY"
|
|
|
|
echo
|
|
|
|
if [ -f "$LINUX_FOR_TEGRA_USERSPACE_PACKAGE_FILE_FOLDER"/"$DEB_FILE_OUTPUT".deb ]; then
|
|
echo "The NVIDIA Linux for Tegra (L4T) 21.8 userspace software and drivers package for Chromebook device Nyan was created successfully"
|
|
exit 0
|
|
else
|
|
echo "The NVIDIA Linux for Tegra (L4T) 21.8 userspace software and drivers package for Chromebook device Nyan was not created successfully: linux-firmware-nyan_armhf.deb"
|
|
rm -rf "$LINUX_FOR_TEGRA_USERSPACE_PACKAGE_FILE_FOLDER"
|
|
exit 1
|
|
fi
|