# At the time of writing, the binaries below were uploaded manually. However, # they are simply a vanilla U-Boot build of v2020.07, from Ubuntu 18.04, using # these commands: # make CROSS_COMPILE=arm-linux-gnueabihf- am335x_boneblack_vboot_defconfig # make CROSS_COMPILE=arm-linux-gnueabihf- # make CROSS_COMPILE=arm-linux-gnueabihf- envtools BEAGLEBONE_BLACK_BINARIES="beaglebone_black_uefi-2020.07.tar.gz" BEAGLEBONE_BLACK_BINARIES_URL="${MENDER_STORAGE_URL}/mender-convert/uboot/beaglebone/${BEAGLEBONE_BLACK_BINARIES}" # At the time of writing, the binaries below were uploaded manually. They are # simply a dump of the deb package from the link below, with the addition of the # initrd file, which is not part of the package, but which is generated when # installed on a live Beaglebone device. # Original deb URL: http://repos.rcn-ee.com/debian/pool/main/l/linux-upstream/linux-image-4.19.94-ti-r51_1buster_armhf.deb BEAGLEBONE_EFI_COMPATIBLE_KERNEL="linux-image-4.19.94-ti-r51_1buster_armhf-deb-dump.tar.xz" BEAGLEBONE_EFI_COMPATIBLE_KERNEL_URL="${MENDER_STORAGE_URL}/mender-convert/beaglebone/kernel/${BEAGLEBONE_EFI_COMPATIBLE_KERNEL}" BEAGLEBONE_EFI_COMPATIBLE_KERNEL_VERSION=4.19.94-ti-r51 MENDER_IGNORE_UBOOT_BROKEN_UEFI=1 MENDER_IGNORE_MISSING_EFI_STUB=1 function beaglebone_fix_broken_uefi_uboot() { log_warn "Attempting to work around broken UEFI support in U-Boot by forcing a newer U-Boot version." mkdir -p work/bbb/binaries run_and_log_cmd "wget -q ${BEAGLEBONE_BLACK_BINARIES_URL} -P work/bbb/binaries" run_and_log_cmd "tar xzvf work/bbb/binaries/${BEAGLEBONE_BLACK_BINARIES} -C work/bbb/binaries" # Place u-boot and MLO into rootfs/boot run_and_log_cmd "sudo mkdir -p work/rootfs/boot" run_and_log_cmd "sudo cp work/bbb/binaries/MLO work/boot/" run_and_log_cmd "sudo cp work/bbb/binaries/u-boot.img work/boot/" run_and_log_cmd "sudo install -m 755 work/bbb/binaries/fw_printenv work/rootfs/sbin/fw_printenv" run_and_log_cmd "sudo ln -fs /sbin/fw_printenv work/rootfs/sbin/fw_setenv" } function beaglebone_fix_broken_uefi_kernel() { log_warn "Attempting to work around kernel without EFI stub by using a newer kernel." mkdir -p work/bbb/kernel run_and_log_cmd "wget -q $BEAGLEBONE_EFI_COMPATIBLE_KERNEL_URL -P work/bbb/kernel" mkdir -p work/bbb/kernel/extract run_and_log_cmd "tar xJf work/bbb/kernel/$BEAGLEBONE_EFI_COMPATIBLE_KERNEL -C work/bbb/kernel/extract" run_and_log_cmd "cp -r work/bbb/kernel/extract/* work/rootfs/" run_and_log_cmd "ln -sf vmlinuz-$BEAGLEBONE_EFI_COMPATIBLE_KERNEL_VERSION work/rootfs/boot/kernel" run_and_log_cmd "ln -sf initrd.img-$BEAGLEBONE_EFI_COMPATIBLE_KERNEL_VERSION work/rootfs/boot/initrd" } function beaglebone_fix_broken_uefi() { if ! is_uboot_with_uefi_support work/boot-gap.bin; then beaglebone_fix_broken_uefi_uboot fi if ! is_efi_compatible_kernel work/rootfs/boot/$kernel_imagetype; then beaglebone_fix_broken_uefi_kernel fi } PLATFORM_MODIFY_HOOKS+=(beaglebone_fix_broken_uefi) function disable_udisks2_service() { # Mask udisks2.service, otherwise it will mount the inactive part and we # might write an update while it is mounted which often result in # corruptions. # # TODO: Find a way to only blacklist mmcblk0pX devices instead of masking # the service. run_and_log_cmd "sudo ln -sf /dev/null work/rootfs/etc/systemd/system/udisks2.service" } PLATFORM_MODIFY_HOOKS+=(disable_udisks2_service)