#!/bin/sh set -eu # Define board directory and related variables BOARD_DIR=$2 BOARD_TYPE=$(basename "${BOARD_DIR}") # Source external metadata . "${BR2_EXTERNAL_OPENVOICEOS_PATH}/meta" . "${BOARD_DIR}/meta" # Function to create and write os-release file write_os_release() { local os_release_file="${TARGET_DIR}/usr/lib/os-release" echo "Creating os-release at ${os_release_file}" { echo "NAME=\"${OVOS_NAME}\"" echo "VERSION=\"${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_BUILD} ${BOARD_NAME}\"" echo "ID=${OVOS_ID}" echo "VERSION_ID=${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_BUILD}" echo "PRETTY_NAME=\"${OVOS_NAME} ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_BUILD} ${BOARD_NAME}\"" echo "CPE_NAME=cpe:2.3:o:openvoiceos:${OVOS_ID}:${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_BUILD}:*:${DEPLOYMENT}:*:*:*:${BOARD_ID}:*" echo "HOME_URL=https://github.com/OpenVoiceOS/OpenVoiceOS" echo "DOCUMENTATION_URL=https://github.com/OpenVoiceOS/OpenVoiceOS/tree/develop/documentation" echo "SUPPORT_URL=https://github.com/OpenVoiceOS/OpenVoiceOS/issues" echo "VARIANT=\"${OVOS_NAME} - Buildroot Edition\"" echo "VARIANT_ID=${OVOS_ID}-${BOARD_ID}-buildroot" } > "${os_release_file}" } # Function to create and write machine-info file write_machine_info() { local machine_info_file="${TARGET_DIR}/etc/machine-info" echo "Creating machine-info at ${machine_info_file}" { echo "CHASSIS=${CHASSIS}" echo "DEPLOYMENT=${DEPLOYMENT}" } > "${machine_info_file}" } # Function to copy files based on board type copy_board_specific_files() { echo "Copying files for board type: ${BOARD_TYPE}" case "${BOARD_TYPE}" in "rpi3"|"rpi4"|"rpi5") cp -f "${BOARD_DIR}/../cmdline.txt" "${BINARIES_DIR}/rpi-firmware/cmdline.txt" cp -f "${BOARD_DIR}/config.txt" "${BINARIES_DIR}/rpi-firmware/config.txt" cp -f "${BOARD_DIR}/RPI_EFI.fd" "${BINARIES_DIR}/rpi-firmware/RPI_EFI.fd" cp -f "${BOARD_DIR}/../grub-efi.cfg" "${BINARIES_DIR}/efi-part/EFI/BOOT/grub.cfg" cp -f "${BOARD_DIR}/sw-description" "${BINARIES_DIR}" ;; "ova"|"pc") cp -f "${BOARD_DIR}/grub-efi.cfg" "${BINARIES_DIR}/efi-part/EFI/BOOT/grub.cfg" cp -f "${BOARD_DIR}/cmdline.txt" "${BINARIES_DIR}" cp -f "${BOARD_DIR}/sw-description" "${BINARIES_DIR}" ;; *) echo "No specific files to copy for board type: ${BOARD_TYPE}" ;; esac } # Function to handle kernel renaming based on board type handle_kernel_renaming() { case "${BOARD_TYPE}" in "rpi3"|"rpi4"|"rpi5") grub-editenv "${BINARIES_DIR}/efi-part/EFI/BOOT/grubenv" create if [ -f "${TARGET_DIR}/boot/Image" ]; then echo "Found Image, renaming to kernel" mv "${TARGET_DIR}/boot/Image" "${TARGET_DIR}/boot/kernel" fi ;; "ova"|"pc") grub-editenv "${BINARIES_DIR}/efi-part/EFI/BOOT/grubenv" create if [ -f "${TARGET_DIR}/boot/bzImage" ]; then echo "Found bzImage, renaming to kernel" mv "${TARGET_DIR}/boot/bzImage" "${TARGET_DIR}/boot/kernel" fi ;; *) echo "No kernel renaming logic needed for board type: ${BOARD_TYPE}" ;; esac } # Main function to execute script logic main() { write_os_release write_machine_info copy_board_specific_files handle_kernel_renaming # Prepare and sync home data local home_img="${BINARIES_DIR}/homefs.ext4" echo "Preparing home data at ${home_img}" rm -f "${home_img}" truncate --size="6890M" "${home_img}" mkfs.ext4 -L "homefs" -E lazy_itable_init=0,lazy_journal_init=0 "${home_img}" local home_mount_point="${BINARIES_DIR}/home" mkdir -p "${home_mount_point}" sudo mount -o loop,discard "${home_img}" "${home_mount_point}" sudo rsync -avPHSX "${TARGET_DIR}/home/"* "${home_mount_point}/" sudo umount "${home_img}" } # Ensure the script is called with the correct number of arguments if [ "$#" -ne 2 ]; then echo "Usage: $0 " exit 1 fi # Call the main function main