From ab4ad0db038e6d96655149a20bc8f0919ee42b51 Mon Sep 17 00:00:00 2001 From: Alex Davies Date: Fri, 2 Feb 2024 12:39:51 -0400 Subject: [PATCH] Building in a docker container for easy linking to tx2-rootfs --- .dockerignore | 3 + .github/workflows/build-docker.yaml | 72 +++++++++++++++++++ Dockerfile | 28 ++++++++ extlinux.conf | 12 ++++ source/.gitattributes | 1 + ....1-2018.05-x86_64_aarch64-linux-gnu.tar.xz | 3 + 6 files changed, 119 insertions(+) create mode 100644 .dockerignore create mode 100644 .github/workflows/build-docker.yaml create mode 100644 Dockerfile create mode 100644 extlinux.conf create mode 100644 source/.gitattributes create mode 100644 source/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.tar.xz diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..eedf7cd --- /dev/null +++ b/.dockerignore @@ -0,0 +1,3 @@ +README.md +Dockerfile +.git diff --git a/.github/workflows/build-docker.yaml b/.github/workflows/build-docker.yaml new file mode 100644 index 0000000..6b91a49 --- /dev/null +++ b/.github/workflows/build-docker.yaml @@ -0,0 +1,72 @@ +name: Create and publish a Docker image + +on: + push: + +# Defines two custom environment variables for the workflow. These are used for the Container registry domain, and a name for the Docker image that this workflow builds. +env: + REGISTRY: git.spirirobotics.com + IMAGE_NAME: ${{ github.repository }} + +# There is a single job in this workflow. It's configured to run on the latest available version of Ubuntu. +jobs: + build-and-push-image: + runs-on: ubuntu-latest + container: ghcr.io/catthehacker/ubuntu:act-latest + + # Sets the permissions granted to the `GITHUB_TOKEN` for the actions in this job. + permissions: + contents: read + packages: write + # + steps: + #- name: install docker + # run: apt install moby-cli -y + - name: Checkout repository + uses: actions/checkout@v4 + with: + lfs: true + # Uses the `docker/login-action` action to log in to the Container registry registry using the account and password that will publish the packages. Once published, the packages are scoped to the account defined here. + - name: Log in to the Container registry + uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.WORKFLOW_REGISTRY_TOKEN }} + # This step uses [docker/metadata-action](https://github.com/docker/metadata-action#about) to extract tags and labels that will be applied to the specified image. The `id` "meta" allows the output of this step to be referenced in a subsequent step. The `images` value provides the base name for the tags and labels. + - name: Extract metadata (tags, labels) for Docker + id: meta + uses: docker/metadata-action@9ec57ed1fcdbf14dcef7dfbe97b2010124a938b7 + with: + images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + + # - name: Set up QEMU + # uses: docker/setup-qemu-action@v2 + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + # This step uses the `docker/build-push-action` action to build the image, based on your repository's `Dockerfile`. If the build succeeds, it pushes the image to GitHub Packages. + # It uses the `context` parameter to define the build's context as the set of files located in the specified path. For more information, see "[Usage](https://github.com/docker/build-push-action#usage)" in the README of the `docker/build-push-action` repository. + # It uses the `tags` and `labels` parameters to tag and label the image with the output from the "meta" step. + - name: Build Docker image + uses: docker/build-push-action@v5 + env: + #Hack for gitea/github weirdness. + ACTIONS_RUNTIME_TOKEN: '' + with: + context: . + # push: true + load: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + + - name: Push Docker image + uses: docker/build-push-action@v5 + env: + #Hack for gitea/github weirdness. + ACTIONS_RUNTIME_TOKEN: '' + with: + context: . + push: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..40349bc --- /dev/null +++ b/Dockerfile @@ -0,0 +1,28 @@ +from --platform=linux/amd64 git.spirirobotics.com/spiri/tx2-flashing-tool:main as kernel-build + +ADD ./source/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.tar.xz /opt/gcc-linaro-7.3.1/ +ENV CROSS_COMPILE /opt/gcc-linaro-7.3.1/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu- + +ENV LINUX_FOR_TEGRA /jetson/Linux_for_Tegra +ENV KERNEL_LOCATION_FROM_BUILD_DIR ../../spiri-project/source/Jetpack/kernel/kernel-4.9/ +ENV KERNEL_LOCATION $KERNEL_LOCATION_FROM_BUILD_DIR + +COPY ./ /jetson/Linux_for_Tegra/spiri-project + +WORKDIR /jetson/Linux_for_Tegra/spiri-project/CTI-L4T/ +RUN ./install.sh + +RUN mkdir -p /jetson/Linux_for_Tegra/builds/build_tx2/build + +WORKDIR /jetson/Linux_for_Tegra/builds/build_tx2/ +RUN make -C $KERNEL_LOCATION ARCH=arm64 O=$PWD/build/ tegra_defconfig +RUN make -C $KERNEL_LOCATION ARCH=arm64 O=$PWD/build/ CROSS_COMPILE=${CROSS_COMPILE} -j8 --output-sync=target zImage dtbs modules + +RUN mkdir -p /build/boot/ +RUN mkdir -p /build/lib/modules/ + +from --platform=linux/arm64 scratch + +COPY --from=kernel-build /jetson/Linux_for_Tegra/builds/build_tx2/build/arch/arm64/boot/Image /boot/spiriImage +COPY --from=kernel-build /jetson/Linux_for_Tegra/builds/build_tx2/build/arch/arm64/boot/dts/tegra186-tx2-spiri-revF+.dtb /boot/ +COPY ./extlinux.conf /boot/extlinux/extlinux.conf diff --git a/extlinux.conf b/extlinux.conf new file mode 100644 index 0000000..134b9fa --- /dev/null +++ b/extlinux.conf @@ -0,0 +1,12 @@ +TIMEOUT 2 +DEFAULT primary + +MENU TITLE L4T boot options + +LABEL primary + MENU LABEL primary kernel + LINUX /boot/spiriImage + FDT /boot/tegra186-tx2-spiri-revF+.dtb + INITRD /boot/initrd + APPEND ${cbootargs} quiet + diff --git a/source/.gitattributes b/source/.gitattributes new file mode 100644 index 0000000..d3ac3a0 --- /dev/null +++ b/source/.gitattributes @@ -0,0 +1 @@ +gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.tar.xz filter=lfs diff=lfs merge=lfs -text diff --git a/source/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.tar.xz b/source/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.tar.xz new file mode 100644 index 0000000..a0f9f4f --- /dev/null +++ b/source/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.tar.xz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:73eed74e593e2267504efbcf3678918bb22409ab7afa3dc7c135d2c6790c2345 +size 114718336