From 47cddee1cfff90abb37e6da7ae6b3e836a9f2608 Mon Sep 17 00:00:00 2001 From: "Igor Zalatov (from Citadel PC)" Date: Sun, 18 Jun 2023 23:29:41 +0300 Subject: [PATCH] Update gk7205v200-baresip profile --- .../gk7205v200_ultimate_baresip_defconfig} | 69 +++-- .../gk7205v200_ultimate_baresip/building.sh | 271 ++++++++++++++++++ .../general/overlay/etc/composer.ini | 0 3 files changed, 317 insertions(+), 23 deletions(-) rename projects/{gk7205v200_lite_baresip/br-ext-chip-goke/configs/gk7205v200_lite_baresip_defconfig => gk7205v200_ultimate_baresip/br-ext-chip-goke/configs/gk7205v200_ultimate_baresip_defconfig} (58%) create mode 100755 projects/gk7205v200_ultimate_baresip/building.sh rename projects/{gk7205v200_lite_baresip => gk7205v200_ultimate_baresip}/general/overlay/etc/composer.ini (100%) diff --git a/projects/gk7205v200_lite_baresip/br-ext-chip-goke/configs/gk7205v200_lite_baresip_defconfig b/projects/gk7205v200_ultimate_baresip/br-ext-chip-goke/configs/gk7205v200_ultimate_baresip_defconfig similarity index 58% rename from projects/gk7205v200_lite_baresip/br-ext-chip-goke/configs/gk7205v200_lite_baresip_defconfig rename to projects/gk7205v200_ultimate_baresip/br-ext-chip-goke/configs/gk7205v200_ultimate_baresip_defconfig index 47c7ed0..919eaf4 100644 --- a/projects/gk7205v200_lite_baresip/br-ext-chip-goke/configs/gk7205v200_lite_baresip_defconfig +++ b/projects/gk7205v200_ultimate_baresip/br-ext-chip-goke/configs/gk7205v200_ultimate_baresip_defconfig @@ -10,7 +10,7 @@ BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_9=y # Toolchain BR2_PER_PACKAGE_DIRECTORIES=y -BR2_GCC_VERSION_8_X=y +BR2_GCC_VERSION_12_X=y # BR2_TOOLCHAIN_USES_UCLIBC is not set # BR2_TOOLCHAIN_BUILDROOT_UCLIBC is not set # BR2_TOOLCHAIN_BUILDROOT_LIBC="uclibc" @@ -23,33 +23,38 @@ BR2_TOOLCHAIN_BUILDROOT_USE_SSP=y # Kernel BR2_LINUX_KERNEL=y -BR2_LINUX_KERNEL_CUSTOM_VERSION=y -BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.9.37" +BR2_LINUX_KERNEL_CUSTOM_TARBALL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="https://github.com/openipc/linux/archive/$(OPENIPC_KERNEL).tar.gz" BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y -BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="$(BR2_EXTERNAL_VENDOR_PATH)/board/gk7205v200/kernel/gk7205v200.generic.config" +BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="$(EXTERNAL_VENDOR)/board/gk7205v200/kernel/gk7205v200.generic.config" BR2_LINUX_KERNEL_UIMAGE=y BR2_LINUX_KERNEL_XZ=y -BR2_LINUX_KERNEL_EXT_VENDOR_PATCHER=y + +# OpenIPC +BR2_OPENIPC_SOC_VENDOR="goke" +BR2_OPENIPC_SOC_MODEL="gk7205v200" +BR2_OPENIPC_SOC_FAMILY="gk7205v200" +BR2_OPENIPC_FLAVOR="ultimate" # Filesystem # BR2_TARGET_TZ_INFO is not set BR2_TARGET_ROOTFS_CPIO=y BR2_TARGET_ROOTFS_SQUASHFS=y BR2_TARGET_ROOTFS_SQUASHFS4_XZ=y -BR2_ROOTFS_OVERLAY="$(BR2_EXTERNAL_GENERAL_PATH)/overlay" -BR2_ROOTFS_POST_BUILD_SCRIPT="$(BR2_EXTERNAL_SCRIPTS_PATH)/executing_commands_for_$(BR2_TOOLCHAIN_BUILDROOT_LIBC).sh" +BR2_ROOTFS_OVERLAY="$(BR2_EXTERNAL)/overlay" +BR2_ROOTFS_POST_BUILD_SCRIPT="$(BR2_EXTERNAL)/scripts/rootfs_script.sh" # OpenIPC configuration BR2_TOOLCHAIN_BUILDROOT_VENDOR="openipc" BR2_TARGET_GENERIC_ISSUE="Welcome to OpenIPC" -BR2_TARGET_GENERIC_HOSTNAME="openipc-gk7205v200" -BR2_GLOBAL_PATCH_DIR="$(BR2_EXTERNAL_GENERAL_PATH)/package/all-patches" +BR2_TARGET_GENERIC_HOSTNAME="openipc-gk7205v200-baresip" +BR2_GLOBAL_PATCH_DIR="$(BR2_EXTERNAL)/package/all-patches" # OpenIPC packages -BR2_PACKAGE_BUSYBOX_CONFIG="$(BR2_EXTERNAL_GENERAL_PATH)/package/busybox/busybox.config" +BR2_PACKAGE_BUSYBOX_CONFIG="$(BR2_EXTERNAL)/package/busybox/busybox.config" BR2_PACKAGE_DROPBEAR_OPENIPC=y # BR2_PACKAGE_FDK_AAC_OPENIPC is not set -BR2_PACKAGE_FWPRINTENV_OPENIPC=y +BR2_PACKAGE_UBOOT_TOOLS=y BR2_PACKAGE_GOKE_OSDRV_GK7205V200=y BR2_PACKAGE_HISILICON_OPENSDK=y BR2_PACKAGE_HASERL=y @@ -57,6 +62,7 @@ BR2_PACKAGE_HASERL=y BR2_PACKAGE_IPCTOOL=y BR2_PACKAGE_JSON_C=y BR2_PACKAGE_JSONFILTER=y +BR2_PACKAGE_LAME_OPENIPC=y BR2_PACKAGE_LIBCURL_OPENIPC=y BR2_PACKAGE_LIBCURL_OPENIPC_CURL=y # BR2_PACKAGE_LIBCURL_OPENIPC_VERBOSE is not set @@ -67,9 +73,10 @@ BR2_PACKAGE_LIBCURL_OPENIPC_MBEDTLS=y BR2_PACKAGE_LIBEVENT_OPENIPC=y BR2_PACKAGE_LIBEVENT_OPENIPC_REMOVE_PYSCRIPT=y BR2_PACKAGE_LIBOGG_OPENIPC=y +BR2_PACKAGE_LIBWEBSOCKETS_OPENIPC=y BR2_PACKAGE_LIBYAML=y -# BR2_PACKAGE_MAJESTIC_FONTS is not set -# BR2_PACKAGE_MAJESTIC is not set +BR2_PACKAGE_MAJESTIC_FONTS=y +BR2_PACKAGE_MAJESTIC=y BR2_PACKAGE_MBEDTLS_OPENIPC=y # BR2_PACKAGE_MBEDTLS_OPENIPC_PROGRAMS is not set # BR2_PACKAGE_MBEDTLS_OPENIPC_COMPRESSION is not set @@ -82,25 +89,31 @@ BR2_PACKAGE_OPUS_OPENIPC_FIXED_POINT=y BR2_PACKAGE_UACME_OPENIPC=y BR2_PACKAGE_VTUND_OPENIPC=y BR2_PACKAGE_YAML_CLI=y +BR2_PACKAGE_QUIRC_OPENIPC=y # WiFi -# BR2_PACKAGE_WIRELESS_TOOLS is not set -# BR2_PACKAGE_WPA_SUPPLICANT is not set -# BR2_PACKAGE_WPA_SUPPLICANT_CLI is not set -# BR2_PACKAGE_WPA_SUPPLICANT_NL80211 is not set -# BR2_PACKAGE_WPA_SUPPLICANT_PASSPHRASE is not set -# BR2_PACKAGE_LINUX_FIRMWARE_OPENIPC is not set -# BR2_PACKAGE_LINUX_FIRMWARE_OPENIPC_MT7601U is not set +BR2_PACKAGE_WIRELESS_TOOLS=y +BR2_PACKAGE_WPA_SUPPLICANT=y +BR2_PACKAGE_WPA_SUPPLICANT_CLI=y +BR2_PACKAGE_WPA_SUPPLICANT_NL80211=y +BR2_PACKAGE_WPA_SUPPLICANT_PASSPHRASE=y +BR2_PACKAGE_LINUX_FIRMWARE_OPENIPC=y +BR2_PACKAGE_LINUX_FIRMWARE_OPENIPC_MEDIATEK_MT7601U=y # BR2_PACKAGE_RTL8188EU is not set # WIREGUARD BR2_PACKAGE_WIREGUARD_LINUX_COMPAT=y BR2_PACKAGE_WIREGUARD_TOOLS=y -# DEBUG -BR2_PACKAGE_HOST_GDB=y -BR2_PACKAGE_GDB=y +# MQTT +BR2_PACKAGE_MOSQUITTO=y +# BR2_PACKAGE_MOSQUITTO_BROKER is not set +# DEBUG +# BR2_PACKAGE_HOST_GDB is not set +# BR2_PACKAGE_GDB is not set + +# Compression BR2_PACKAGE_ZLIB=y # BARESIP @@ -108,3 +121,13 @@ BR2_PACKAGE_BARESIP_OPENIPC=y BR2_PACKAGE_LIBRE_OPENIPC=y BR2_PACKAGE_LIBREM_OPENIPC=y WEBRTC_AUDIO_PROCESSING=y + +# External +BR2_TOOLCHAIN_EXTERNAL=y +BR2_TOOLCHAIN_EXTERNAL_CUSTOM=y +BR2_TOOLCHAIN_EXTERNAL_CUSTOM_MUSL=y +BR2_TOOLCHAIN_EXTERNAL_CUSTOM_PREFIX="arm-openipc-linux-musleabi" +BR2_TOOLCHAIN_EXTERNAL_CXX=y +BR2_TOOLCHAIN_EXTERNAL_DOWNLOAD=y +BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_9=y +BR2_TOOLCHAIN_EXTERNAL_URL="https://github.com/openipc/firmware/releases/download/$(OPENIPC_TOOLCHAIN).tgz" diff --git a/projects/gk7205v200_ultimate_baresip/building.sh b/projects/gk7205v200_ultimate_baresip/building.sh new file mode 100755 index 0000000..9ea4bec --- /dev/null +++ b/projects/gk7205v200_ultimate_baresip/building.sh @@ -0,0 +1,271 @@ +#!/bin/bash +# +# OpenIPC.org (c) +# + +# +# Constants +# + +MAX_KERNEL_SIZE=0x200000 # 2MiB, 2097152 +MAX_KERNEL_SIZE_ULTIMATE=0x300000 # 3MiB, 3145728 +MAX_KERNEL_SIZE_EXPERIMENTAL=0x3E8480 # ~3.9MiB, 4097152 +MAX_ROOTFS_SIZE=0x500000 # 5MiB, 5242880 +MAX_ROOTFS_SIZE_ULTIMATE=0xA00000 # 10MiB, 10485760 + +_d=$(date +"%y.%m.%d") +OPENIPC_VER=$(echo OpenIPC v${_d:0:1}.${_d:1}) +unset _d + +SRC_CACHE_DIR="/tmp/buildroot_dl" +LOCK_FILE="$(pwd)/openipc.lock" + +# +# Functions +# + +echo_c() { + # 30 grey, 31 red, 32 green, 33 yellow, 34 blue, 35 magenta, 36 cyan,37 white + echo -e "\e[1;$1m$2\e[0m" +} + +check_or_set_lock() { + if [ -f "$LOCK_FILE" ] && ps -ax | grep "^\s*\b$(cat "$LOCK_FILE")\b" >/dev/null; then + echo_c 31 "Another instance running with PID $(cat "$LOCK_FILE")." + exit 1 + fi + + echo_c 32 "Starting OpenIPC builder." + echo $$ >$LOCK_FILE +} + +build_list_of_projects() { + FUNCS=() + AVAILABLE_PROJECTS=$(find br-ext-chip-*/configs/* -name "*_defconfig") + local p + for p in $AVAILABLE_PROJECTS; do + p=${p##*/}; p=${p//_defconfig/} + FUNCS+=($p) + done +} + +select_project() { + if [ $# -eq 0 ]; then + if [ -n "$(command -v fzf)" ]; then + local entries=$(echo $AVAILABLE_PROJECTS | sed "s/ /\n/g" | fzf) + [ -z "$entries" ] && echo_c 31 "Cancelled." && drop_lock_and_exit + BOARD=$(echo $entries | cut -d / -f 3 | awk -F_ '{printf "%s_%s", $1, $2}') + elif [ -n "$(command -v whiptail)" ]; then + local cmd="whiptail --title \"Available projects\" --menu \"Please select a project from the list:\" --notags 20 76 12" + local entry + for entry in $AVAILABLE_PROJECTS; do + local project=${entry##*/}; project=${project//_defconfig/} + local vendor=${entry%%/*}; vendor=${vendor##*-} + local flavor=${project##*_} + local chip=${project%%_*} + cmd="${cmd} \"${project}\" \"${vendor^} ${chip^^} ${flavor}\"" + done + BOARD=$(eval "${cmd} 3>&1 1>&2 2>&3") + [ $? != 0 ] && echo_c 31 "Cancelled." && drop_lock_and_exit + else + echo -ne "Usage: $0 \nVariants:" + local i + for i in "${FUNCS[@]}"; do echo -n " ${i}"; done + echo + drop_lock_and_exit + fi + else + BOARD=$1 + fi +} + +drop_lock_and_exit() { + [ -f "$LOCK_FILE" ] && rm $LOCK_FILE + exit 0 +} + +log_and_run() { + local command=$1 + echo_c 35 "$command" + $command +} + +clone() { + sudo apt-get update -y + sudo apt-get install -y automake make wget cpio file autotools-dev bc build-essential curl fzf git libtool rsync unzip libncurses-dev lzop + git clone --depth=1 https://github.com/OpenIPC/firmware.git +} + +fresh() { + BR_VER=$1 + + if [ -d "$SRC_CACHE_DIR" ]; then + echo_c 36 "Found cache directory." + else + echo_c 31 "Cache directory not found." + echo_c 34 "Creating cache directory ..." + log_and_run "mkdir -p ${SRC_CACHE_DIR}" + echo_c 34 "Done.\n" + fi + + if [ -d "buildroot-${BR_VER}" ]; then + echo_c 36 "Found existing Buildroot directory." + + if [ -d "buildroot-${BR_VER}/dl" ]; then + echo_c 36 "Found existing Buildroot downloads directory." + echo_c 34 "Copying Buildroot downloads to cache directory ..." + log_and_run "cp -rvf buildroot-${BR_VER}/dl/* ${SRC_CACHE_DIR}" + echo_c 34 "Done.\n" + fi + + echo_c 34 "Cleaning source directory." + echo_c 35 "make distclean" + make distclean + echo_c 34 "Done.\n" + else + echo_c 31 "Buildroot sources not found." + fi + + echo_c 34 "Downloading Buildroot sources to cache directory ..." + log_and_run "curl --continue-at - --output ${SRC_CACHE_DIR}/buildroot-${BR_VER}.tar.gz https://buildroot.org/downloads/buildroot-${BR_VER}.tar.gz" + echo_c 34 "Done.\n" + + echo_c 34 "Extracting a fresh copy of Buildroot from Buildroot sources ..." + log_and_run "tar xvf ${SRC_CACHE_DIR}/buildroot-${BR_VER}.tar.gz" + echo_c 34 "Done.\n" + + echo_c 34 "Copying cached source files back to Buildroot ..." + log_and_run "mkdir -p buildroot-${BR_VER}/dl/" + log_and_run "cp -rvf ${SRC_CACHE_DIR}/* buildroot-${BR_VER}/dl/" + echo_c 34 "Done.\n" + + # prevent to double download buildroot + # make prepare + + echo_c 33 "Start building OpenIPC Firmware ${OPENIPC_VER} for ${SOC}." + echo "The start-stop times" >/tmp/openipc_buildtime.txt + date >>/tmp/openipc_buildtime.txt +} + +should_fit() { + local filename=$1 + local maxsize=$2 + local filesize=$(stat --printf="%s" ./output/images/$filename) + if [[ $filesize -gt $maxsize ]]; then + export TG_NOTIFY="Warning: $filename is too large: $filesize vs $maxsize" + echo_c 31 "Warning: $filename is too large: $filesize vs $maxsize" + exit 1 + fi +} + +rename() { + if grep -q ultimate_defconfig ./output/.config || grep -q ultimate_baresip_defconfig ./output/.config || grep -q sdcard_defconfig ./output/.config; then + should_fit uImage $MAX_KERNEL_SIZE_ULTIMATE + should_fit rootfs.squashfs $MAX_ROOTFS_SIZE_ULTIMATE + else + should_fit uImage $MAX_KERNEL_SIZE + should_fit rootfs.squashfs $MAX_ROOTFS_SIZE + fi + mv -v ./output/images/uImage ./output/images/uImage.${SOC} + mv -v ./output/images/rootfs.squashfs ./output/images/rootfs.squashfs.${SOC} + mv -v ./output/images/rootfs.cpio ./output/images/rootfs.${SOC}.cpio + mv -v ./output/images/rootfs.tar ./output/images/rootfs.${SOC}.tar + date >>/tmp/openipc_buildtime.txt + echo_c 31 "\n\n$(cat /tmp/openipc_buildtime.txt)\n\n" +} + +rename_initramfs() { + should_fit uImage $MAX_KERNEL_SIZE_EXPERIMENTAL + mv -v ./output/images/uImage ./output/images/uImage.initramfs.${SOC} + mv -v ./output/images/rootfs.cpio ./output/images/rootfs.${SOC}.cpio + mv -v ./output/images/rootfs.tar ./output/images/rootfs.${SOC}.tar + date >>/tmp/openipc_buildtime.txt + echo_c 31 "\n\n$(cat /tmp/openipc_buildtime.txt)\n\n" +} + +autoup_rootfs() { + echo_c 34 "\nDownloading u-boot created by OpenIPC" + curl --location --output ./output/images/u-boot-${SOC}-universal.bin \ + https://github.com/OpenIPC/firmware/releases/download/latest/u-boot-${SOC}-universal.bin + + echo_c 34 "\nMaking autoupdate u-boot image" + ./output/host/bin/mkimage -A arm -O linux -T firmware -n "$OPENIPC_VER" \ + -a 0x0 -e 0x50000 -d ./output/images/u-boot-${SOC}-universal.bin \ + ./output/images/autoupdate-uboot.img + + echo_c 34 "\nMaking autoupdate kernel image" + ./output/host/bin/mkimage -A arm -O linux -T kernel -C none -n "$OPENIPC_VER" \ + -a 0x50000 -e 0x250000 -d ./output/images/uImage.${SOC} \ + ./output/images/autoupdate-kernel.img + + echo_c 34 "\nMaking autoupdate rootfs image" + ./output/host/bin/mkimage -A arm -O linux -T filesystem -n "$OPENIPC_VER" \ + -a 0x250000 -e 0x750000 -d ./output/images/rootfs.squashfs.${SOC} \ + ./output/images/autoupdate-rootfs.img +} + +copy_function() { + test -n "$(declare -f "$1")" || return + eval "${_/$1/$2}" +} + +uni_build() { + [ -z "$BOARD" ] && BOARD=$FUNCNAME + + SOC=$(echo $BOARD | cut -d '_' -f 1) + + set -e + if [ "$(echo $BOARD | cut -sd '_' -f 2)" == "" ]; then + BOARD="${BOARD}_lite" + fi + + if [ "$BOARD" == "hi3518ev200_lite" ]; then + NEED_AUTOUP=1 + fi + + echo_c 33 "\n SoC: $SOC\nBoard: $BOARD\n" + + if [ "all" = "${COMMAND}" ]; then + fresh $(make BOARD=${BOARD} buildroot-version) + fi + + log_and_run "make BOARD=${BOARD} ${COMMAND}" + + if [ "all" == "${COMMAND}" ]; then + if [ "ssc335_initramfs" == "$BOARD" ]; then + rename_initramfs + else + rename + fi + + if [ ! -z "$NEED_AUTOUP" ]; then + autoup_rootfs + fi + fi +} + +####### + +check_or_set_lock + +build_list_of_projects + +if [ -n "$1" ]; then + BOARD=$1 +else + select_project +fi + +[ -z "$BOARD" ] && echo_c 31 "Nothing selected." && drop_lock_and_exit + +COMMAND=$2 +[ -z "$COMMAND" ] && COMMAND=all + +for i in "${FUNCS[@]}"; do + copy_function uni_build $i +done + +echo_c 37 "Building OpenIPC for ${BOARD}" +uni_build $BOARD $COMMAND + +drop_lock_and_exit diff --git a/projects/gk7205v200_lite_baresip/general/overlay/etc/composer.ini b/projects/gk7205v200_ultimate_baresip/general/overlay/etc/composer.ini similarity index 100% rename from projects/gk7205v200_lite_baresip/general/overlay/etc/composer.ini rename to projects/gk7205v200_ultimate_baresip/general/overlay/etc/composer.ini