Initial commit
This commit is contained in:
250
build_linux_for_tegra_userspace.sh
Executable file
250
build_linux_for_tegra_userspace.sh
Executable file
@@ -0,0 +1,250 @@
|
||||
#!/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
|
||||
Reference in New Issue
Block a user