Files
pawlet_rpi5/BoardConfig.mk
oxmc cd30b06245 rpi5: recovery as a separate on-demand image; A/B on tryboot
- mkbootimg.mk: boot.img uses the normal ramdisk again; the recovery.img rule
  is guarded so it only builds when recovery is enabled (PAWLET_BUILD_RECOVERY=1)
  and carries the recovery ramdisk.
- config.txt [tryboot] back to boot_partition=2 (A/B trial); recovery enters
  via reboot,3.
- vendor.prop reboot reason back to reboot,tryboot.
- drop the no-op reserved-size lines (AOSP ignores RESERVED_SIZE for fixed
  non-dynamic partitions).
2026-07-17 05:11:12 -07:00

119 lines
4.9 KiB
Makefile

#
# Copyright (C) 2021-2022 KonstaKANG
# Copyright (C) 2025 oxmc
#
# SPDX-License-Identifier: Apache-2.0
#
DEVICE_PATH := device/pawlet/rpi5
# PawletOS common board config (A/B, partition sizes, update_engine)
include vendor/pawlet/config/BoardConfigPawlet.mk
# Architecture
TARGET_ARCH := arm64
TARGET_ARCH_VARIANT := armv8-a
TARGET_CPU_ABI := arm64-v8a
TARGET_CPU_ABI2 :=
TARGET_CPU_VARIANT := cortex-a76
# Bluetooth
BOARD_HAVE_BLUETOOTH := true
# Bootloader
TARGET_NO_BOOTLOADER := true
# Recovery — stock bootable/recovery stays unforked; TWRP's GUI plugs in via
# TARGET_RECOVERY_UI_LIB (recovery_main.cpp dlopen()s librecovery_ui_ext.so and
# dlsym()s make_device() from whatever this points at). See
# vendor/pawlet/recovery_ui/README.md and NOTES-ota-recovery-ab.md.
TARGET_NO_RECOVERY := false
# Recovery is a SEPARATE image on the recovery partition, built on demand (see
# PRODUCT_BUILD_RECOVERY_IMAGE in common.mk / the `precovery` helper). It is kept
# out of the normal build so AOSP does not force recovery.img into the vendor
# image size check (RECOVERY_FROM_BOOT_PATCH), which would overflow the padded
# 2GB vendor partition. mkbootimg.mk builds the recovery FAT when enabled;
# pawlet-recoveryboot.sh enters it via reboot,3. BOARD_USES_FULL_RECOVERY_IMAGE
# avoids the recovery-from-boot imgdiff / recovery-resource.dat path. Do NOT use
# BOARD_USES_RECOVERY_AS_BOOT: it makes AOSP seize the boot.img rule and collide
# with our custom FAT mkbootimg.mk.
BOARD_USES_FULL_RECOVERY_IMAGE := true
# BOARD_RECOVERYIMAGE_PARTITION_SIZE (128M) comes from BoardConfigPawlet.mk.
TARGET_RECOVERY_FSTAB := device/pawlet/rpi5/recovery/recovery.rpi5.fstab
TARGET_RECOVERY_PIXEL_FORMAT := RGB_565
# Phase 2 — TWRP GUI: re-point once librecovery_ui_pawlet_twrp links
# (libaosprecovery / TWRP's forked install/*.cpp still unported, see
# vendor/pawlet/recovery_ui/README.md).
#TARGET_RECOVERY_UI_LIB := librecovery_ui_pawlet_twrp
# Display
TARGET_SCREEN_DENSITY := 240
# AVB — no vbmeta partition in layout
BOARD_AVB_ENABLE := false
# Kernel
BOARD_CUSTOM_BOOTIMG := true
BOARD_CUSTOM_BOOTIMG_MK := $(DEVICE_PATH)/mkbootimg.mk
BOARD_KERNEL_CMDLINE := console=ttyAMA10,115200 androidboot.hardware=rpi5
# Boot devices — see pawlet_rpi4/BoardConfig.mk for the rationale. First-stage
# init only creates /dev/block/by-name/* symlinks for partitions on a declared
# boot device (exact match vs uevent path minus /devices/platform/).
# RPi5 differs from RPi4: USB is on the RP1 chip behind the internal PCIe, and
# RP1's xHCI is itself a platform device, so init matches at the .usb node:
# NVMe (external PCIe HAT): axi/1000110000.pcie
# USB (RP1 xHCI on PCIe): axi/1000120000.pcie/1f00200000.usb (and .../1f00300000.usb)
# Extra entries are harmless (exact-match set). Verify/trim against an RPi5
# serial boot log (the sda / nvme0n1 /devices/platform/... path).
BOARD_KERNEL_CMDLINE += androidboot.boot_devices=axi/1000110000.pcie,axi/1000120000.pcie/1f00200000.usb,axi/1000120000.pcie/1f00300000.usb,axi/1000120000.pcie
# Manifest
DEVICE_FRAMEWORK_COMPATIBILITY_MATRIX_FILE := $(DEVICE_PATH)/framework_compatibility_matrix.xml
DEVICE_MANIFEST_FILE := $(DEVICE_PATH)/manifest.xml
PRODUCT_MANIFEST_FILES := $(DEVICE_PATH)/product_manifest.xml
# Partition sizes
BOARD_FLASH_BLOCK_SIZE := 4096
BOARD_BOOTIMAGE_PARTITION_SIZE := 134217728 # 128M
BOARD_SYSTEMIMAGE_PARTITION_SIZE := 8589934592 # 8192M (8GB)
BOARD_SYSTEM_EXTIMAGE_PARTITION_SIZE := 4294967296 # 4096M (4GB)
BOARD_SYSTEM_EXTIMAGE_PARTITION_RESERVED_SIZE := 104857600 # 100MB
BOARD_SYSTEM_EXTIMAGE_FILE_SYSTEM_TYPE := ext4
TARGET_COPY_OUT_SYSTEM_EXT := system_ext
BOARD_VENDORIMAGE_PARTITION_SIZE := 2147483648 # 2048M (2GB)
BOARD_VENDORIMAGE_FILE_SYSTEM_TYPE := ext4
TARGET_COPY_OUT_VENDOR := vendor
BOARD_USES_METADATA_PARTITION := true
BOARD_METADATAIMAGE_PARTITION_SIZE := 67108864 # 64MB (increased for A/B snapshot metadata)
BOARD_MISCIMAGE_PARTITION_SIZE := 4194304 # 4MB (A/B slot tracking)
BOARD_USERDATAIMAGE_PARTITION_SIZE := 134217728 # 128M
TARGET_USERIMAGES_SPARSE_EXT_DISABLED := true
TARGET_USERIMAGES_USE_EXT4 := true
# if BOARD_STORAGE_SUPPORTS_DISCARD := true
# is set in BoardConfig.mk (or a device variant makefile), TRIM will be
# enabled on the metadata partition. Only do this if your storage device
# actually supports discard (SD cards, SSDs) — USB flash drives typically
# don't, and requesting discard on them stalls jbd2.
BOARD_STORAGE_SUPPORTS_DISCARD := true
# Platform
TARGET_BOARD_PLATFORM := bcm2712
TARGET_BOOTLOADER_BOARD_NAME := bcm2712
# Properties
TARGET_VENDOR_PROP += $(DEVICE_PATH)/vendor.prop
# SELinux
BOARD_SEPOLICY_DIRS += device/pawlet/rpi5/sepolicy
BOARD_KERNEL_CMDLINE += androidboot.selinux=permissive
# Wifi
BOARD_WLAN_DEVICE := bcmdhd
BOARD_HOSTAPD_DRIVER := NL80211
BOARD_HOSTAPD_PRIVATE_LIB := lib_driver_cmd_$(BOARD_WLAN_DEVICE)
BOARD_WPA_SUPPLICANT_DRIVER := NL80211
BOARD_WPA_SUPPLICANT_PRIVATE_LIB := lib_driver_cmd_$(BOARD_WLAN_DEVICE)
WPA_SUPPLICANT_VERSION := VER_0_8_X