├── docker-compose.yml ├── CUDA ├── Dockerfile.jetson-tx2 ├── Dockerfile.jetson-xavier ├── Dockerfile.jetson-nano ├── Dockerfile.jetson-agx-orin-devkit ├── Dockerfile.jetson-agx-orin-devkit-64gb ├── Dockerfile.jetson-orin-nano-devkit-nvme └── Dockerfile.jetson-orin-nx-xavier-nx-devkit ├── README.md └── OPENCV ├── Dockerfile.jetson-tx2 ├── Dockerfile.jetson-xavier ├── Dockerfile.jetson-nano ├── Dockerfile.jetson-agx-orin-devkit ├── Dockerfile.jetson-agx-orin-devkit-64gb ├── Dockerfile.jetson-orin-nano-devkit-nvme └── Dockerfile.jetson-orin-nx-xavier-nx-devkit /docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '2' 2 | 3 | services: 4 | cuda: 5 | restart: always 6 | build: ./CUDA 7 | privileged: true 8 | 9 | opencv: 10 | restart: always 11 | build: ./OPENCV 12 | privileged: true 13 | -------------------------------------------------------------------------------- /CUDA/Dockerfile.jetson-tx2: -------------------------------------------------------------------------------- 1 | FROM balenalib/jetson-tx2-ubuntu:bionic-run-20221215 2 | 3 | 4 | # Don't prompt with any configuration questions 5 | ENV DEBIAN_FRONTEND noninteractive 6 | 7 | # Install some utils 8 | RUN apt-get update && apt-get install -y lbzip2 git wget unzip jq xorg tar python3 libegl1 binutils 9 | 10 | # Update to 32.7 repository in case the base image is using 32.6 11 | RUN sed -i 's/r32.6 main/r32.7 main/g' /etc/apt/sources.list.d/nvidia.list 12 | 13 | # Install CUDA 14 | RUN apt-get install -y nvidia-l4t-cuda nvidia-cuda 15 | 16 | # Set paths 17 | ENV CUDA_HOME=/usr/local/cuda-10.2 18 | 19 | # Build some (but not all) of the sample apps 20 | RUN \ 21 | export SMS=62 && \ 22 | cd /usr/local/cuda-10.2/samples/0_Simple/clock/ && make -j8 && \ 23 | cd /usr/local/cuda-10.2/samples/1_Utilities/deviceQuery/ && make -j8 && \ 24 | cd /usr/local/cuda-10.2/samples/2_Graphics/simpleTexture3D/ && make -j8 && \ 25 | cd /usr/local/cuda-10.2/samples/2_Graphics/simpleGL/ && make -j8 && \ 26 | cd /usr/local/cuda-10.2/samples/3_Imaging/postProcessGL/ && make -j8 && \ 27 | cd /usr/local/cuda-10.2/samples/5_Simulations/smokeParticles && make -j8 28 | 29 | ENV UDEV=1 30 | 31 | # Download and install BSP binaries for L4T 32.4.2 32 | RUN \ 33 | cd /tmp/ && wget https://developer.nvidia.com/embedded/l4t/r32_release_v7.2/t186/jetson_linux_r32.7.2_aarch64.tbz2 && \ 34 | tar xf jetson_linux_r32.7.2_aarch64.tbz2 && rm jetson_linux_r32.7.2_aarch64.tbz2&& \ 35 | cd Linux_for_Tegra && \ 36 | sed -i 's/config.tbz2\"/config.tbz2\" --exclude=etc\/hosts --exclude=etc\/hostname/g' apply_binaries.sh && \ 37 | sed -i 's/install --owner=root --group=root \"${QEMU_BIN}\" \"${L4T_ROOTFS_DIR}\/usr\/bin\/\"/#install --owner=root --group=root \"${QEMU_BIN}\" \"${L4T_ROOTFS_DIR}\/usr\/bin\/\"/g' nv_tegra/nv-apply-debs.sh && \ 38 | sed -i 's/chroot . \// /g' nv_tegra/nv-apply-debs.sh && \ 39 | ./apply_binaries.sh -r / --target-overlay && cd .. \ 40 | rm -rf Linux_for_Tegra && \ 41 | echo "/usr/lib/aarch64-linux-gnu/tegra" > /etc/ld.so.conf.d/nvidia-tegra.conf && ldconfig 42 | 43 | WORKDIR /usr/local/cuda-10.2/samples/bin/aarch64/linux/release 44 | 45 | CMD [ "sleep", "infinity" ] 46 | -------------------------------------------------------------------------------- /CUDA/Dockerfile.jetson-xavier: -------------------------------------------------------------------------------- 1 | FROM balenalib/jetson-xavier-ubuntu:bionic-run-20221215 2 | 3 | 4 | # Don't prompt with any configuration questions 5 | ENV DEBIAN_FRONTEND noninteractive 6 | 7 | # Install some utils 8 | RUN apt-get update && apt-get install -y lbzip2 git wget unzip jq xorg tar python3 libegl1 binutils 9 | 10 | # Update to 32.7 repository in case the base image is using 32.6 11 | RUN sed -i 's/r32.6 main/r32.7 main/g' /etc/apt/sources.list.d/nvidia.list 12 | 13 | # Install CUDA 14 | RUN apt-get install -y nvidia-l4t-cuda nvidia-cuda 15 | 16 | # Set paths 17 | ENV CUDA_HOME=/usr/local/cuda-10.2 18 | 19 | # Build some (but not all) of the sample apps 20 | RUN \ 21 | export SMS=72 && \ 22 | cd /usr/local/cuda-10.2/samples/0_Simple/clock/ && make -j8 && \ 23 | cd /usr/local/cuda-10.2/samples/1_Utilities/deviceQuery/ && make -j8 && \ 24 | cd /usr/local/cuda-10.2/samples/2_Graphics/simpleTexture3D/ && make -j8 && \ 25 | cd /usr/local/cuda-10.2/samples/2_Graphics/simpleGL/ && make -j8 && \ 26 | cd /usr/local/cuda-10.2/samples/3_Imaging/postProcessGL/ && make -j8 && \ 27 | cd /usr/local/cuda-10.2/samples/5_Simulations/smokeParticles && make -j8 28 | 29 | ENV UDEV=1 30 | 31 | # Download and install BSP binaries for L4T 32.7 32 | RUN \ 33 | cd /tmp/ && wget https://developer.nvidia.com/embedded/l4t/r32_release_v7.1/t186/jetson_linux_r32.7.1_aarch64.tbz2 && \ 34 | tar xf jetson_linux_r32.7.1_aarch64.tbz2 && rm jetson_linux_r32.7.1_aarch64.tbz2 && \ 35 | cd Linux_for_Tegra && \ 36 | sed -i 's/config.tbz2\"/config.tbz2\" --exclude=etc\/hosts --exclude=etc\/hostname/g' apply_binaries.sh && \ 37 | sed -i 's/install --owner=root --group=root \"${QEMU_BIN}\" \"${L4T_ROOTFS_DIR}\/usr\/bin\/\"/#install --owner=root --group=root \"${QEMU_BIN}\" \"${L4T_ROOTFS_DIR}\/usr\/bin\/\"/g' nv_tegra/nv-apply-debs.sh && \ 38 | sed -i 's/chroot . \// /g' nv_tegra/nv-apply-debs.sh && \ 39 | ./apply_binaries.sh -r / --target-overlay && cd .. \ 40 | rm -rf Linux_for_Tegra && \ 41 | echo "/usr/lib/aarch64-linux-gnu/tegra" > /etc/ld.so.conf.d/nvidia-tegra.conf && ldconfig 42 | 43 | WORKDIR /usr/local/cuda-10.2/samples/bin/aarch64/linux/release 44 | 45 | CMD [ "sleep", "infinity" ] 46 | -------------------------------------------------------------------------------- /CUDA/Dockerfile.jetson-nano: -------------------------------------------------------------------------------- 1 | FROM balenalib/jetson-nano-ubuntu:bionic-run-20221215 2 | 3 | 4 | # Don't prompt with any configuration questions 5 | ENV DEBIAN_FRONTEND noninteractive 6 | 7 | # Install some utils 8 | RUN apt-get update && apt-get install -y lbzip2 git wget unzip jq xorg tar python3 libegl1 binutils 9 | 10 | # Update to 32.7 repository in case the base image is using 32.6 11 | RUN sed -i 's/r32.6 main/r32.7 main/g' /etc/apt/sources.list.d/nvidia.list 12 | 13 | # Install CUDA 14 | RUN apt-get install -y nvidia-l4t-cuda nvidia-cuda 15 | 16 | # Set paths 17 | ENV CUDA_HOME=/usr/local/cuda-10.2 18 | 19 | # Build some (but not all) of the sample apps 20 | RUN \ 21 | export SMS=53 && \ 22 | cd /usr/local/cuda-10.2/samples/0_Simple/clock/ && make -j8 && \ 23 | cd /usr/local/cuda-10.2/samples/1_Utilities/deviceQuery/ && make -j8 && \ 24 | cd /usr/local/cuda-10.2/samples/2_Graphics/simpleTexture3D/ && make -j8 && \ 25 | cd /usr/local/cuda-10.2/samples/2_Graphics/simpleGL/ && make -j8 && \ 26 | cd /usr/local/cuda-10.2/samples/3_Imaging/postProcessGL/ && make -j8 && \ 27 | cd /usr/local/cuda-10.2/samples/5_Simulations/smokeParticles && make -j8 28 | 29 | ENV UDEV=1 30 | 31 | # Download and install BSP binaries for L4T 32.7.2 32 | RUN \ 33 | wget https://developer.nvidia.com/embedded/l4t/r32_release_v7.2/t210/jetson-210_linux_r32.7.2_aarch64.tbz2 && \ 34 | tar xf jetson-210_linux_r32.7.2_aarch64.tbz2 && \ 35 | cd Linux_for_Tegra && \ 36 | sed -i 's/config.tbz2\"/config.tbz2\" --exclude=etc\/hosts --exclude=etc\/hostname/g' apply_binaries.sh && \ 37 | sed -i 's/install --owner=root --group=root \"${QEMU_BIN}\" \"${L4T_ROOTFS_DIR}\/usr\/bin\/\"/#install --owner=root --group=root \"${QEMU_BIN}\" \"${L4T_ROOTFS_DIR}\/usr\/bin\/\"/g' nv_tegra/nv-apply-debs.sh && \ 38 | sed -i 's/chroot . \// /g' nv_tegra/nv-apply-debs.sh && \ 39 | ./apply_binaries.sh -r / --target-overlay && cd .. \ 40 | rm -rf jetson-210_linux_r32.7.2_aarch64.tbz2 && \ 41 | rm -rf Linux_for_Tegra && \ 42 | echo "/usr/lib/aarch64-linux-gnu/tegra" > /etc/ld.so.conf.d/nvidia-tegra.conf && ldconfig 43 | 44 | WORKDIR /usr/local/cuda-10.2/samples/bin/aarch64/linux/release 45 | 46 | CMD [ "sleep", "infinity" ] 47 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # jetson-sample-new 2 | Examples of creating containers for CUDA and OpenCV on Jetson devices (Nano, TX2, Xavier and Orin) running on balenaOS. 3 | 4 | **NOTE**: We are working on updating the Jetson Orin examples in this repository to Jetpack 6. 5 | 6 | ## Installation 7 | 8 | You can deploy this project to your Jetson device simply by using the button below: 9 | 10 | [![balena deploy button](https://www.balena.io/deploy.svg)](https://dashboard.balena-cloud.com/deploy?repoUrl=https://github.com/balena-io-experimental/jetson-sample-new) 11 | 12 | 13 | If you don't have a balena account, you will be prompted to create one. Otherwise you can use the [balenaCLI](https://www.balena.io/docs/reference/balena-cli/) and push this project to a fleet of one or more devices. 14 | 15 | This project uses [multiple Dockerfiles](https://www.balena.io/docs/learn/develop/dockerfile/#multiple-dockerfiles) so it will build for the proper device based on the default device you select for your fleet. 16 | 17 | NOTE: You can use the Dockerfile.jetson-agx-orin-devkit file for any Orin device. 18 | 19 | ## How to use 20 | 21 | ### CUDA examples 22 | The cuda container has some sample programs that use CUDA for real time graphics. To run these samples, SSH into the app container using the balenaCloud terminal or CLI. Connect your Jetson device to a monitor before issuing these commands. 23 | 24 | First, start the X11 window system which will provide graphic support on the display attached to the Jetson: 25 | 26 | `X &` 27 | 28 | (Note the `&` causes the process to run in the background and return our prompt, although you may need to hit enter more than once to get the prompt back.) 29 | 30 | The most visually impressive demo is called “smokeParticles” and can be run by typing the following command: 31 | 32 | `./smokeParticles` 33 | 34 | To stop the demo you can hit CTRL + C. Below are the commands to run a few other demos, some of which just return information to the terminal without generating graphics on the display. 35 | ``` 36 | ./deviceQuery 37 | ./simpleTexture3D 38 | ./simpleGL 39 | ./postProcessGL 40 | ``` 41 | 42 | For Jetson Orin devices on Jetpack 6, you'll need to use the full path to the sample demos: 43 | ``` 44 | /cuda-samples/Samples/1_Utilities/deviceQuery/deviceQuery 45 | /cuda-samples/Samples/0_Introduction/simpleTexture3D/simpleTexture3D 46 | /cuda-samples/Samples/5_Domain_Specific/simpleGL/simpleGL 47 | /cuda-samples/Samples/5_Domain_Specific/postProcessGL/postProcessGL 48 | ``` 49 | 50 | You can use the Dockerfile in our CUDA sample as a template for building your own containers that may need CUDA support. (Installing and building the cuda samples can be removed to save space and build time.) 51 | 52 | ### OpenCV examples 53 | 54 | (Note: If you were running the CUDA examples above you may first have to kill the X server in that session before continuing below. To do that, 55 | type: `ps aux | grep "X"` then find the PID for the running X server and issue `kill ` substituting the PID value for ``) 56 | 57 | OpenCV will be accelerated by the GPU so it has the same CUDA components as the cuda container, and will be built inside the Dockerfile. 58 | 59 | To see the OpenCV demos SSH into the app container using the balenaCloud terminal or CLI. 60 | 61 | Enter the following command to direct our output to the first display: 62 | `export DISPLAY=:0` 63 | Now enter this command to start the X11 window system in the background: 64 | `X &` 65 | Finally, type one of the following lines to see the samples on the display: 66 | ``` 67 | ./example_ximgproc_fourier_descriptors_demo 68 | ./example_ximgproc_paillou_demo corridor.jpg 69 | ``` 70 | If all goes well, you will see example images on the monitor plugged into the Jetson's video output (HDMI/DisplayPort). (While these examples are not particularly exciting, they are meant to confirm that OpenCV is indeed installed.) 71 | 72 | 73 | -------------------------------------------------------------------------------- /OPENCV/Dockerfile.jetson-tx2: -------------------------------------------------------------------------------- 1 | FROM balenalib/jetson-tx2-ubuntu:bionic-run-20221215 as buildstep 2 | 3 | WORKDIR /usr/src/app 4 | 5 | # Don't prompt with any configuration questions 6 | ENV DEBIAN_FRONTEND noninteractive 7 | 8 | # Update to 32.7 repository in case the base image is using 32.6 9 | RUN sed -i 's/r32.6 main/r32.7 main/g' /etc/apt/sources.list.d/nvidia.list 10 | 11 | # Install CUDA, CUDA compiler and some utilities 12 | RUN \ 13 | apt-get update && apt-get install -y cuda-toolkit-10-2 cuda-compiler-10-2 \ 14 | lbzip2 xorg-dev \ 15 | cmake wget unzip \ 16 | libgtk2.0-dev \ 17 | libavcodec-dev \ 18 | libgstreamer1.0-dev \ 19 | libgstreamer-plugins-base1.0-dev \ 20 | libjpeg-dev \ 21 | libpng-dev \ 22 | libtiff-dev \ 23 | libdc1394-22-dev -y --no-install-recommends && \ 24 | echo "/usr/lib/aarch64-linux-gnu/tegra" > /etc/ld.so.conf.d/nvidia-tegra.conf && \ 25 | ldconfig && \ 26 | wget https://github.com/opencv/opencv/archive/4.5.1.zip && \ 27 | unzip 4.5.1.zip && rm 4.5.1.zip 28 | 29 | RUN \ 30 | wget https://github.com/opencv/opencv_contrib/archive/4.5.1.zip -O opencv_modules.4.5.1.zip && \ 31 | unzip opencv_modules.4.5.1.zip && rm opencv_modules.4.5.1.zip && \ 32 | export CUDA_HOME=/usr/local/cuda-10.2/ && \ 33 | export LD_LIBRARY_PATH=${CUDA_HOME}/lib64 && \ 34 | PATH=${CUDA_HOME}/bin:${PATH} && export PATH && \ 35 | mkdir -p opencv-4.5.1/build && cd opencv-4.5.1/build && \ 36 | cmake -D WITH_CUDA=ON -D CUDA_ARCH_BIN="6.2" -D BUILD_LIST=cudev,highgui,videoio,cudaimgproc,ximgproc -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-4.5.1/modules -D CUDA_ARCH_PTX="" -D WITH_GSTREAMER=ON -D WITH_LIBV4L=ON -D BUILD_TESTS=ON -D BUILD_PERF_TESTS=ON -D BUILD_SAMPLES=ON -D BUILD_EXAMPLES=ON -D CMAKE_BUILD_TYPE=RELEASE -D WITH_GTK=on -D BUILD_DOCS=OFF -D CMAKE_INSTALL_PREFIX=/usr/local .. && make -j32 && make install && \ 37 | cp /usr/src/app/opencv-4.5.1/build/bin/opencv_version /usr/src/app/ && \ 38 | cp /usr/src/app/opencv-4.5.1/build/bin/example_ximgproc_paillou_demo /usr/src/app/ && \ 39 | cp /usr/src/app/opencv-4.5.1/build/bin/example_ximgproc_fourier_descriptors_demo /usr/src/app/ && \ 40 | cd /usr/src/app/ && rm -rf /usr/src/app/opencv-4.5.1 && \ 41 | mv opencv_contrib-4.5.1/samples/data/corridor.jpg /usr/src/app/ && \ 42 | rm -rf /usr/src/app/opencv_contrib-4.5.1 43 | 44 | FROM balenalib/jetson-tx2-ubuntu:bionic-run-20221215 as final 45 | 46 | # Starting with a fresh new base image, but with access to files in previous build 47 | 48 | # Uncomment if planning to use libs from here 49 | #COPY --from=buildstep /usr/local/cuda-10.2 /usr/local/cuda-10.2 50 | 51 | # Minimum CUDA runtime libraries 52 | COPY --from=buildstep /usr/lib/aarch64-linux-gnu /usr/lib/aarch64-linux-gnu 53 | 54 | # OpenCV runtime libraries 55 | COPY --from=buildstep /usr/local/lib /usr/local/lib 56 | 57 | # Demo apps 58 | COPY --from=buildstep /usr/src/app/ /usr/src/app/ 59 | 60 | ENV DEBIAN_FRONTEND noninteractive 61 | 62 | # Download and install BSP binaries for L4T 32.4.2 63 | RUN apt-get update && apt-get install -y xorg wget tar lbzip2 python3 libegl1 binutils && \ 64 | cd /tmp/ && wget https://developer.nvidia.com/embedded/l4t/r32_release_v7.2/t186/jetson_linux_r32.7.2_aarch64.tbz2 && \ 65 | tar xf jetson_linux_r32.7.2_aarch64.tbz2 && rm jetson_linux_r32.7.2_aarch64.tbz2&& \ 66 | cd Linux_for_Tegra && \ 67 | sed -i 's/config.tbz2\"/config.tbz2\" --exclude=etc\/hosts --exclude=etc\/hostname/g' apply_binaries.sh && \ 68 | sed -i 's/install --owner=root --group=root \"${QEMU_BIN}\" \"${L4T_ROOTFS_DIR}\/usr\/bin\/\"/#install --owner=root --group=root \"${QEMU_BIN}\" \"${L4T_ROOTFS_DIR}\/usr\/bin\/\"/g' nv_tegra/nv-apply-debs.sh && \ 69 | sed -i 's/chroot . \// /g' nv_tegra/nv-apply-debs.sh && \ 70 | ./apply_binaries.sh -r / --target-overlay && cd .. \ 71 | rm -rf Linux_for_Tegra && \ 72 | echo "/usr/lib/aarch64-linux-gnu/tegra" > /etc/ld.so.conf.d/nvidia-tegra.conf && ldconfig 73 | 74 | ENV UDEV=1 75 | 76 | ENV LD_LIBRARY_PATH=/usr/local/lib 77 | 78 | WORKDIR /usr/src/app/ 79 | 80 | CMD [ "sleep", "infinity" ] 81 | -------------------------------------------------------------------------------- /OPENCV/Dockerfile.jetson-xavier: -------------------------------------------------------------------------------- 1 | FROM balenalib/jetson-xavier-ubuntu:bionic-run-20221215 as buildstep 2 | 3 | WORKDIR /usr/src/app 4 | 5 | # Don't prompt with any configuration questions 6 | ENV DEBIAN_FRONTEND noninteractive 7 | 8 | # Update to 32.7 repository in case the base image is using 32.6 9 | RUN sed -i 's/r32.6 main/r32.7 main/g' /etc/apt/sources.list.d/nvidia.list 10 | 11 | # Install CUDA, CUDA compiler and some utilities 12 | RUN \ 13 | apt-get update && apt-get install -y cuda-toolkit-10-2 cuda-compiler-10-2 \ 14 | lbzip2 xorg-dev \ 15 | cmake wget unzip \ 16 | libgtk2.0-dev \ 17 | libavcodec-dev \ 18 | libgstreamer1.0-dev \ 19 | libgstreamer-plugins-base1.0-dev \ 20 | libjpeg-dev \ 21 | libpng-dev \ 22 | libtiff-dev \ 23 | libdc1394-22-dev -y --no-install-recommends && \ 24 | echo "/usr/lib/aarch64-linux-gnu/tegra" > /etc/ld.so.conf.d/nvidia-tegra.conf && \ 25 | ldconfig && \ 26 | wget https://github.com/opencv/opencv/archive/4.5.1.zip && \ 27 | unzip 4.5.1.zip && rm 4.5.1.zip 28 | 29 | RUN \ 30 | wget https://github.com/opencv/opencv_contrib/archive/4.5.1.zip -O opencv_modules.4.5.1.zip && \ 31 | unzip opencv_modules.4.5.1.zip && rm opencv_modules.4.5.1.zip && \ 32 | export CUDA_HOME=/usr/local/cuda-10.2/ && \ 33 | export LD_LIBRARY_PATH=${CUDA_HOME}/lib64 && \ 34 | PATH=${CUDA_HOME}/bin:${PATH} && export PATH && \ 35 | mkdir -p opencv-4.5.1/build && cd opencv-4.5.1/build && \ 36 | cmake -D WITH_CUDA=ON -D CUDA_ARCH_BIN="7.2" -D BUILD_LIST=cudev,highgui,videoio,cudaimgproc,ximgproc -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-4.5.1/modules -D CUDA_ARCH_PTX="" -D WITH_GSTREAMER=ON -D WITH_LIBV4L=ON -D BUILD_TESTS=ON -D BUILD_PERF_TESTS=ON -D BUILD_SAMPLES=ON -D BUILD_EXAMPLES=ON -D CMAKE_BUILD_TYPE=RELEASE -D WITH_GTK=on -D BUILD_DOCS=OFF -D CMAKE_INSTALL_PREFIX=/usr/local .. && make -j32 && make install && \ 37 | cp /usr/src/app/opencv-4.5.1/build/bin/opencv_version /usr/src/app/ && \ 38 | cp /usr/src/app/opencv-4.5.1/build/bin/example_ximgproc_paillou_demo /usr/src/app/ && \ 39 | cp /usr/src/app/opencv-4.5.1/build/bin/example_ximgproc_fourier_descriptors_demo /usr/src/app/ && \ 40 | cd /usr/src/app/ && rm -rf /usr/src/app/opencv-4.5.1 && \ 41 | mv opencv_contrib-4.5.1/samples/data/corridor.jpg /usr/src/app/ && \ 42 | rm -rf /usr/src/app/opencv_contrib-4.5.1 43 | 44 | FROM balenalib/jetson-xavier-ubuntu:bionic-run-20221215 as final 45 | 46 | # Starting with a fresh new base image, but with access to files in previous build 47 | 48 | # Uncomment if planning to use libs from here 49 | #COPY --from=buildstep /usr/local/cuda-10.2 /usr/local/cuda-10.2 50 | 51 | # Minimum CUDA runtime libraries 52 | COPY --from=buildstep /usr/lib/aarch64-linux-gnu /usr/lib/aarch64-linux-gnu 53 | 54 | # OpenCV runtime libraries 55 | COPY --from=buildstep /usr/local/lib /usr/local/lib 56 | 57 | # Demo apps 58 | COPY --from=buildstep /usr/src/app/ /usr/src/app/ 59 | 60 | ENV DEBIAN_FRONTEND noninteractive 61 | 62 | # Download and install BSP binaries for L4T 32.7 63 | RUN apt-get update && apt-get install -y xorg wget tar lbzip2 python3 libegl1 binutils && \ 64 | cd /tmp/ && wget https://developer.nvidia.com/embedded/l4t/r32_release_v7.1/t186/jetson_linux_r32.7.1_aarch64.tbz2 && \ 65 | tar xf jetson_linux_r32.7.1_aarch64.tbz2 && rm jetson_linux_r32.7.1_aarch64.tbz2 && \ 66 | cd Linux_for_Tegra && \ 67 | sed -i 's/config.tbz2\"/config.tbz2\" --exclude=etc\/hosts --exclude=etc\/hostname/g' apply_binaries.sh && \ 68 | sed -i 's/install --owner=root --group=root \"${QEMU_BIN}\" \"${L4T_ROOTFS_DIR}\/usr\/bin\/\"/#install --owner=root --group=root \"${QEMU_BIN}\" \"${L4T_ROOTFS_DIR}\/usr\/bin\/\"/g' nv_tegra/nv-apply-debs.sh && \ 69 | sed -i 's/chroot . \// /g' nv_tegra/nv-apply-debs.sh && \ 70 | ./apply_binaries.sh -r / --target-overlay && cd .. \ 71 | rm -rf Linux_for_Tegra && \ 72 | echo "/usr/lib/aarch64-linux-gnu/tegra" > /etc/ld.so.conf.d/nvidia-tegra.conf && ldconfig 73 | 74 | ENV UDEV=1 75 | 76 | ENV LD_LIBRARY_PATH=/usr/local/lib 77 | 78 | WORKDIR /usr/src/app/ 79 | 80 | CMD [ "sleep", "infinity" ] 81 | -------------------------------------------------------------------------------- /OPENCV/Dockerfile.jetson-nano: -------------------------------------------------------------------------------- 1 | FROM balenalib/jetson-nano-ubuntu:bionic-run-20221215 as buildstep 2 | 3 | WORKDIR /usr/src/app 4 | 5 | # Don't prompt with any configuration questions 6 | ENV DEBIAN_FRONTEND noninteractive 7 | 8 | # Update to 32.7 repository in case the base image is using 32.6 9 | RUN sed -i 's/r32.6 main/r32.7 main/g' /etc/apt/sources.list.d/nvidia.list 10 | 11 | # Install CUDA, CUDA compiler and some utilities 12 | RUN \ 13 | apt-get update && apt-get install -y cuda-toolkit-10-2 cuda-compiler-10-2 \ 14 | lbzip2 xorg-dev \ 15 | cmake wget unzip \ 16 | libgtk2.0-dev \ 17 | libavcodec-dev \ 18 | libgstreamer1.0-dev \ 19 | libgstreamer-plugins-base1.0-dev \ 20 | libjpeg-dev \ 21 | libpng-dev \ 22 | libtiff-dev \ 23 | libdc1394-22-dev -y --no-install-recommends && \ 24 | echo "/usr/lib/aarch64-linux-gnu/tegra" > /etc/ld.so.conf.d/nvidia-tegra.conf && \ 25 | ldconfig && \ 26 | wget https://github.com/opencv/opencv/archive/4.5.1.zip && \ 27 | unzip 4.5.1.zip && rm 4.5.1.zip 28 | 29 | RUN \ 30 | wget https://github.com/opencv/opencv_contrib/archive/4.5.1.zip -O opencv_modules.4.5.1.zip && \ 31 | unzip opencv_modules.4.5.1.zip && rm opencv_modules.4.5.1.zip && \ 32 | export CUDA_HOME=/usr/local/cuda-10.2/ && \ 33 | export LD_LIBRARY_PATH=${CUDA_HOME}/lib64 && \ 34 | PATH=${CUDA_HOME}/bin:${PATH} && export PATH && \ 35 | mkdir -p opencv-4.5.1/build && cd opencv-4.5.1/build && \ 36 | cmake -D WITH_CUDA=ON -D CUDA_ARCH_BIN="5.3" -D BUILD_LIST=cudev,highgui,videoio,cudaimgproc,ximgproc -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-4.5.1/modules -D CUDA_ARCH_PTX="" -D WITH_GSTREAMER=ON -D WITH_LIBV4L=ON -D BUILD_TESTS=ON -D BUILD_PERF_TESTS=ON -D BUILD_SAMPLES=ON -D BUILD_EXAMPLES=ON -D CMAKE_BUILD_TYPE=RELEASE -D WITH_GTK=on -D BUILD_DOCS=OFF -D CMAKE_INSTALL_PREFIX=/usr/local .. && make -j32 && make install && \ 37 | cp /usr/src/app/opencv-4.5.1/build/bin/opencv_version /usr/src/app/ && \ 38 | cp /usr/src/app/opencv-4.5.1/build/bin/example_ximgproc_paillou_demo /usr/src/app/ && \ 39 | cp /usr/src/app/opencv-4.5.1/build/bin/example_ximgproc_fourier_descriptors_demo /usr/src/app/ && \ 40 | cd /usr/src/app/ && rm -rf /usr/src/app/opencv-4.5.1 && \ 41 | mv opencv_contrib-4.5.1/samples/data/corridor.jpg /usr/src/app/ && \ 42 | rm -rf /usr/src/app/opencv_contrib-4.5.1 43 | 44 | FROM balenalib/jetson-nano-ubuntu:bionic-run-20221215 as final 45 | 46 | # Starting with a fresh new base image, but with access to files in previous build 47 | 48 | # Uncomment if planning to use libs from here 49 | #COPY --from=buildstep /usr/local/cuda-10.2 /usr/local/cuda-10.2 50 | 51 | # Minimum CUDA runtime libraries 52 | COPY --from=buildstep /usr/lib/aarch64-linux-gnu /usr/lib/aarch64-linux-gnu 53 | 54 | # OpenCV runtime libraries 55 | COPY --from=buildstep /usr/local/lib /usr/local/lib 56 | 57 | # Demo apps 58 | COPY --from=buildstep /usr/src/app/ /usr/src/app/ 59 | 60 | ENV DEBIAN_FRONTEND noninteractive 61 | 62 | # Download and install BSP binaries for L4T 32.7.2 63 | RUN apt-get update && apt-get install -y xorg wget tar lbzip2 python3 libegl1 binutils && \ 64 | wget https://developer.nvidia.com/embedded/l4t/r32_release_v7.2/t210/jetson-210_linux_r32.7.2_aarch64.tbz2 && \ 65 | tar xf jetson-210_linux_r32.7.2_aarch64.tbz2 && \ 66 | cd Linux_for_Tegra && \ 67 | sed -i 's/config.tbz2\"/config.tbz2\" --exclude=etc\/hosts --exclude=etc\/hostname/g' apply_binaries.sh && \ 68 | sed -i 's/install --owner=root --group=root \"${QEMU_BIN}\" \"${L4T_ROOTFS_DIR}\/usr\/bin\/\"/#install --owner=root --group=root \"${QEMU_BIN}\" \"${L4T_ROOTFS_DIR}\/usr\/bin\/\"/g' nv_tegra/nv-apply-debs.sh && \ 69 | sed -i 's/chroot . \// /g' nv_tegra/nv-apply-debs.sh && \ 70 | ./apply_binaries.sh -r / --target-overlay && cd .. \ 71 | rm -rf jetson-210_linux_r32.7.2_aarch64.tbz2 && \ 72 | rm -rf Linux_for_Tegra && \ 73 | echo "/usr/lib/aarch64-linux-gnu/tegra" > /etc/ld.so.conf.d/nvidia-tegra.conf && ldconfig 74 | 75 | ENV UDEV=1 76 | 77 | ENV LD_LIBRARY_PATH=/usr/local/lib 78 | 79 | WORKDIR /usr/src/app/ 80 | 81 | CMD [ "sleep", "infinity" ] 82 | -------------------------------------------------------------------------------- /CUDA/Dockerfile.jetson-agx-orin-devkit: -------------------------------------------------------------------------------- 1 | FROM balenalib/jetson-agx-orin-devkit-ubuntu:jammy-20240401 2 | 3 | # Prevent apt-get prompting for input 4 | ENV DEBIAN_FRONTEND noninteractive 5 | 6 | RUN echo "deb https://repo.download.nvidia.com/jetson/common r36.3 main" > /etc/apt/sources.list.d/nvidia.list \ 7 | && echo "deb https://repo.download.nvidia.com/jetson/t234 r36.3 main" >> /etc/apt/sources.list.d/nvidia.list \ 8 | && apt-key adv --fetch-key http://repo.download.nvidia.com/jetson/jetson-ota-public.asc \ 9 | && mkdir -p /opt/nvidia/l4t-packages/ && touch /opt/nvidia/l4t-packages/.nv-l4t-disable-boot-fw-update-in-preinstall 10 | 11 | # Download and install BSP binaries for L4T 36.3 - Jetpack 6 12 | RUN \ 13 | apt-get update && apt-get install -y wget tar lbzip2 binutils xz-utils zstd qemu-user-static cpio git && cd /tmp/ && wget https://developer.nvidia.com/downloads/embedded/l4t/r36_release_v3.0/release/jetson_linux_r36.3.0_aarch64.tbz2 && \ 14 | tar xf jetson_linux_r36.3.0_aarch64.tbz2 && \ 15 | cd Linux_for_Tegra && \ 16 | mkdir -p /tmp/Linux_for_Tegra/rootfs/boot/ && \ 17 | mkdir -p /tmp/Linux_for_Tegra/rootfs/usr/bin && \ 18 | mkdir -p /tmp/Linux_for_Tegra/rootfs/etc && touch /tmp/Linux_for_Tegra/rootfs/etc/resolv.conf && \ 19 | sed -i 's/config.tbz2\"/config.tbz2\" --exclude=etc\/hosts --exclude=etc\/hostname/g' apply_binaries.sh && \ 20 | sed -i 's/CheckPackage qemu-user-static/#CheckPackage qemu-user-static/g' tools/l4t_update_initrd.sh && \ 21 | sed -i 's/trap CleanupVirEnv/#trap CleanupVirEnv/g' tools/l4t_update_initrd.sh&& \ 22 | sed -i 's|cp /usr/bin/qemu-aarch64-static|#cp /usr/bin/qemu-aarch64-static|g' tools/l4t_update_initrd.sh && \ 23 | sed -i 's|^UpdateInitrd|#UpdateInitrd|g' tools/l4t_update_initrd.sh && \ 24 | sed -i 's|^UpdateBackToBaseInitrd|#UpdateBackToBaseInitrd|g' tools/l4t_update_initrd.sh && \ 25 | sed -i 's|cp /etc/resolv.conf|#cp /etc/resolv.conf|g' tools/l4t_update_initrd.sh && \ 26 | sed -i 's|mv "${LDK_ROOTFS_DIR}/etc/resolv.conf"|cp "${LDK_ROOTFS_DIR}/etc/resolv.conf"|g' tools/l4t_update_initrd.sh && \ 27 | sed -i 's| PrepareVirEnv|#PrepareVirEnv|g' tools/l4t_update_initrd.sh && \ 28 | sed -i 's/install --owner=root --group=root \"${QEMU_BIN}\" \"${L4T_ROOTFS_DIR}\/usr\/bin\/\"/#install --owner=root --group=root \"${QEMU_BIN}\" \"${L4T_ROOTFS_DIR}\/usr\/bin\/\"/g' nv_tegra/nv-apply-debs.sh && \ 29 | sed -i 's/chroot . \// /g' nv_tegra/nv-apply-debs.sh && \ 30 | cd /tmp/Linux_for_Tegra/ && ./apply_binaries.sh -r / --target-overlay && cd .. && \ 31 | rm -rf Linux_for_Tegra && \ 32 | echo "/usr/lib/aarch64-linux-gnu/tegra" > /etc/ld.so.conf.d/nvidia-tegra.conf && ldconfig 33 | 34 | # Install X 35 | RUN apt-get install -y --no-install-recommends \ 36 | xserver-xorg-input-evdev \ 37 | xinit \ 38 | x11-xserver-utils \ 39 | dbus-x11 \ 40 | xterm 41 | 42 | ENV LD_LIBRARY_PATH=/usr/lib/aarch64-linux-gnu/tegra 43 | ENV UDEV=1 44 | 45 | # Prevent screen from turning off 46 | RUN echo "#!/bin/bash" > /etc/X11/xinit/xserverrc \ 47 | && echo "" >> /etc/X11/xinit/xserverrc \ 48 | && echo 'exec /usr/bin/X -s 0 dpms' >> /etc/X11/xinit/xserverrc && \ 49 | echo 'modules=("nvidia_drm"); for module in "${modules[@]}"; do if lsmod | grep -q ${module} ; then echo "Found $module"; rmmod $module; fi; done; startxfce4;' > /opt/startxfce.sh 50 | 51 | ## If any apt packages install mesa-egl, it will overwrite the tegra-egl 52 | ## symlink and ld path, so the following command will ensure tegra-egl remains 53 | ## available: 54 | RUN \ 55 | echo "/usr/lib/aarch64-linux-gnu/tegra\n/usr/lib/aarch64-linux-gnu/tegra-egl" \ 56 | > /etc/ld.so.conf.d/000-nvidia-tegra-egl.conf \ 57 | && ldconfig 58 | 59 | ## Install dependencies for some of the NVIDIA examples 60 | RUN \ 61 | apt-get install -y libegl1 binutils xz-utils zstd libglu1-mesa libglu1-mesa-dev \ 62 | freeglut3 freeglut3-dev 63 | 64 | ## Optional: Build some CUDA samples: 65 | RUN \ 66 | apt-get install -y -o Dpkg::Options::="--force-confdef" nvidia-l4t-cuda nvidia-cuda build-essential cuda-nvcc-12-2 \ 67 | && git clone https://github.com/NVIDIA/cuda-samples.git && cd cuda-samples/Samples/1_Utilities/deviceQuery && make && \ 68 | cd /cuda-samples/Samples/5_Domain_Specific/smokeParticles && make && \ 69 | cd /cuda-samples/Samples/5_Domain_Specific/simpleGL && make && \ 70 | cd /cuda-samples/Samples/5_Domain_Specific/postProcessGL && make && \ 71 | cd /cuda-samples/Samples/0_Introduction/clock && make && \ 72 | cd /cuda-samples/Samples/0_Introduction/simpleTexture3D && make 73 | 74 | 75 | 76 | # Create a shell script for launching NVIDIA DRM 77 | RUN printf 'modules=("nvidia_drm"); for module in "${modules[@]}"; do if lsmod | grep -q ${module} ; then echo "Found $module"; rmmod $module; fi; done; sleep infinity;' > /usr/src/drm-script.sh && chmod +x /usr/src/drm-script.sh 78 | 79 | WORKDIR /cuda-samples/Samples/5_Domain_Specific/smokeParticles 80 | 81 | CMD ["/bin/bash", "/usr/src/drm-script.sh"] 82 | -------------------------------------------------------------------------------- /CUDA/Dockerfile.jetson-agx-orin-devkit-64gb: -------------------------------------------------------------------------------- 1 | FROM balenalib/jetson-agx-orin-devkit-ubuntu:jammy-20240401 2 | 3 | # Prevent apt-get prompting for input 4 | ENV DEBIAN_FRONTEND noninteractive 5 | 6 | RUN echo "deb https://repo.download.nvidia.com/jetson/common r36.3 main" > /etc/apt/sources.list.d/nvidia.list \ 7 | && echo "deb https://repo.download.nvidia.com/jetson/t234 r36.3 main" >> /etc/apt/sources.list.d/nvidia.list \ 8 | && apt-key adv --fetch-key http://repo.download.nvidia.com/jetson/jetson-ota-public.asc \ 9 | && mkdir -p /opt/nvidia/l4t-packages/ && touch /opt/nvidia/l4t-packages/.nv-l4t-disable-boot-fw-update-in-preinstall 10 | 11 | # Download and install BSP binaries for L4T 36.3 - Jetpack 6 12 | RUN \ 13 | apt-get update && apt-get install -y wget tar lbzip2 binutils xz-utils zstd qemu-user-static cpio git && cd /tmp/ && wget https://developer.nvidia.com/downloads/embedded/l4t/r36_release_v3.0/release/jetson_linux_r36.3.0_aarch64.tbz2 && \ 14 | tar xf jetson_linux_r36.3.0_aarch64.tbz2 && \ 15 | cd Linux_for_Tegra && \ 16 | mkdir -p /tmp/Linux_for_Tegra/rootfs/boot/ && \ 17 | mkdir -p /tmp/Linux_for_Tegra/rootfs/usr/bin && \ 18 | mkdir -p /tmp/Linux_for_Tegra/rootfs/etc && touch /tmp/Linux_for_Tegra/rootfs/etc/resolv.conf && \ 19 | sed -i 's/config.tbz2\"/config.tbz2\" --exclude=etc\/hosts --exclude=etc\/hostname/g' apply_binaries.sh && \ 20 | sed -i 's/CheckPackage qemu-user-static/#CheckPackage qemu-user-static/g' tools/l4t_update_initrd.sh && \ 21 | sed -i 's/trap CleanupVirEnv/#trap CleanupVirEnv/g' tools/l4t_update_initrd.sh&& \ 22 | sed -i 's|cp /usr/bin/qemu-aarch64-static|#cp /usr/bin/qemu-aarch64-static|g' tools/l4t_update_initrd.sh && \ 23 | sed -i 's|^UpdateInitrd|#UpdateInitrd|g' tools/l4t_update_initrd.sh && \ 24 | sed -i 's|^UpdateBackToBaseInitrd|#UpdateBackToBaseInitrd|g' tools/l4t_update_initrd.sh && \ 25 | sed -i 's|cp /etc/resolv.conf|#cp /etc/resolv.conf|g' tools/l4t_update_initrd.sh && \ 26 | sed -i 's|mv "${LDK_ROOTFS_DIR}/etc/resolv.conf"|cp "${LDK_ROOTFS_DIR}/etc/resolv.conf"|g' tools/l4t_update_initrd.sh && \ 27 | sed -i 's| PrepareVirEnv|#PrepareVirEnv|g' tools/l4t_update_initrd.sh && \ 28 | sed -i 's/install --owner=root --group=root \"${QEMU_BIN}\" \"${L4T_ROOTFS_DIR}\/usr\/bin\/\"/#install --owner=root --group=root \"${QEMU_BIN}\" \"${L4T_ROOTFS_DIR}\/usr\/bin\/\"/g' nv_tegra/nv-apply-debs.sh && \ 29 | sed -i 's/chroot . \// /g' nv_tegra/nv-apply-debs.sh && \ 30 | cd /tmp/Linux_for_Tegra/ && ./apply_binaries.sh -r / --target-overlay && cd .. && \ 31 | rm -rf Linux_for_Tegra && \ 32 | echo "/usr/lib/aarch64-linux-gnu/tegra" > /etc/ld.so.conf.d/nvidia-tegra.conf && ldconfig 33 | 34 | # Install X 35 | RUN apt-get install -y --no-install-recommends \ 36 | xserver-xorg-input-evdev \ 37 | xinit \ 38 | x11-xserver-utils \ 39 | dbus-x11 \ 40 | xterm 41 | 42 | ENV LD_LIBRARY_PATH=/usr/lib/aarch64-linux-gnu/tegra 43 | ENV UDEV=1 44 | 45 | # Prevent screen from turning off 46 | RUN echo "#!/bin/bash" > /etc/X11/xinit/xserverrc \ 47 | && echo "" >> /etc/X11/xinit/xserverrc \ 48 | && echo 'exec /usr/bin/X -s 0 dpms' >> /etc/X11/xinit/xserverrc && \ 49 | echo 'modules=("nvidia_drm"); for module in "${modules[@]}"; do if lsmod | grep -q ${module} ; then echo "Found $module"; rmmod $module; fi; done; startxfce4;' > /opt/startxfce.sh 50 | 51 | ## If any apt packages install mesa-egl, it will overwrite the tegra-egl 52 | ## symlink and ld path, so the following command will ensure tegra-egl remains 53 | ## available: 54 | RUN \ 55 | echo "/usr/lib/aarch64-linux-gnu/tegra\n/usr/lib/aarch64-linux-gnu/tegra-egl" \ 56 | > /etc/ld.so.conf.d/000-nvidia-tegra-egl.conf \ 57 | && ldconfig 58 | 59 | ## Install dependencies for some of the NVIDIA examples 60 | RUN \ 61 | apt-get install -y libegl1 binutils xz-utils zstd libglu1-mesa libglu1-mesa-dev \ 62 | freeglut3 freeglut3-dev 63 | 64 | ## Optional: Build some CUDA samples: 65 | RUN \ 66 | apt-get install -y -o Dpkg::Options::="--force-confdef" nvidia-l4t-cuda nvidia-cuda build-essential cuda-nvcc-12-2 \ 67 | && git clone https://github.com/NVIDIA/cuda-samples.git && cd cuda-samples/Samples/1_Utilities/deviceQuery && make && \ 68 | cd /cuda-samples/Samples/5_Domain_Specific/smokeParticles && make && \ 69 | cd /cuda-samples/Samples/5_Domain_Specific/simpleGL && make && \ 70 | cd /cuda-samples/Samples/5_Domain_Specific/postProcessGL && make && \ 71 | cd /cuda-samples/Samples/0_Introduction/clock && make && \ 72 | cd /cuda-samples/Samples/0_Introduction/simpleTexture3D && make 73 | 74 | 75 | 76 | # Create a shell script for launching NVIDIA DRM 77 | RUN printf 'modules=("nvidia_drm"); for module in "${modules[@]}"; do if lsmod | grep -q ${module} ; then echo "Found $module"; rmmod $module; fi; done; sleep infinity;' > /usr/src/drm-script.sh && chmod +x /usr/src/drm-script.sh 78 | 79 | WORKDIR /cuda-samples/Samples/5_Domain_Specific/smokeParticles 80 | 81 | CMD ["/bin/bash", "/usr/src/drm-script.sh"] 82 | -------------------------------------------------------------------------------- /CUDA/Dockerfile.jetson-orin-nano-devkit-nvme: -------------------------------------------------------------------------------- 1 | FROM balenalib/jetson-agx-orin-devkit-ubuntu:jammy-20240401 2 | 3 | # Prevent apt-get prompting for input 4 | ENV DEBIAN_FRONTEND noninteractive 5 | 6 | RUN echo "deb https://repo.download.nvidia.com/jetson/common r36.3 main" > /etc/apt/sources.list.d/nvidia.list \ 7 | && echo "deb https://repo.download.nvidia.com/jetson/t234 r36.3 main" >> /etc/apt/sources.list.d/nvidia.list \ 8 | && apt-key adv --fetch-key http://repo.download.nvidia.com/jetson/jetson-ota-public.asc \ 9 | && mkdir -p /opt/nvidia/l4t-packages/ && touch /opt/nvidia/l4t-packages/.nv-l4t-disable-boot-fw-update-in-preinstall 10 | 11 | # Download and install BSP binaries for L4T 36.3 - Jetpack 6 12 | RUN \ 13 | apt-get update && apt-get install -y wget tar lbzip2 binutils xz-utils zstd qemu-user-static cpio git && cd /tmp/ && wget https://developer.nvidia.com/downloads/embedded/l4t/r36_release_v3.0/release/jetson_linux_r36.3.0_aarch64.tbz2 && \ 14 | tar xf jetson_linux_r36.3.0_aarch64.tbz2 && \ 15 | cd Linux_for_Tegra && \ 16 | mkdir -p /tmp/Linux_for_Tegra/rootfs/boot/ && \ 17 | mkdir -p /tmp/Linux_for_Tegra/rootfs/usr/bin && \ 18 | mkdir -p /tmp/Linux_for_Tegra/rootfs/etc && touch /tmp/Linux_for_Tegra/rootfs/etc/resolv.conf && \ 19 | sed -i 's/config.tbz2\"/config.tbz2\" --exclude=etc\/hosts --exclude=etc\/hostname/g' apply_binaries.sh && \ 20 | sed -i 's/CheckPackage qemu-user-static/#CheckPackage qemu-user-static/g' tools/l4t_update_initrd.sh && \ 21 | sed -i 's/trap CleanupVirEnv/#trap CleanupVirEnv/g' tools/l4t_update_initrd.sh&& \ 22 | sed -i 's|cp /usr/bin/qemu-aarch64-static|#cp /usr/bin/qemu-aarch64-static|g' tools/l4t_update_initrd.sh && \ 23 | sed -i 's|^UpdateInitrd|#UpdateInitrd|g' tools/l4t_update_initrd.sh && \ 24 | sed -i 's|^UpdateBackToBaseInitrd|#UpdateBackToBaseInitrd|g' tools/l4t_update_initrd.sh && \ 25 | sed -i 's|cp /etc/resolv.conf|#cp /etc/resolv.conf|g' tools/l4t_update_initrd.sh && \ 26 | sed -i 's|mv "${LDK_ROOTFS_DIR}/etc/resolv.conf"|cp "${LDK_ROOTFS_DIR}/etc/resolv.conf"|g' tools/l4t_update_initrd.sh && \ 27 | sed -i 's| PrepareVirEnv|#PrepareVirEnv|g' tools/l4t_update_initrd.sh && \ 28 | sed -i 's/install --owner=root --group=root \"${QEMU_BIN}\" \"${L4T_ROOTFS_DIR}\/usr\/bin\/\"/#install --owner=root --group=root \"${QEMU_BIN}\" \"${L4T_ROOTFS_DIR}\/usr\/bin\/\"/g' nv_tegra/nv-apply-debs.sh && \ 29 | sed -i 's/chroot . \// /g' nv_tegra/nv-apply-debs.sh && \ 30 | cd /tmp/Linux_for_Tegra/ && ./apply_binaries.sh -r / --target-overlay && cd .. && \ 31 | rm -rf Linux_for_Tegra && \ 32 | echo "/usr/lib/aarch64-linux-gnu/tegra" > /etc/ld.so.conf.d/nvidia-tegra.conf && ldconfig 33 | 34 | # Install X 35 | RUN apt-get install -y --no-install-recommends \ 36 | xserver-xorg-input-evdev \ 37 | xinit \ 38 | x11-xserver-utils \ 39 | dbus-x11 \ 40 | xterm 41 | 42 | ENV LD_LIBRARY_PATH=/usr/lib/aarch64-linux-gnu/tegra 43 | ENV UDEV=1 44 | 45 | # Prevent screen from turning off 46 | RUN echo "#!/bin/bash" > /etc/X11/xinit/xserverrc \ 47 | && echo "" >> /etc/X11/xinit/xserverrc \ 48 | && echo 'exec /usr/bin/X -s 0 dpms' >> /etc/X11/xinit/xserverrc && \ 49 | echo 'modules=("nvidia_drm"); for module in "${modules[@]}"; do if lsmod | grep -q ${module} ; then echo "Found $module"; rmmod $module; fi; done; startxfce4;' > /opt/startxfce.sh 50 | 51 | ## If any apt packages install mesa-egl, it will overwrite the tegra-egl 52 | ## symlink and ld path, so the following command will ensure tegra-egl remains 53 | ## available: 54 | RUN \ 55 | echo "/usr/lib/aarch64-linux-gnu/tegra\n/usr/lib/aarch64-linux-gnu/tegra-egl" \ 56 | > /etc/ld.so.conf.d/000-nvidia-tegra-egl.conf \ 57 | && ldconfig 58 | 59 | ## Install dependencies for some of the NVIDIA examples 60 | RUN \ 61 | apt-get install -y libegl1 binutils xz-utils zstd libglu1-mesa libglu1-mesa-dev \ 62 | freeglut3 freeglut3-dev 63 | 64 | ## Optional: Build some CUDA samples: 65 | RUN \ 66 | apt-get install -y -o Dpkg::Options::="--force-confdef" nvidia-l4t-cuda nvidia-cuda build-essential cuda-nvcc-12-2 \ 67 | && git clone https://github.com/NVIDIA/cuda-samples.git && cd cuda-samples/Samples/1_Utilities/deviceQuery && make && \ 68 | cd /cuda-samples/Samples/5_Domain_Specific/smokeParticles && make && \ 69 | cd /cuda-samples/Samples/5_Domain_Specific/simpleGL && make && \ 70 | cd /cuda-samples/Samples/5_Domain_Specific/postProcessGL && make && \ 71 | cd /cuda-samples/Samples/0_Introduction/clock && make && \ 72 | cd /cuda-samples/Samples/0_Introduction/simpleTexture3D && make 73 | 74 | 75 | 76 | # Create a shell script for launching NVIDIA DRM 77 | RUN printf 'modules=("nvidia_drm"); for module in "${modules[@]}"; do if lsmod | grep -q ${module} ; then echo "Found $module"; rmmod $module; fi; done; sleep infinity;' > /usr/src/drm-script.sh && chmod +x /usr/src/drm-script.sh 78 | 79 | WORKDIR /cuda-samples/Samples/5_Domain_Specific/smokeParticles 80 | 81 | CMD ["/bin/bash", "/usr/src/drm-script.sh"] 82 | -------------------------------------------------------------------------------- /CUDA/Dockerfile.jetson-orin-nx-xavier-nx-devkit: -------------------------------------------------------------------------------- 1 | FROM balenalib/jetson-agx-orin-devkit-ubuntu:jammy-20240401 2 | 3 | # Prevent apt-get prompting for input 4 | ENV DEBIAN_FRONTEND noninteractive 5 | 6 | RUN echo "deb https://repo.download.nvidia.com/jetson/common r36.3 main" > /etc/apt/sources.list.d/nvidia.list \ 7 | && echo "deb https://repo.download.nvidia.com/jetson/t234 r36.3 main" >> /etc/apt/sources.list.d/nvidia.list \ 8 | && apt-key adv --fetch-key http://repo.download.nvidia.com/jetson/jetson-ota-public.asc \ 9 | && mkdir -p /opt/nvidia/l4t-packages/ && touch /opt/nvidia/l4t-packages/.nv-l4t-disable-boot-fw-update-in-preinstall 10 | 11 | # Download and install BSP binaries for L4T 36.3 - Jetpack 6 12 | RUN \ 13 | apt-get update && apt-get install -y wget tar lbzip2 binutils xz-utils zstd qemu-user-static cpio git && cd /tmp/ && wget https://developer.nvidia.com/downloads/embedded/l4t/r36_release_v3.0/release/jetson_linux_r36.3.0_aarch64.tbz2 && \ 14 | tar xf jetson_linux_r36.3.0_aarch64.tbz2 && \ 15 | cd Linux_for_Tegra && \ 16 | mkdir -p /tmp/Linux_for_Tegra/rootfs/boot/ && \ 17 | mkdir -p /tmp/Linux_for_Tegra/rootfs/usr/bin && \ 18 | mkdir -p /tmp/Linux_for_Tegra/rootfs/etc && touch /tmp/Linux_for_Tegra/rootfs/etc/resolv.conf && \ 19 | sed -i 's/config.tbz2\"/config.tbz2\" --exclude=etc\/hosts --exclude=etc\/hostname/g' apply_binaries.sh && \ 20 | sed -i 's/CheckPackage qemu-user-static/#CheckPackage qemu-user-static/g' tools/l4t_update_initrd.sh && \ 21 | sed -i 's/trap CleanupVirEnv/#trap CleanupVirEnv/g' tools/l4t_update_initrd.sh&& \ 22 | sed -i 's|cp /usr/bin/qemu-aarch64-static|#cp /usr/bin/qemu-aarch64-static|g' tools/l4t_update_initrd.sh && \ 23 | sed -i 's|^UpdateInitrd|#UpdateInitrd|g' tools/l4t_update_initrd.sh && \ 24 | sed -i 's|^UpdateBackToBaseInitrd|#UpdateBackToBaseInitrd|g' tools/l4t_update_initrd.sh && \ 25 | sed -i 's|cp /etc/resolv.conf|#cp /etc/resolv.conf|g' tools/l4t_update_initrd.sh && \ 26 | sed -i 's|mv "${LDK_ROOTFS_DIR}/etc/resolv.conf"|cp "${LDK_ROOTFS_DIR}/etc/resolv.conf"|g' tools/l4t_update_initrd.sh && \ 27 | sed -i 's| PrepareVirEnv|#PrepareVirEnv|g' tools/l4t_update_initrd.sh && \ 28 | sed -i 's/install --owner=root --group=root \"${QEMU_BIN}\" \"${L4T_ROOTFS_DIR}\/usr\/bin\/\"/#install --owner=root --group=root \"${QEMU_BIN}\" \"${L4T_ROOTFS_DIR}\/usr\/bin\/\"/g' nv_tegra/nv-apply-debs.sh && \ 29 | sed -i 's/chroot . \// /g' nv_tegra/nv-apply-debs.sh && \ 30 | cd /tmp/Linux_for_Tegra/ && ./apply_binaries.sh -r / --target-overlay && cd .. && \ 31 | rm -rf Linux_for_Tegra && \ 32 | echo "/usr/lib/aarch64-linux-gnu/tegra" > /etc/ld.so.conf.d/nvidia-tegra.conf && ldconfig 33 | 34 | # Install X 35 | RUN apt-get install -y --no-install-recommends \ 36 | xserver-xorg-input-evdev \ 37 | xinit \ 38 | x11-xserver-utils \ 39 | dbus-x11 \ 40 | xterm 41 | 42 | ENV LD_LIBRARY_PATH=/usr/lib/aarch64-linux-gnu/tegra 43 | ENV UDEV=1 44 | 45 | # Prevent screen from turning off 46 | RUN echo "#!/bin/bash" > /etc/X11/xinit/xserverrc \ 47 | && echo "" >> /etc/X11/xinit/xserverrc \ 48 | && echo 'exec /usr/bin/X -s 0 dpms' >> /etc/X11/xinit/xserverrc && \ 49 | echo 'modules=("nvidia_drm"); for module in "${modules[@]}"; do if lsmod | grep -q ${module} ; then echo "Found $module"; rmmod $module; fi; done; startxfce4;' > /opt/startxfce.sh 50 | 51 | ## If any apt packages install mesa-egl, it will overwrite the tegra-egl 52 | ## symlink and ld path, so the following command will ensure tegra-egl remains 53 | ## available: 54 | RUN \ 55 | echo "/usr/lib/aarch64-linux-gnu/tegra\n/usr/lib/aarch64-linux-gnu/tegra-egl" \ 56 | > /etc/ld.so.conf.d/000-nvidia-tegra-egl.conf \ 57 | && ldconfig 58 | 59 | ## Install dependencies for some of the NVIDIA examples 60 | RUN \ 61 | apt-get install -y libegl1 binutils xz-utils zstd libglu1-mesa libglu1-mesa-dev \ 62 | freeglut3 freeglut3-dev 63 | 64 | ## Optional: Build some CUDA samples: 65 | RUN \ 66 | apt-get install -y -o Dpkg::Options::="--force-confdef" nvidia-l4t-cuda nvidia-cuda build-essential cuda-nvcc-12-2 \ 67 | && git clone https://github.com/NVIDIA/cuda-samples.git && cd cuda-samples/Samples/1_Utilities/deviceQuery && make && \ 68 | cd /cuda-samples/Samples/5_Domain_Specific/smokeParticles && make && \ 69 | cd /cuda-samples/Samples/5_Domain_Specific/simpleGL && make && \ 70 | cd /cuda-samples/Samples/5_Domain_Specific/postProcessGL && make && \ 71 | cd /cuda-samples/Samples/0_Introduction/clock && make && \ 72 | cd /cuda-samples/Samples/0_Introduction/simpleTexture3D && make 73 | 74 | 75 | 76 | # Create a shell script for launching NVIDIA DRM 77 | RUN printf 'modules=("nvidia_drm"); for module in "${modules[@]}"; do if lsmod | grep -q ${module} ; then echo "Found $module"; rmmod $module; fi; done; sleep infinity;' > /usr/src/drm-script.sh && chmod +x /usr/src/drm-script.sh 78 | 79 | WORKDIR /cuda-samples/Samples/5_Domain_Specific/smokeParticles 80 | 81 | CMD ["/bin/bash", "/usr/src/drm-script.sh"] 82 | -------------------------------------------------------------------------------- /OPENCV/Dockerfile.jetson-agx-orin-devkit: -------------------------------------------------------------------------------- 1 | FROM balenalib/jetson-agx-orin-devkit-ubuntu:jammy-20240401 as buildstep 2 | 3 | WORKDIR /usr/src/app 4 | 5 | # Don't prompt with any configuration questions 6 | ENV DEBIAN_FRONTEND noninteractive 7 | 8 | RUN echo "deb https://repo.download.nvidia.com/jetson/common r36.3 main" > /etc/apt/sources.list.d/nvidia.list \ 9 | && echo "deb https://repo.download.nvidia.com/jetson/t234 r36.3 main" >> /etc/apt/sources.list.d/nvidia.list \ 10 | && apt-key adv --fetch-key http://repo.download.nvidia.com/jetson/jetson-ota-public.asc \ 11 | && mkdir -p /opt/nvidia/l4t-packages/ && touch /opt/nvidia/l4t-packages/.nv-l4t-disable-boot-fw-update-in-preinstall 12 | 13 | # Install CUDA, CUDA compiler and some utilities 14 | RUN \ 15 | apt-get update && apt-get install -y nvidia-l4t-cuda nvidia-cuda \ 16 | nvidia-cudnn cuda-nvcc-12-2 \ 17 | lbzip2 xorg-dev \ 18 | cmake build-essential wget unzip \ 19 | libgtk2.0-dev \ 20 | libavcodec-dev \ 21 | libgstreamer1.0-dev \ 22 | libgstreamer-plugins-base1.0-dev \ 23 | libjpeg-dev \ 24 | libpng-dev \ 25 | libtiff-dev \ 26 | libdc1394-dev -y --no-install-recommends && \ 27 | echo "/usr/lib/aarch64-linux-gnu/tegra" > /etc/ld.so.conf.d/nvidia-tegra.conf && \ 28 | ldconfig && \ 29 | wget https://github.com/opencv/opencv/archive/4.7.0.zip && \ 30 | unzip 4.7.0.zip && rm 4.7.0.zip 31 | 32 | # Build OpenCV 4.7.0 with CUDA enabled 33 | RUN \ 34 | wget https://github.com/opencv/opencv_contrib/archive/4.7.0.zip -O opencv_modules.4.7.0.zip && \ 35 | unzip opencv_modules.4.7.0.zip && rm opencv_modules.4.7.0.zip && \ 36 | export CUDA_HOME=/usr/local/cuda-12.2/ && \ 37 | #export LD_LIBRARY_PATH=${CUDA_HOME}/lib64 && \ 38 | PATH=${CUDA_HOME}/bin:${PATH} && export PATH && \ 39 | mkdir -p opencv-4.7.0/build && cd opencv-4.7.0/build && \ 40 | cmake -D WITH_CUDA=ON -D CUDA_ARCH_BIN="8.7" -D BUILD_LIST=cudev,highgui,videoio,cudaimgproc,ximgproc -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-4.7.0/modules -D CUDA_ARCH_PTX="" -D WITH_GSTREAMER=ON -D WITH_LIBV4L=ON -D BUILD_TESTS=ON -D BUILD_PERF_TESTS=ON -D BUILD_SAMPLES=ON -D BUILD_EXAMPLES=ON -D CMAKE_BUILD_TYPE=RELEASE -D WITH_GTK=on -D BUILD_DOCS=OFF -D CMAKE_INSTALL_PREFIX=/usr/local .. && make -j32 && make install && \ 41 | cp /usr/src/app/opencv-4.7.0/build/bin/opencv_version /usr/src/app/ && \ 42 | cp /usr/src/app/opencv-4.7.0/build/bin/example_ximgproc_paillou_demo /usr/src/app/ && \ 43 | cp /usr/src/app/opencv-4.7.0/build/bin/example_ximgproc_fourier_descriptors_demo /usr/src/app/ && \ 44 | cd /usr/src/app/ && rm -rf /usr/src/app/opencv-4.7.0 && \ 45 | mv opencv_contrib-4.7.0/samples/data/corridor.jpg /usr/src/app/ && \ 46 | rm -rf /usr/src/app/opencv_contrib-4.7.0 47 | 48 | 49 | FROM balenalib/jetson-agx-orin-devkit-ubuntu:jammy-20240401 as final 50 | 51 | # Starting with a fresh new base image, but with access to files in previous build 52 | 53 | # OpenCV runtime libraries from build step 54 | COPY --from=buildstep /usr/local/lib /usr/local/lib 55 | 56 | # Demo apps 57 | COPY --from=buildstep /usr/src/app/ /usr/src/app/ 58 | 59 | # Prevent apt-get prompting for input 60 | ENV DEBIAN_FRONTEND noninteractive 61 | 62 | RUN echo "deb https://repo.download.nvidia.com/jetson/common r36.3 main" > /etc/apt/sources.list.d/nvidia.list \ 63 | && echo "deb https://repo.download.nvidia.com/jetson/t234 r36.3 main" >> /etc/apt/sources.list.d/nvidia.list \ 64 | && apt-key adv --fetch-key http://repo.download.nvidia.com/jetson/jetson-ota-public.asc \ 65 | && mkdir -p /opt/nvidia/l4t-packages/ && touch /opt/nvidia/l4t-packages/.nv-l4t-disable-boot-fw-update-in-preinstall 66 | 67 | # Download and install BSP binaries for L4T 36.3 - Jetpack 6 68 | RUN \ 69 | apt-get update && apt-get install -y wget tar lbzip2 binutils xz-utils zstd qemu-user-static cpio git && cd /tmp/ && wget https://developer.nvidia.com/downloads/embedded/l4t/r36_release_v3.0/release/jetson_linux_r36.3.0_aarch64.tbz2 && \ 70 | tar xf jetson_linux_r36.3.0_aarch64.tbz2 && \ 71 | cd Linux_for_Tegra && \ 72 | mkdir -p /tmp/Linux_for_Tegra/rootfs/boot/ && \ 73 | mkdir -p /tmp/Linux_for_Tegra/rootfs/usr/bin && \ 74 | mkdir -p /tmp/Linux_for_Tegra/rootfs/etc && touch /tmp/Linux_for_Tegra/rootfs/etc/resolv.conf && \ 75 | sed -i 's/config.tbz2\"/config.tbz2\" --exclude=etc\/hosts --exclude=etc\/hostname/g' apply_binaries.sh && \ 76 | sed -i 's/CheckPackage qemu-user-static/#CheckPackage qemu-user-static/g' tools/l4t_update_initrd.sh && \ 77 | sed -i 's/trap CleanupVirEnv/#trap CleanupVirEnv/g' tools/l4t_update_initrd.sh&& \ 78 | sed -i 's|cp /usr/bin/qemu-aarch64-static|#cp /usr/bin/qemu-aarch64-static|g' tools/l4t_update_initrd.sh && \ 79 | sed -i 's|^UpdateInitrd|#UpdateInitrd|g' tools/l4t_update_initrd.sh && \ 80 | sed -i 's|^UpdateBackToBaseInitrd|#UpdateBackToBaseInitrd|g' tools/l4t_update_initrd.sh && \ 81 | sed -i 's|cp /etc/resolv.conf|#cp /etc/resolv.conf|g' tools/l4t_update_initrd.sh && \ 82 | sed -i 's|mv "${LDK_ROOTFS_DIR}/etc/resolv.conf"|cp "${LDK_ROOTFS_DIR}/etc/resolv.conf"|g' tools/l4t_update_initrd.sh && \ 83 | sed -i 's| PrepareVirEnv|#PrepareVirEnv|g' tools/l4t_update_initrd.sh && \ 84 | sed -i 's/install --owner=root --group=root \"${QEMU_BIN}\" \"${L4T_ROOTFS_DIR}\/usr\/bin\/\"/#install --owner=root --group=root \"${QEMU_BIN}\" \"${L4T_ROOTFS_DIR}\/usr\/bin\/\"/g' nv_tegra/nv-apply-debs.sh && \ 85 | sed -i 's/chroot . \// /g' nv_tegra/nv-apply-debs.sh && \ 86 | cd /tmp/Linux_for_Tegra/ && ./apply_binaries.sh -r / --target-overlay && cd .. && \ 87 | rm -rf Linux_for_Tegra && \ 88 | echo "/usr/lib/aarch64-linux-gnu/tegra" > /etc/ld.so.conf.d/nvidia-tegra.conf && ldconfig 89 | 90 | # Install X 91 | RUN apt-get install -y --no-install-recommends \ 92 | xserver-xorg-input-evdev \ 93 | xinit \ 94 | x11-xserver-utils \ 95 | dbus-x11 \ 96 | xterm 97 | 98 | ENV LD_LIBRARY_PATH=/usr/lib/aarch64-linux-gnu/tegra 99 | ENV UDEV=1 100 | 101 | # Prevent screen from turning off 102 | RUN echo "#!/bin/bash" > /etc/X11/xinit/xserverrc \ 103 | && echo "" >> /etc/X11/xinit/xserverrc \ 104 | && echo 'exec /usr/bin/X -s 0 dpms' >> /etc/X11/xinit/xserverrc && \ 105 | echo 'modules=("nvidia_drm"); for module in "${modules[@]}"; do if lsmod | grep -q ${module} ; then echo "Found $module"; rmmod $module; fi; done; startxfce4;' > /opt/startxfce.sh 106 | 107 | ## If any apt packages install mesa-egl, it will overwrite the tegra-egl 108 | ## symlink and ld path, so the following command will ensure tegra-egl remains 109 | ## available: 110 | RUN \ 111 | echo "/usr/lib/aarch64-linux-gnu/tegra\n/usr/lib/aarch64-linux-gnu/tegra-egl" \ 112 | > /etc/ld.so.conf.d/000-nvidia-tegra-egl.conf \ 113 | && ldconfig 114 | 115 | # Install some utils 116 | RUN apt-get update && apt-get install -y python3 libegl1 libglu1-mesa libglu1-mesa-dev \ 117 | freeglut3 freeglut3-dev libgtk2.0-dev 118 | 119 | # Create a shell script for launching NVIDIA DRM 120 | RUN printf 'modules=("nvidia_drm"); for module in "${modules[@]}"; do if lsmod | grep -q ${module} ; then echo "Found $module"; rmmod $module; fi; done; sleep infinity;' > /usr/src/drm-script.sh && chmod +x /usr/src/drm-script.sh 121 | 122 | WORKDIR /usr/src/app/ 123 | 124 | CMD ["/bin/bash", "/usr/src/drm-script.sh"] 125 | -------------------------------------------------------------------------------- /OPENCV/Dockerfile.jetson-agx-orin-devkit-64gb: -------------------------------------------------------------------------------- 1 | FROM balenalib/jetson-agx-orin-devkit-ubuntu:jammy-20240401 as buildstep 2 | 3 | WORKDIR /usr/src/app 4 | 5 | # Don't prompt with any configuration questions 6 | ENV DEBIAN_FRONTEND noninteractive 7 | 8 | RUN echo "deb https://repo.download.nvidia.com/jetson/common r36.3 main" > /etc/apt/sources.list.d/nvidia.list \ 9 | && echo "deb https://repo.download.nvidia.com/jetson/t234 r36.3 main" >> /etc/apt/sources.list.d/nvidia.list \ 10 | && apt-key adv --fetch-key http://repo.download.nvidia.com/jetson/jetson-ota-public.asc \ 11 | && mkdir -p /opt/nvidia/l4t-packages/ && touch /opt/nvidia/l4t-packages/.nv-l4t-disable-boot-fw-update-in-preinstall 12 | 13 | # Install CUDA, CUDA compiler and some utilities 14 | RUN \ 15 | apt-get update && apt-get install -y nvidia-l4t-cuda nvidia-cuda \ 16 | nvidia-cudnn cuda-nvcc-12-2 \ 17 | lbzip2 xorg-dev \ 18 | cmake build-essential wget unzip \ 19 | libgtk2.0-dev \ 20 | libavcodec-dev \ 21 | libgstreamer1.0-dev \ 22 | libgstreamer-plugins-base1.0-dev \ 23 | libjpeg-dev \ 24 | libpng-dev \ 25 | libtiff-dev \ 26 | libdc1394-dev -y --no-install-recommends && \ 27 | echo "/usr/lib/aarch64-linux-gnu/tegra" > /etc/ld.so.conf.d/nvidia-tegra.conf && \ 28 | ldconfig && \ 29 | wget https://github.com/opencv/opencv/archive/4.7.0.zip && \ 30 | unzip 4.7.0.zip && rm 4.7.0.zip 31 | 32 | # Build OpenCV 4.7.0 with CUDA enabled 33 | RUN \ 34 | wget https://github.com/opencv/opencv_contrib/archive/4.7.0.zip -O opencv_modules.4.7.0.zip && \ 35 | unzip opencv_modules.4.7.0.zip && rm opencv_modules.4.7.0.zip && \ 36 | export CUDA_HOME=/usr/local/cuda-12.2/ && \ 37 | #export LD_LIBRARY_PATH=${CUDA_HOME}/lib64 && \ 38 | PATH=${CUDA_HOME}/bin:${PATH} && export PATH && \ 39 | mkdir -p opencv-4.7.0/build && cd opencv-4.7.0/build && \ 40 | cmake -D WITH_CUDA=ON -D CUDA_ARCH_BIN="8.7" -D BUILD_LIST=cudev,highgui,videoio,cudaimgproc,ximgproc -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-4.7.0/modules -D CUDA_ARCH_PTX="" -D WITH_GSTREAMER=ON -D WITH_LIBV4L=ON -D BUILD_TESTS=ON -D BUILD_PERF_TESTS=ON -D BUILD_SAMPLES=ON -D BUILD_EXAMPLES=ON -D CMAKE_BUILD_TYPE=RELEASE -D WITH_GTK=on -D BUILD_DOCS=OFF -D CMAKE_INSTALL_PREFIX=/usr/local .. && make -j32 && make install && \ 41 | cp /usr/src/app/opencv-4.7.0/build/bin/opencv_version /usr/src/app/ && \ 42 | cp /usr/src/app/opencv-4.7.0/build/bin/example_ximgproc_paillou_demo /usr/src/app/ && \ 43 | cp /usr/src/app/opencv-4.7.0/build/bin/example_ximgproc_fourier_descriptors_demo /usr/src/app/ && \ 44 | cd /usr/src/app/ && rm -rf /usr/src/app/opencv-4.7.0 && \ 45 | mv opencv_contrib-4.7.0/samples/data/corridor.jpg /usr/src/app/ && \ 46 | rm -rf /usr/src/app/opencv_contrib-4.7.0 47 | 48 | 49 | FROM balenalib/jetson-agx-orin-devkit-ubuntu:jammy-20240401 as final 50 | 51 | # Starting with a fresh new base image, but with access to files in previous build 52 | 53 | # OpenCV runtime libraries from build step 54 | COPY --from=buildstep /usr/local/lib /usr/local/lib 55 | 56 | # Demo apps 57 | COPY --from=buildstep /usr/src/app/ /usr/src/app/ 58 | 59 | # Prevent apt-get prompting for input 60 | ENV DEBIAN_FRONTEND noninteractive 61 | 62 | RUN echo "deb https://repo.download.nvidia.com/jetson/common r36.3 main" > /etc/apt/sources.list.d/nvidia.list \ 63 | && echo "deb https://repo.download.nvidia.com/jetson/t234 r36.3 main" >> /etc/apt/sources.list.d/nvidia.list \ 64 | && apt-key adv --fetch-key http://repo.download.nvidia.com/jetson/jetson-ota-public.asc \ 65 | && mkdir -p /opt/nvidia/l4t-packages/ && touch /opt/nvidia/l4t-packages/.nv-l4t-disable-boot-fw-update-in-preinstall 66 | 67 | # Download and install BSP binaries for L4T 36.3 - Jetpack 6 68 | RUN \ 69 | apt-get update && apt-get install -y wget tar lbzip2 binutils xz-utils zstd qemu-user-static cpio git && cd /tmp/ && wget https://developer.nvidia.com/downloads/embedded/l4t/r36_release_v3.0/release/jetson_linux_r36.3.0_aarch64.tbz2 && \ 70 | tar xf jetson_linux_r36.3.0_aarch64.tbz2 && \ 71 | cd Linux_for_Tegra && \ 72 | mkdir -p /tmp/Linux_for_Tegra/rootfs/boot/ && \ 73 | mkdir -p /tmp/Linux_for_Tegra/rootfs/usr/bin && \ 74 | mkdir -p /tmp/Linux_for_Tegra/rootfs/etc && touch /tmp/Linux_for_Tegra/rootfs/etc/resolv.conf && \ 75 | sed -i 's/config.tbz2\"/config.tbz2\" --exclude=etc\/hosts --exclude=etc\/hostname/g' apply_binaries.sh && \ 76 | sed -i 's/CheckPackage qemu-user-static/#CheckPackage qemu-user-static/g' tools/l4t_update_initrd.sh && \ 77 | sed -i 's/trap CleanupVirEnv/#trap CleanupVirEnv/g' tools/l4t_update_initrd.sh&& \ 78 | sed -i 's|cp /usr/bin/qemu-aarch64-static|#cp /usr/bin/qemu-aarch64-static|g' tools/l4t_update_initrd.sh && \ 79 | sed -i 's|^UpdateInitrd|#UpdateInitrd|g' tools/l4t_update_initrd.sh && \ 80 | sed -i 's|^UpdateBackToBaseInitrd|#UpdateBackToBaseInitrd|g' tools/l4t_update_initrd.sh && \ 81 | sed -i 's|cp /etc/resolv.conf|#cp /etc/resolv.conf|g' tools/l4t_update_initrd.sh && \ 82 | sed -i 's|mv "${LDK_ROOTFS_DIR}/etc/resolv.conf"|cp "${LDK_ROOTFS_DIR}/etc/resolv.conf"|g' tools/l4t_update_initrd.sh && \ 83 | sed -i 's| PrepareVirEnv|#PrepareVirEnv|g' tools/l4t_update_initrd.sh && \ 84 | sed -i 's/install --owner=root --group=root \"${QEMU_BIN}\" \"${L4T_ROOTFS_DIR}\/usr\/bin\/\"/#install --owner=root --group=root \"${QEMU_BIN}\" \"${L4T_ROOTFS_DIR}\/usr\/bin\/\"/g' nv_tegra/nv-apply-debs.sh && \ 85 | sed -i 's/chroot . \// /g' nv_tegra/nv-apply-debs.sh && \ 86 | cd /tmp/Linux_for_Tegra/ && ./apply_binaries.sh -r / --target-overlay && cd .. && \ 87 | rm -rf Linux_for_Tegra && \ 88 | echo "/usr/lib/aarch64-linux-gnu/tegra" > /etc/ld.so.conf.d/nvidia-tegra.conf && ldconfig 89 | 90 | # Install X 91 | RUN apt-get install -y --no-install-recommends \ 92 | xserver-xorg-input-evdev \ 93 | xinit \ 94 | x11-xserver-utils \ 95 | dbus-x11 \ 96 | xterm 97 | 98 | ENV LD_LIBRARY_PATH=/usr/lib/aarch64-linux-gnu/tegra 99 | ENV UDEV=1 100 | 101 | # Prevent screen from turning off 102 | RUN echo "#!/bin/bash" > /etc/X11/xinit/xserverrc \ 103 | && echo "" >> /etc/X11/xinit/xserverrc \ 104 | && echo 'exec /usr/bin/X -s 0 dpms' >> /etc/X11/xinit/xserverrc && \ 105 | echo 'modules=("nvidia_drm"); for module in "${modules[@]}"; do if lsmod | grep -q ${module} ; then echo "Found $module"; rmmod $module; fi; done; startxfce4;' > /opt/startxfce.sh 106 | 107 | ## If any apt packages install mesa-egl, it will overwrite the tegra-egl 108 | ## symlink and ld path, so the following command will ensure tegra-egl remains 109 | ## available: 110 | RUN \ 111 | echo "/usr/lib/aarch64-linux-gnu/tegra\n/usr/lib/aarch64-linux-gnu/tegra-egl" \ 112 | > /etc/ld.so.conf.d/000-nvidia-tegra-egl.conf \ 113 | && ldconfig 114 | 115 | # Install some utils 116 | RUN apt-get update && apt-get install -y python3 libegl1 libglu1-mesa libglu1-mesa-dev \ 117 | freeglut3 freeglut3-dev libgtk2.0-dev 118 | 119 | # Create a shell script for launching NVIDIA DRM 120 | RUN printf 'modules=("nvidia_drm"); for module in "${modules[@]}"; do if lsmod | grep -q ${module} ; then echo "Found $module"; rmmod $module; fi; done; sleep infinity;' > /usr/src/drm-script.sh && chmod +x /usr/src/drm-script.sh 121 | 122 | WORKDIR /usr/src/app/ 123 | 124 | CMD ["/bin/bash", "/usr/src/drm-script.sh"] 125 | -------------------------------------------------------------------------------- /OPENCV/Dockerfile.jetson-orin-nano-devkit-nvme: -------------------------------------------------------------------------------- 1 | FROM balenalib/jetson-agx-orin-devkit-ubuntu:jammy-20240401 as buildstep 2 | 3 | WORKDIR /usr/src/app 4 | 5 | # Don't prompt with any configuration questions 6 | ENV DEBIAN_FRONTEND noninteractive 7 | 8 | RUN echo "deb https://repo.download.nvidia.com/jetson/common r36.3 main" > /etc/apt/sources.list.d/nvidia.list \ 9 | && echo "deb https://repo.download.nvidia.com/jetson/t234 r36.3 main" >> /etc/apt/sources.list.d/nvidia.list \ 10 | && apt-key adv --fetch-key http://repo.download.nvidia.com/jetson/jetson-ota-public.asc \ 11 | && mkdir -p /opt/nvidia/l4t-packages/ && touch /opt/nvidia/l4t-packages/.nv-l4t-disable-boot-fw-update-in-preinstall 12 | 13 | # Install CUDA, CUDA compiler and some utilities 14 | RUN \ 15 | apt-get update && apt-get install -y nvidia-l4t-cuda nvidia-cuda \ 16 | nvidia-cudnn cuda-nvcc-12-2 \ 17 | lbzip2 xorg-dev \ 18 | cmake build-essential wget unzip \ 19 | libgtk2.0-dev \ 20 | libavcodec-dev \ 21 | libgstreamer1.0-dev \ 22 | libgstreamer-plugins-base1.0-dev \ 23 | libjpeg-dev \ 24 | libpng-dev \ 25 | libtiff-dev \ 26 | libdc1394-dev -y --no-install-recommends && \ 27 | echo "/usr/lib/aarch64-linux-gnu/tegra" > /etc/ld.so.conf.d/nvidia-tegra.conf && \ 28 | ldconfig && \ 29 | wget https://github.com/opencv/opencv/archive/4.7.0.zip && \ 30 | unzip 4.7.0.zip && rm 4.7.0.zip 31 | 32 | # Build OpenCV 4.7.0 with CUDA enabled 33 | RUN \ 34 | wget https://github.com/opencv/opencv_contrib/archive/4.7.0.zip -O opencv_modules.4.7.0.zip && \ 35 | unzip opencv_modules.4.7.0.zip && rm opencv_modules.4.7.0.zip && \ 36 | export CUDA_HOME=/usr/local/cuda-12.2/ && \ 37 | #export LD_LIBRARY_PATH=${CUDA_HOME}/lib64 && \ 38 | PATH=${CUDA_HOME}/bin:${PATH} && export PATH && \ 39 | mkdir -p opencv-4.7.0/build && cd opencv-4.7.0/build && \ 40 | cmake -D WITH_CUDA=ON -D CUDA_ARCH_BIN="8.7" -D BUILD_LIST=cudev,highgui,videoio,cudaimgproc,ximgproc -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-4.7.0/modules -D CUDA_ARCH_PTX="" -D WITH_GSTREAMER=ON -D WITH_LIBV4L=ON -D BUILD_TESTS=ON -D BUILD_PERF_TESTS=ON -D BUILD_SAMPLES=ON -D BUILD_EXAMPLES=ON -D CMAKE_BUILD_TYPE=RELEASE -D WITH_GTK=on -D BUILD_DOCS=OFF -D CMAKE_INSTALL_PREFIX=/usr/local .. && make -j32 && make install && \ 41 | cp /usr/src/app/opencv-4.7.0/build/bin/opencv_version /usr/src/app/ && \ 42 | cp /usr/src/app/opencv-4.7.0/build/bin/example_ximgproc_paillou_demo /usr/src/app/ && \ 43 | cp /usr/src/app/opencv-4.7.0/build/bin/example_ximgproc_fourier_descriptors_demo /usr/src/app/ && \ 44 | cd /usr/src/app/ && rm -rf /usr/src/app/opencv-4.7.0 && \ 45 | mv opencv_contrib-4.7.0/samples/data/corridor.jpg /usr/src/app/ && \ 46 | rm -rf /usr/src/app/opencv_contrib-4.7.0 47 | 48 | 49 | FROM balenalib/jetson-agx-orin-devkit-ubuntu:jammy-20240401 as final 50 | 51 | # Starting with a fresh new base image, but with access to files in previous build 52 | 53 | # OpenCV runtime libraries from build step 54 | COPY --from=buildstep /usr/local/lib /usr/local/lib 55 | 56 | # Demo apps 57 | COPY --from=buildstep /usr/src/app/ /usr/src/app/ 58 | 59 | # Prevent apt-get prompting for input 60 | ENV DEBIAN_FRONTEND noninteractive 61 | 62 | RUN echo "deb https://repo.download.nvidia.com/jetson/common r36.3 main" > /etc/apt/sources.list.d/nvidia.list \ 63 | && echo "deb https://repo.download.nvidia.com/jetson/t234 r36.3 main" >> /etc/apt/sources.list.d/nvidia.list \ 64 | && apt-key adv --fetch-key http://repo.download.nvidia.com/jetson/jetson-ota-public.asc \ 65 | && mkdir -p /opt/nvidia/l4t-packages/ && touch /opt/nvidia/l4t-packages/.nv-l4t-disable-boot-fw-update-in-preinstall 66 | 67 | # Download and install BSP binaries for L4T 36.3 - Jetpack 6 68 | RUN \ 69 | apt-get update && apt-get install -y wget tar lbzip2 binutils xz-utils zstd qemu-user-static cpio git && cd /tmp/ && wget https://developer.nvidia.com/downloads/embedded/l4t/r36_release_v3.0/release/jetson_linux_r36.3.0_aarch64.tbz2 && \ 70 | tar xf jetson_linux_r36.3.0_aarch64.tbz2 && \ 71 | cd Linux_for_Tegra && \ 72 | mkdir -p /tmp/Linux_for_Tegra/rootfs/boot/ && \ 73 | mkdir -p /tmp/Linux_for_Tegra/rootfs/usr/bin && \ 74 | mkdir -p /tmp/Linux_for_Tegra/rootfs/etc && touch /tmp/Linux_for_Tegra/rootfs/etc/resolv.conf && \ 75 | sed -i 's/config.tbz2\"/config.tbz2\" --exclude=etc\/hosts --exclude=etc\/hostname/g' apply_binaries.sh && \ 76 | sed -i 's/CheckPackage qemu-user-static/#CheckPackage qemu-user-static/g' tools/l4t_update_initrd.sh && \ 77 | sed -i 's/trap CleanupVirEnv/#trap CleanupVirEnv/g' tools/l4t_update_initrd.sh&& \ 78 | sed -i 's|cp /usr/bin/qemu-aarch64-static|#cp /usr/bin/qemu-aarch64-static|g' tools/l4t_update_initrd.sh && \ 79 | sed -i 's|^UpdateInitrd|#UpdateInitrd|g' tools/l4t_update_initrd.sh && \ 80 | sed -i 's|^UpdateBackToBaseInitrd|#UpdateBackToBaseInitrd|g' tools/l4t_update_initrd.sh && \ 81 | sed -i 's|cp /etc/resolv.conf|#cp /etc/resolv.conf|g' tools/l4t_update_initrd.sh && \ 82 | sed -i 's|mv "${LDK_ROOTFS_DIR}/etc/resolv.conf"|cp "${LDK_ROOTFS_DIR}/etc/resolv.conf"|g' tools/l4t_update_initrd.sh && \ 83 | sed -i 's| PrepareVirEnv|#PrepareVirEnv|g' tools/l4t_update_initrd.sh && \ 84 | sed -i 's/install --owner=root --group=root \"${QEMU_BIN}\" \"${L4T_ROOTFS_DIR}\/usr\/bin\/\"/#install --owner=root --group=root \"${QEMU_BIN}\" \"${L4T_ROOTFS_DIR}\/usr\/bin\/\"/g' nv_tegra/nv-apply-debs.sh && \ 85 | sed -i 's/chroot . \// /g' nv_tegra/nv-apply-debs.sh && \ 86 | cd /tmp/Linux_for_Tegra/ && ./apply_binaries.sh -r / --target-overlay && cd .. && \ 87 | rm -rf Linux_for_Tegra && \ 88 | echo "/usr/lib/aarch64-linux-gnu/tegra" > /etc/ld.so.conf.d/nvidia-tegra.conf && ldconfig 89 | 90 | # Install X 91 | RUN apt-get install -y --no-install-recommends \ 92 | xserver-xorg-input-evdev \ 93 | xinit \ 94 | x11-xserver-utils \ 95 | dbus-x11 \ 96 | xterm 97 | 98 | ENV LD_LIBRARY_PATH=/usr/lib/aarch64-linux-gnu/tegra 99 | ENV UDEV=1 100 | 101 | # Prevent screen from turning off 102 | RUN echo "#!/bin/bash" > /etc/X11/xinit/xserverrc \ 103 | && echo "" >> /etc/X11/xinit/xserverrc \ 104 | && echo 'exec /usr/bin/X -s 0 dpms' >> /etc/X11/xinit/xserverrc && \ 105 | echo 'modules=("nvidia_drm"); for module in "${modules[@]}"; do if lsmod | grep -q ${module} ; then echo "Found $module"; rmmod $module; fi; done; startxfce4;' > /opt/startxfce.sh 106 | 107 | ## If any apt packages install mesa-egl, it will overwrite the tegra-egl 108 | ## symlink and ld path, so the following command will ensure tegra-egl remains 109 | ## available: 110 | RUN \ 111 | echo "/usr/lib/aarch64-linux-gnu/tegra\n/usr/lib/aarch64-linux-gnu/tegra-egl" \ 112 | > /etc/ld.so.conf.d/000-nvidia-tegra-egl.conf \ 113 | && ldconfig 114 | 115 | # Install some utils 116 | RUN apt-get update && apt-get install -y python3 libegl1 libglu1-mesa libglu1-mesa-dev \ 117 | freeglut3 freeglut3-dev libgtk2.0-dev 118 | 119 | # Create a shell script for launching NVIDIA DRM 120 | RUN printf 'modules=("nvidia_drm"); for module in "${modules[@]}"; do if lsmod | grep -q ${module} ; then echo "Found $module"; rmmod $module; fi; done; sleep infinity;' > /usr/src/drm-script.sh && chmod +x /usr/src/drm-script.sh 121 | 122 | WORKDIR /usr/src/app/ 123 | 124 | CMD ["/bin/bash", "/usr/src/drm-script.sh"] 125 | -------------------------------------------------------------------------------- /OPENCV/Dockerfile.jetson-orin-nx-xavier-nx-devkit: -------------------------------------------------------------------------------- 1 | FROM balenalib/jetson-agx-orin-devkit-ubuntu:jammy-20240401 as buildstep 2 | 3 | WORKDIR /usr/src/app 4 | 5 | # Don't prompt with any configuration questions 6 | ENV DEBIAN_FRONTEND noninteractive 7 | 8 | RUN echo "deb https://repo.download.nvidia.com/jetson/common r36.3 main" > /etc/apt/sources.list.d/nvidia.list \ 9 | && echo "deb https://repo.download.nvidia.com/jetson/t234 r36.3 main" >> /etc/apt/sources.list.d/nvidia.list \ 10 | && apt-key adv --fetch-key http://repo.download.nvidia.com/jetson/jetson-ota-public.asc \ 11 | && mkdir -p /opt/nvidia/l4t-packages/ && touch /opt/nvidia/l4t-packages/.nv-l4t-disable-boot-fw-update-in-preinstall 12 | 13 | # Install CUDA, CUDA compiler and some utilities 14 | RUN \ 15 | apt-get update && apt-get install -y nvidia-l4t-cuda nvidia-cuda \ 16 | nvidia-cudnn cuda-nvcc-12-2 \ 17 | lbzip2 xorg-dev \ 18 | cmake build-essential wget unzip \ 19 | libgtk2.0-dev \ 20 | libavcodec-dev \ 21 | libgstreamer1.0-dev \ 22 | libgstreamer-plugins-base1.0-dev \ 23 | libjpeg-dev \ 24 | libpng-dev \ 25 | libtiff-dev \ 26 | libdc1394-dev -y --no-install-recommends && \ 27 | echo "/usr/lib/aarch64-linux-gnu/tegra" > /etc/ld.so.conf.d/nvidia-tegra.conf && \ 28 | ldconfig && \ 29 | wget https://github.com/opencv/opencv/archive/4.7.0.zip && \ 30 | unzip 4.7.0.zip && rm 4.7.0.zip 31 | 32 | # Build OpenCV 4.7.0 with CUDA enabled 33 | RUN \ 34 | wget https://github.com/opencv/opencv_contrib/archive/4.7.0.zip -O opencv_modules.4.7.0.zip && \ 35 | unzip opencv_modules.4.7.0.zip && rm opencv_modules.4.7.0.zip && \ 36 | export CUDA_HOME=/usr/local/cuda-12.2/ && \ 37 | #export LD_LIBRARY_PATH=${CUDA_HOME}/lib64 && \ 38 | PATH=${CUDA_HOME}/bin:${PATH} && export PATH && \ 39 | mkdir -p opencv-4.7.0/build && cd opencv-4.7.0/build && \ 40 | cmake -D WITH_CUDA=ON -D CUDA_ARCH_BIN="8.7" -D BUILD_LIST=cudev,highgui,videoio,cudaimgproc,ximgproc -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-4.7.0/modules -D CUDA_ARCH_PTX="" -D WITH_GSTREAMER=ON -D WITH_LIBV4L=ON -D BUILD_TESTS=ON -D BUILD_PERF_TESTS=ON -D BUILD_SAMPLES=ON -D BUILD_EXAMPLES=ON -D CMAKE_BUILD_TYPE=RELEASE -D WITH_GTK=on -D BUILD_DOCS=OFF -D CMAKE_INSTALL_PREFIX=/usr/local .. && make -j32 && make install && \ 41 | cp /usr/src/app/opencv-4.7.0/build/bin/opencv_version /usr/src/app/ && \ 42 | cp /usr/src/app/opencv-4.7.0/build/bin/example_ximgproc_paillou_demo /usr/src/app/ && \ 43 | cp /usr/src/app/opencv-4.7.0/build/bin/example_ximgproc_fourier_descriptors_demo /usr/src/app/ && \ 44 | cd /usr/src/app/ && rm -rf /usr/src/app/opencv-4.7.0 && \ 45 | mv opencv_contrib-4.7.0/samples/data/corridor.jpg /usr/src/app/ && \ 46 | rm -rf /usr/src/app/opencv_contrib-4.7.0 47 | 48 | 49 | FROM balenalib/jetson-agx-orin-devkit-ubuntu:jammy-20240401 as final 50 | 51 | # Starting with a fresh new base image, but with access to files in previous build 52 | 53 | # OpenCV runtime libraries from build step 54 | COPY --from=buildstep /usr/local/lib /usr/local/lib 55 | 56 | # Demo apps 57 | COPY --from=buildstep /usr/src/app/ /usr/src/app/ 58 | 59 | # Prevent apt-get prompting for input 60 | ENV DEBIAN_FRONTEND noninteractive 61 | 62 | RUN echo "deb https://repo.download.nvidia.com/jetson/common r36.3 main" > /etc/apt/sources.list.d/nvidia.list \ 63 | && echo "deb https://repo.download.nvidia.com/jetson/t234 r36.3 main" >> /etc/apt/sources.list.d/nvidia.list \ 64 | && apt-key adv --fetch-key http://repo.download.nvidia.com/jetson/jetson-ota-public.asc \ 65 | && mkdir -p /opt/nvidia/l4t-packages/ && touch /opt/nvidia/l4t-packages/.nv-l4t-disable-boot-fw-update-in-preinstall 66 | 67 | # Download and install BSP binaries for L4T 36.3 - Jetpack 6 68 | RUN \ 69 | apt-get update && apt-get install -y wget tar lbzip2 binutils xz-utils zstd qemu-user-static cpio git && cd /tmp/ && wget https://developer.nvidia.com/downloads/embedded/l4t/r36_release_v3.0/release/jetson_linux_r36.3.0_aarch64.tbz2 && \ 70 | tar xf jetson_linux_r36.3.0_aarch64.tbz2 && \ 71 | cd Linux_for_Tegra && \ 72 | mkdir -p /tmp/Linux_for_Tegra/rootfs/boot/ && \ 73 | mkdir -p /tmp/Linux_for_Tegra/rootfs/usr/bin && \ 74 | mkdir -p /tmp/Linux_for_Tegra/rootfs/etc && touch /tmp/Linux_for_Tegra/rootfs/etc/resolv.conf && \ 75 | sed -i 's/config.tbz2\"/config.tbz2\" --exclude=etc\/hosts --exclude=etc\/hostname/g' apply_binaries.sh && \ 76 | sed -i 's/CheckPackage qemu-user-static/#CheckPackage qemu-user-static/g' tools/l4t_update_initrd.sh && \ 77 | sed -i 's/trap CleanupVirEnv/#trap CleanupVirEnv/g' tools/l4t_update_initrd.sh&& \ 78 | sed -i 's|cp /usr/bin/qemu-aarch64-static|#cp /usr/bin/qemu-aarch64-static|g' tools/l4t_update_initrd.sh && \ 79 | sed -i 's|^UpdateInitrd|#UpdateInitrd|g' tools/l4t_update_initrd.sh && \ 80 | sed -i 's|^UpdateBackToBaseInitrd|#UpdateBackToBaseInitrd|g' tools/l4t_update_initrd.sh && \ 81 | sed -i 's|cp /etc/resolv.conf|#cp /etc/resolv.conf|g' tools/l4t_update_initrd.sh && \ 82 | sed -i 's|mv "${LDK_ROOTFS_DIR}/etc/resolv.conf"|cp "${LDK_ROOTFS_DIR}/etc/resolv.conf"|g' tools/l4t_update_initrd.sh && \ 83 | sed -i 's| PrepareVirEnv|#PrepareVirEnv|g' tools/l4t_update_initrd.sh && \ 84 | sed -i 's/install --owner=root --group=root \"${QEMU_BIN}\" \"${L4T_ROOTFS_DIR}\/usr\/bin\/\"/#install --owner=root --group=root \"${QEMU_BIN}\" \"${L4T_ROOTFS_DIR}\/usr\/bin\/\"/g' nv_tegra/nv-apply-debs.sh && \ 85 | sed -i 's/chroot . \// /g' nv_tegra/nv-apply-debs.sh && \ 86 | cd /tmp/Linux_for_Tegra/ && ./apply_binaries.sh -r / --target-overlay && cd .. && \ 87 | rm -rf Linux_for_Tegra && \ 88 | echo "/usr/lib/aarch64-linux-gnu/tegra" > /etc/ld.so.conf.d/nvidia-tegra.conf && ldconfig 89 | 90 | # Install X 91 | RUN apt-get install -y --no-install-recommends \ 92 | xserver-xorg-input-evdev \ 93 | xinit \ 94 | x11-xserver-utils \ 95 | dbus-x11 \ 96 | xterm 97 | 98 | ENV LD_LIBRARY_PATH=/usr/lib/aarch64-linux-gnu/tegra 99 | ENV UDEV=1 100 | 101 | # Prevent screen from turning off 102 | RUN echo "#!/bin/bash" > /etc/X11/xinit/xserverrc \ 103 | && echo "" >> /etc/X11/xinit/xserverrc \ 104 | && echo 'exec /usr/bin/X -s 0 dpms' >> /etc/X11/xinit/xserverrc && \ 105 | echo 'modules=("nvidia_drm"); for module in "${modules[@]}"; do if lsmod | grep -q ${module} ; then echo "Found $module"; rmmod $module; fi; done; startxfce4;' > /opt/startxfce.sh 106 | 107 | ## If any apt packages install mesa-egl, it will overwrite the tegra-egl 108 | ## symlink and ld path, so the following command will ensure tegra-egl remains 109 | ## available: 110 | RUN \ 111 | echo "/usr/lib/aarch64-linux-gnu/tegra\n/usr/lib/aarch64-linux-gnu/tegra-egl" \ 112 | > /etc/ld.so.conf.d/000-nvidia-tegra-egl.conf \ 113 | && ldconfig 114 | 115 | # Install some utils 116 | RUN apt-get update && apt-get install -y python3 libegl1 libglu1-mesa libglu1-mesa-dev \ 117 | freeglut3 freeglut3-dev libgtk2.0-dev 118 | 119 | # Create a shell script for launching NVIDIA DRM 120 | RUN printf 'modules=("nvidia_drm"); for module in "${modules[@]}"; do if lsmod | grep -q ${module} ; then echo "Found $module"; rmmod $module; fi; done; sleep infinity;' > /usr/src/drm-script.sh && chmod +x /usr/src/drm-script.sh 121 | 122 | WORKDIR /usr/src/app/ 123 | 124 | CMD ["/bin/bash", "/usr/src/drm-script.sh"] 125 | --------------------------------------------------------------------------------