2025-04-20 14:50:31 -05:00
#!/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
2025-04-20 15:58:19 -05:00
LINUX_FOR_TEGRA_URL = "https://developer.download.nvidia.com/embedded/L4T/r21_Release_v8.0/release_files/Tegra124_Linux_R21.8.0_armhf.tbz2"
2025-04-20 14:50:31 -05:00
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' > DE BIAN/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' > DE BIAN/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