diff --git a/.github/workflows/build-boot.yml b/.github/workflows/build-boot.yml new file mode 100644 index 00000000..b43bc63b --- /dev/null +++ b/.github/workflows/build-boot.yml @@ -0,0 +1,143 @@ +name: Build Bootloaders + +on: + workflow_dispatch: + inputs: + branch: + description: 'Branch to build from' + default: 'main' + type: string + +jobs: + build: + name: Build ${{ matrix.defconfig }} + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + defconfig: + - fireant_boot + - cn9130_crb_boot + - aarch64_qemu_boot + - rpi4_boot + env: + MAKEFLAGS: -j5 + steps: + - name: Cleanup Build Folder + run: | + ls -la ./ + rm -rf ./* || true + rm -rf ./.??* || true + ls -la ./ + + - name: Checkout infix repo + uses: actions/checkout@v4 + with: + ref: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.branch || github.ref }} + clean: true + fetch-depth: 0 + submodules: recursive + + - name: Set Build Variables + id: vars + run: | + defconfig=${{ matrix.defconfig }} + version=$(awk -F'"' '/BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE=/ {print $2}' configs/${defconfig}_defconfig) + version=${version:-git} + filename=$(echo "${defconfig}" | tr '_' '-') + + # TODO: Replace hardcoded rev with actual revision stepping + rev="latest" + + archive="${filename}-${version}-${rev}.tar.gz" + dirname="${filename}-${version}-${rev}" + + echo "defconfig=${defconfig}" >> $GITHUB_OUTPUT + echo "version=${version}" >> $GITHUB_OUTPUT + echo "rev=${rev}" >> $GITHUB_OUTPUT + echo "archive=${archive}" >> $GITHUB_OUTPUT + echo "dirname=${dirname}" >> $GITHUB_OUTPUT + + echo "Building ${defconfig}_defconfig, version ${version}-${rev}, artifact ${archive} ..." + + - name: Restore Cache of dl/ + uses: actions/cache@v4 + with: + path: dl/ + key: dl-boot-${{ hashFiles('.git/modules/buildroot/HEAD', 'configs/*', 'package/*/*.hash') }} + restore-keys: | + dl-boot- + dl- + + - name: Restore Cache of .ccache/ + uses: actions/cache@v4 + with: + path: .ccache/ + key: ccache-boot-${{ matrix.defconfig }}-${{ hashFiles('.git/modules/buildroot/HEAD', 'package/*/*.hash') }} + restore-keys: | + ccache-boot-${{ matrix.defconfig }}- + ccache-boot- + ccache- + + - name: Configure ${{ matrix.defconfig }}_defconfig + run: | + make ${{ matrix.defconfig }}_defconfig + + - name: Build ${{ matrix.defconfig }}_defconfig + run: | + echo "Building ${{ matrix.defconfig }}_defconfig ..." + make -j$((`getconf _NPROCESSORS_ONLN` / 2 + 2)) + + - name: Resulting size of build + run: | + printf "Size of output/images/: " + ls -l output/images/ + + - name: Prepare ${{ matrix.defconfig }} Artifact + run: | + cd output/ + mv images ${{ steps.vars.outputs.dirname }} + tar cfz ${{ steps.vars.outputs.archive }} ${{ steps.vars.outputs.dirname }}/ + + - uses: actions/upload-artifact@v4 + with: + path: output/${{ steps.vars.outputs.archive }} + name: artifact-${{ matrix.defconfig }} + + publish: + name: Upload Bootloader Artifacts + runs-on: ubuntu-latest + needs: build + permissions: + contents: write + steps: + - uses: actions/download-artifact@v4 + with: + pattern: "artifact-*" + merge-multiple: true + + - name: Create checksums ... + run: | + for file in *.tar.gz; do + sha256sum $file > $file.sha256 + done + + - uses: ncipollo/release-action@v1 + with: + allowUpdates: true + omitName: true + omitBody: true + omitBodyDuringUpdate: true + prerelease: true + tag: "latest-boot" + token: ${{ secrets.GITHUB_TOKEN }} + artifacts: "*.tar.gz*" + + - name: Summary + run: | + cat <> $GITHUB_STEP_SUMMARY + # Bootloader Build Complete! :rocket: + + For the public download links of these bootloader artifacts, please see: + + EOF diff --git a/board/aarch64/qemu/uboot/extras.config b/board/aarch64/qemu/uboot/extras.config new file mode 100644 index 00000000..dcead06d --- /dev/null +++ b/board/aarch64/qemu/uboot/extras.config @@ -0,0 +1,3 @@ +# QEMU-specific U-Boot config +# Enable PCI MMC for QEMU virtualized environment +CONFIG_MMC_PCI=y \ No newline at end of file diff --git a/board/common/post-image.sh b/board/common/post-image.sh index f9ebc323..efbde642 100755 --- a/board/common/post-image.sh +++ b/board/common/post-image.sh @@ -86,29 +86,31 @@ if [ "$FIT_IMAGE" = "y" ]; then $common/mkfit.sh fi +# Only for regular builds, not bootloader-only builds if [ "$BR2_TARGET_ROOTFS_SQUASHFS" = "y" ]; then rel=$(ver) ln -sf rootfs.squashfs "$BINARIES_DIR/${NAME}${rel}.img" if [ -n "$rel" ]; then ln -sf "${NAME}${rel}.img" "$BINARIES_DIR/${NAME}.img" fi + + cp "$BR2_EXTERNAL_INFIX_PATH/board/common/rootfs/usr/bin/onieprom" "$BINARIES_DIR/" + + # Menuconfig support for modifying Qemu args in release tarballs + cp "$BR2_EXTERNAL_INFIX_PATH/board/common/qemu/qemu.sh" "$BINARIES_DIR/" + sed -e "s/@ARCH@/QEMU_$BR2_ARCH/" \ + -e "s/@DISK_IMG@/$diskimg/" \ + < "$BR2_EXTERNAL_INFIX_PATH/board/common/qemu/Config.in.in" \ + > "$BINARIES_DIR/Config.in" + rm -f "$BINARIES_DIR/qemu.cfg" + CONFIG_="CONFIG_" BR2_CONFIG="$BINARIES_DIR/qemu.cfg" \ + "$O/build/buildroot-config/conf" --olddefconfig "$BINARIES_DIR/Config.in" + rm -f "$BINARIES_DIR/qemu.cfg.old" "$BINARIES_DIR/.config.old" + + # Quick intro for beginners, with links to more information + cp "$BR2_EXTERNAL_INFIX_PATH/board/common/README.txt" "$BINARIES_DIR/" fi -# Menuconfig support for modifying Qemu args in release tarballs -cp "$BR2_EXTERNAL_INFIX_PATH/board/common/rootfs/usr/bin/onieprom" "$BINARIES_DIR/" -cp "$BR2_EXTERNAL_INFIX_PATH/board/common/qemu/qemu.sh" "$BINARIES_DIR/" -sed -e "s/@ARCH@/QEMU_$BR2_ARCH/" \ - -e "s/@DISK_IMG@/$diskimg/" \ - < "$BR2_EXTERNAL_INFIX_PATH/board/common/qemu/Config.in.in" \ - > "$BINARIES_DIR/Config.in" -rm -f "$BINARIES_DIR/qemu.cfg" -CONFIG_="CONFIG_" BR2_CONFIG="$BINARIES_DIR/qemu.cfg" \ - "$O/build/buildroot-config/conf" --olddefconfig "$BINARIES_DIR/Config.in" -rm -f "$BINARIES_DIR/qemu.cfg.old" "$BINARIES_DIR/.config.old" - -# Quick intro for beginners, with links to more information -cp "$BR2_EXTERNAL_INFIX_PATH/board/common/README.txt" "$BINARIES_DIR/" - boards=$(${BR2_EXTERNAL_INFIX_PATH}/board/common/selected-boards.sh ${BR2_EXTERNAL_INFIX_PATH} ${O}) for board in $boards; do [ ! -f "${BR2_EXTERNAL_INFIX_PATH}/src/board/${board}/post-image.sh" ] && continue diff --git a/board/common/uboot/extras.config b/board/common/uboot/extras.config index 331412e6..0037106a 100644 --- a/board/common/uboot/extras.config +++ b/board/common/uboot/extras.config @@ -20,7 +20,6 @@ CONFIG_CMD_SETEXPR_FMT=y CONFIG_MMC=y CONFIG_MMC_SDHCI=y -CONFIG_MMC_PCI=y CONFIG_CMD_MMC=y CONFIG_FS_SQUASHFS=y diff --git a/configs/aarch64_qemu_boot_defconfig b/configs/aarch64_qemu_boot_defconfig index bc569c87..dbf84eb3 100644 --- a/configs/aarch64_qemu_boot_defconfig +++ b/configs/aarch64_qemu_boot_defconfig @@ -20,15 +20,11 @@ BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y BR2_TARGET_UBOOT_CUSTOM_VERSION=y BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2023.07.02" BR2_TARGET_UBOOT_BOARD_DEFCONFIG="qemu_arm64" -BR2_TARGET_UBOOT_CONFIG_FRAGMENT_FILES="$(BR2_EXTERNAL_INFIX_PATH)/board/common/uboot/extras.config" +BR2_TARGET_UBOOT_CONFIG_FRAGMENT_FILES="$(BR2_EXTERNAL_INFIX_PATH)/board/common/uboot/extras.config $(BR2_EXTERNAL_INFIX_PATH)/board/aarch64/qemu/uboot/extras.config" BR2_TARGET_UBOOT_FORMAT_DTB=y BR2_PACKAGE_HOST_GENIMAGE=y BR2_PACKAGE_HOST_RAUC=y BR2_PACKAGE_HOST_UBOOT_TOOLS=y BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SUPPORT=y BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SIGNATURE_SUPPORT=y -TRUSTED_KEYS=y -TRUSTED_KEYS_DEVELOPMENT=y -DISK_IMAGE_BOOT_BIN=y -DISK_IMAGE_BOOT_DATA="${BINARIES_DIR}/flash-image.bin" -DISK_IMAGE_BOOT_OFFSET=0x00200000 +# GNS3_APPLIANCE is not set diff --git a/configs/cn9130_crb_boot_defconfig b/configs/cn9130_crb_boot_defconfig index 7e4e3ed7..daf9d077 100644 --- a/configs/cn9130_crb_boot_defconfig +++ b/configs/cn9130_crb_boot_defconfig @@ -38,8 +38,4 @@ BR2_PACKAGE_HOST_RAUC=y BR2_PACKAGE_HOST_UBOOT_TOOLS=y BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SUPPORT=y BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SIGNATURE_SUPPORT=y -TRUSTED_KEYS=y -TRUSTED_KEYS_DEVELOPMENT=y -DISK_IMAGE_BOOT_BIN=y -DISK_IMAGE_BOOT_DATA="${BINARIES_DIR}/flash-image.bin" -DISK_IMAGE_BOOT_OFFSET=0x00200000 +# GNS3_APPLIANCE is not set diff --git a/configs/fireant_boot_defconfig b/configs/fireant_boot_defconfig index 1521af20..ec9542b1 100644 --- a/configs/fireant_boot_defconfig +++ b/configs/fireant_boot_defconfig @@ -11,6 +11,7 @@ BR2_GLOBAL_PATCH_DIR="$(BR2_EXTERNAL_INFIX_PATH)/patches" BR2_INIT_NONE=y BR2_SYSTEM_BIN_SH_NONE=y # BR2_PACKAGE_BUSYBOX is not set +BR2_PACKAGE_LIBBSD=y # BR2_PACKAGE_IFUPDOWN_SCRIPTS is not set # BR2_TARGET_ROOTFS_TAR is not set BR2_TARGET_UBOOT=y @@ -20,3 +21,5 @@ BR2_TARGET_UBOOT_CUSTOM_REPO_URL="https://github.com/kernelkit/u-boot.git" BR2_TARGET_UBOOT_CUSTOM_REPO_VERSION="c3d9cdcc7d9e3eb490d4036f5eece3fb91a2485c" BR2_TARGET_UBOOT_BOARD_DEFCONFIG="mscc_fireant_pcb135_emmc" BR2_TARGET_UBOOT_CONFIG_FRAGMENT_FILES="$(BR2_EXTERNAL_INFIX_PATH)/board/common/uboot/extras.config" +BR2_TARGET_UBOOT_NEEDS_DTC=y +# GNS3_APPLIANCE is not set diff --git a/configs/rpi4_boot_defconfig b/configs/rpi4_boot_defconfig new file mode 100644 index 00000000..97ea983f --- /dev/null +++ b/configs/rpi4_boot_defconfig @@ -0,0 +1,37 @@ +BR2_aarch64=y +BR2_cortex_a72=y +BR2_TOOLCHAIN_EXTERNAL=y +BR2_TOOLCHAIN_EXTERNAL_BOOTLIN=y +BR2_DL_DIR="$(BR2_EXTERNAL_INFIX_PATH)/dl" +BR2_CCACHE=y +BR2_CCACHE_DIR="$(BR2_EXTERNAL_INFIX_PATH)/.ccache" +BR2_ENABLE_DEBUG=y +BR2_PACKAGE_OVERRIDE_FILE="$(BR2_EXTERNAL_INFIX_PATH)/local.mk" +BR2_GLOBAL_PATCH_DIR="$(BR2_EXTERNAL_INFIX_PATH)/patches" +BR2_SSP_NONE=y +BR2_INIT_NONE=y +BR2_SYSTEM_BIN_SH_NONE=y +BR2_ROOTFS_POST_IMAGE_SCRIPT="${BR2_EXTERNAL_INFIX_PATH}/board/common/post-image.sh" +# BR2_PACKAGE_BUSYBOX is not set +BR2_PACKAGE_RPI_FIRMWARE=y +BR2_PACKAGE_RPI_FIRMWARE_CONFIG_FILE="${BR2_EXTERNAL_INFIX_PATH}/src/board/raspberry-pi-4/config.txt" +BR2_PACKAGE_RPI_FIRMWARE_CMDLINE_FILE="${BR2_EXTERNAL_INFIX_PATH}/src/board/raspberry-pi-4/cmdline.txt" +# BR2_PACKAGE_IFUPDOWN_SCRIPTS is not set +# BR2_TARGET_ROOTFS_TAR is not set +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2025.01" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="rpi_arm64" +BR2_TARGET_UBOOT_CONFIG_FRAGMENT_FILES="${BR2_EXTERNAL_INFIX_PATH}/board/common/uboot/extras.config ${BR2_EXTERNAL_INFIX_PATH}/src/board/raspberry-pi-4/uboot/extras.config" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_TARGET_UBOOT_FORMAT_DTB=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM_NAME="arch/arm/dts/infix-key.dtbo arch/arm/dts/rpi-env.dtbo" +BR2_TARGET_UBOOT_CUSTOM_DTS_PATH="${BR2_EXTERNAL_INFIX_PATH}/src/board/raspberry-pi-4/uboot/rpi-env.dtso" +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_RAUC=y +BR2_PACKAGE_HOST_UBOOT_TOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SUPPORT=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SIGNATURE_SUPPORT=y +# GNS3_APPLIANCE is not set diff --git a/package/board/raspberry-pi-4/Config.in b/package/board/raspberry-pi-4/Config.in index bd6562a2..8fd09de8 100644 --- a/package/board/raspberry-pi-4/Config.in +++ b/package/board/raspberry-pi-4/Config.in @@ -9,33 +9,6 @@ config BR2_PACKAGE_RASPBERRY_PI_4 select BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI4 select BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI4_X select SDCARD_AUX - select BR2_TARGET_UBOOT - select BR2_TARGET_UBOOT_FORMAT_CUSTOM - select BR2_TARGET_UBOOT_NEEDS_DTC select BR2_TARGET_UBOOT_NEEDS_UBOOT_TOOLS - select BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG help Raspberry pi 4 - -# Don't redefine - just set conditional defaults -if BR2_PACKAGE_RASPBERRY_PI_4 - -config BR2_TARGET_UBOOT_BOARD_DEFCONFIG - default "rpi_arm64" - -config BR2_TARGET_UBOOT_CONFIG_FRAGMENT_FILES - default "${BR2_EXTERNAL_INFIX_PATH}/board/common/uboot/extras.config ${BR2_EXTERNAL_INFIX_PATH}/src/board/raspberry-pi-4/uboot/extras.config" - -config BR2_TARGET_UBOOT_FORMAT_CUSTOM_NAME - default "arch/arm/dts/infix-key.dtbo arch/arm/dts/rpi-env.dtbo" - -config BR2_TARGET_UBOOT_CUSTOM_DTS_PATH - default "${BR2_EXTERNAL_INFIX_PATH}/src/board/raspberry-pi-4/uboot/rpi-env.dtso" - -config BR2_PACKAGE_RPI_FIRMWARE_CONFIG_FILE - default "${BR2_EXTERNAL_INFIX_PATH}/src/board/raspberry-pi-4/config.txt" - -config BR2_PACKAGE_RPI_FIRMWARE_CMDLINE_FILE - default "${BR2_EXTERNAL_INFIX_PATH}/src/board/raspberry-pi-4/cmdline.txt" - -endif diff --git a/patches/arm-trusted-firmware/v2.9/0002-marvell-Allow-mv-ddr-marvell-to-be-built-from-tarbal.patch b/patches/arm-trusted-firmware/v2.9/0002-marvell-Allow-mv-ddr-marvell-to-be-built-from-tarbal.patch deleted file mode 100644 index dccc0a84..00000000 --- a/patches/arm-trusted-firmware/v2.9/0002-marvell-Allow-mv-ddr-marvell-to-be-built-from-tarbal.patch +++ /dev/null @@ -1,29 +0,0 @@ -From da31240645cdf7ae424727ac330fdb6f6b118691 Mon Sep 17 00:00:00 2001 -From: Tobias Waldekranz -Date: Mon, 16 Oct 2023 10:52:19 +0200 -Subject: [PATCH 2/2] marvell: Allow mv-ddr-marvell to be built from tarball - -Build system relies on the mv-ddr-marvell being a valid GIT working -directory, which is not the case when building from a tarball. - -Therefore, reduce this requirement from a hard error to a warning. - -Signed-off-by: Tobias Waldekranz ---- - plat/marvell/armada/a8k/common/ble/ble.mk | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/plat/marvell/armada/a8k/common/ble/ble.mk b/plat/marvell/armada/a8k/common/ble/ble.mk -index 752ab419d..db817e996 100644 ---- a/plat/marvell/armada/a8k/common/ble/ble.mk -+++ b/plat/marvell/armada/a8k/common/ble/ble.mk -@@ -31,5 +31,5 @@ $(MV_DDR_LIB): FORCE - # Do not remove! Following checks are required to ensure correct TF-A builds, removing these checks leads to broken TF-A builds - $(if $(value MV_DDR_PATH),,$(error "Platform '$(PLAT)' for BLE requires MV_DDR_PATH. Please set MV_DDR_PATH to point to the right directory")) - $(if $(wildcard $(value MV_DDR_PATH)/*),,$(error "'MV_DDR_PATH=$(value MV_DDR_PATH)' was specified, but '$(value MV_DDR_PATH)' directory does not exist")) -- $(if $(shell git -C $(value MV_DDR_PATH) rev-parse --show-cdup 2>&1),$(error "'MV_DDR_PATH=$(value MV_DDR_PATH)' was specified, but '$(value MV_DDR_PATH)' does not contain valid mv-ddr-marvell git repository")) -+ $(if $(shell git -C $(value MV_DDR_PATH) rev-parse --show-cdup 2>&1),$(warning "'MV_DDR_PATH=$(value MV_DDR_PATH)' was specified, but '$(value MV_DDR_PATH)' does not contain valid mv-ddr-marvell git repository")) - @+make -C $(MV_DDR_PATH) --no-print-directory PLAT_INCLUDES="$(MV_DDR_INCLUDES)" PLATFORM=$(PLAT) ARCH=AARCH64 OBJ_DIR=$(BUILD_PLAT)/ble --- -2.34.1 -