build_rpi_blobs() { for i in raspberrypi-bootloader-common raspberrypi-bootloader; do apk fetch --quiet --stdout "$i" | tar -C "${DESTDIR}" -zx --strip=1 boot/ || return 1 done } rpi_gen_cmdline() { echo "modules=loop,squashfs,sd-mod,usb-storage quiet ${kernel_cmdline}" } rpi_gen_config() { cat <<-EOF # do not modify this file as it will be overwritten on upgrade. # create and/or modify usercfg.txt instead. # https://www.raspberrypi.com/documentation/computers/config_txt.html EOF case "$ARCH" in armhf) cat <<-EOF [pi0] kernel=boot/vmlinuz-rpi initramfs boot/initramfs-rpi [pi0w] kernel=boot/vmlinuz-rpi initramfs boot/initramfs-rpi [pi1] kernel=boot/vmlinuz-rpi initramfs boot/initramfs-rpi [pi02] kernel=boot/vmlinuz-rpi2 initramfs boot/initramfs-rpi2 [pi2] kernel=boot/vmlinuz-rpi2 initramfs boot/initramfs-rpi2 [pi3] kernel=boot/vmlinuz-rpi2 initramfs boot/initramfs-rpi2 [pi3+] kernel=boot/vmlinuz-rpi2 initramfs boot/initramfs-rpi2 [all] include usercfg.txt EOF ;; armv7) cat <<-EOF [pi02] kernel=boot/vmlinuz-rpi2 initramfs boot/initramfs-rpi2 [pi2] kernel=boot/vmlinuz-rpi2 initramfs boot/initramfs-rpi2 [pi3] kernel=boot/vmlinuz-rpi2 initramfs boot/initramfs-rpi2 [pi3+] kernel=boot/vmlinuz-rpi2 initramfs boot/initramfs-rpi2 [pi4] kernel=boot/vmlinuz-rpi4 initramfs boot/initramfs-rpi4 [all] include usercfg.txt EOF ;; aarch64) cat <<-EOF [pi02] kernel=boot/vmlinuz-rpi initramfs boot/initramfs-rpi [pi3] kernel=boot/vmlinuz-rpi initramfs boot/initramfs-rpi [pi3+] kernel=boot/vmlinuz-rpi initramfs boot/initramfs-rpi [pi4] enable_gic=1 kernel=boot/vmlinuz-rpi4 initramfs boot/initramfs-rpi4 [all] arm_64bit=1 include usercfg.txt EOF ;; esac } build_rpi_config() { rpi_gen_cmdline > "${DESTDIR}"/cmdline.txt rpi_gen_config > "${DESTDIR}"/config.txt } section_rpi_config() { [ "$hostname" = "rpi" ] || return 0 build_section rpi_config $( (rpi_gen_cmdline ; rpi_gen_config) | checksum ) build_section rpi_blobs } profile_rpi() { profile_base title="Raspberry Pi" desc="Includes Raspberry Pi kernel. Designed for RPI 1, 2, 3 and 4. And much more..." image_ext="tar.gz" arch="aarch64 armhf armv7" kernel_flavors="rpi" case "$ARCH" in aarch64) kernel_flavors="rpi rpi4";; armhf) kernel_flavors="rpi rpi2";; armv7) kernel_flavors="rpi2 rpi4";; esac kernel_cmdline="console=tty1" initfs_features="base squashfs mmc usb kms dhcp https" hostname="rpi" grub_mod= } build_uboot() { set -x # FIXME: Fix apk-tools to extract packages directly local pkg pkgs="$(apk fetch --simulate --root "$APKROOT" --recursive u-boot-all | sed -ne "s/^Downloading \(.*\)\-[0-9].*$/\1/p")" for pkg in $pkgs; do [ "$pkg" = "u-boot-all" ] || apk fetch --root "$APKROOT" --stdout $pkg | tar -C "$DESTDIR" -xz usr done mkdir -p "$DESTDIR"/u-boot mv "$DESTDIR"/usr/sbin/update-u-boot "$DESTDIR"/usr/share/u-boot/* "$DESTDIR"/u-boot rm -rf "$DESTDIR"/usr } section_uboot() { [ -n "$uboot_install" ] || return 0 build_section uboot $ARCH $(apk fetch --root "$APKROOT" --simulate --recursive u-boot-all | sort | checksum) } profile_uboot() { profile_base title="Generic ARM" desc="Has default ARM kernel. Includes the uboot bootloader. Supports armv7 and aarch64." image_ext="tar.gz" arch="aarch64 armv7" kernel_flavors="lts" kernel_addons="xtables-addons" initfs_features="base bootchart ext4 kms mmc nvme raid scsi squashfs usb" apkovl="genapkovl-dhcp.sh" hostname="alpine" uboot_install="yes" }