From 0a5687ded8bedf483a0d49d0ce3b66318ccbdf34 Mon Sep 17 00:00:00 2001 From: cronyx Date: Fri, 31 Mar 2023 23:05:05 +0300 Subject: [PATCH] some fixes and improvements --- .github/workflows/matrix_build.yml | 10 +- .../configs/gk7205v200_fpv_defconfig | 2 +- .../configs/gk7205v200_lte_defconfig | 118 ++++++++++++++++++ .../configs/gk7205v300_fpv_defconfig | 5 +- .../configs/gk7205v300_lte_defconfig | 118 ++++++++++++++++++ .../configs/hi3516ev200_fpv_defconfig | 2 +- .../configs/hi3516ev200_lte_defconfig | 118 ++++++++++++++++++ .../configs/hi3516ev300_fpv_defconfig | 5 +- .../configs/hi3516ev300_lte_defconfig | 118 ++++++++++++++++++ building.sh | 2 +- general/overlay/etc/profile | 10 -- general/overlay/usr/sbin/extutils | 22 +++- general/overlay/usr/sbin/ipctool | 1 + general/package/datalink/files/S98datalink | 6 +- general/package/datalink/files/datalink.conf | 3 +- general/package/datalink/files/telemetry | 6 +- general/package/datalink/files/tweaksys | 38 +++--- general/package/majestic/majestic.mk | 4 + general/package/mavfwd/Config.in | 4 +- general/package/mavfwd/mavfwd.mk | 6 +- .../wifibroadcast/files/htc_9271-1.4.0.fw | Bin 0 -> 51008 bytes .../package/wifibroadcast/wifibroadcast.mk | 3 + scripts/executing_commands_for_musl.sh | 3 + scripts/executing_commands_for_uclibc.sh | 9 +- 24 files changed, 554 insertions(+), 59 deletions(-) create mode 100644 br-ext-chip-goke/configs/gk7205v200_lte_defconfig create mode 100644 br-ext-chip-goke/configs/gk7205v300_lte_defconfig create mode 100644 br-ext-chip-hisilicon/configs/hi3516ev200_lte_defconfig create mode 100644 br-ext-chip-hisilicon/configs/hi3516ev300_lte_defconfig create mode 120000 general/overlay/usr/sbin/ipctool create mode 100644 general/package/wifibroadcast/files/htc_9271-1.4.0.fw diff --git a/.github/workflows/matrix_build.yml b/.github/workflows/matrix_build.yml index f7cf9f68..348f801f 100644 --- a/.github/workflows/matrix_build.yml +++ b/.github/workflows/matrix_build.yml @@ -209,6 +209,14 @@ jobs: release: fpv - platform: gk7205v300 release: fpv + - platform: hi3516ev200 + release: lte + - platform: hi3516ev300 + release: lte + - platform: gk7205v200 + release: lte + - platform: gk7205v300 + release: lte # Original SDK test - platform: gk7205v200 @@ -478,7 +486,7 @@ jobs: esac case ${{ matrix.release }} in - lite|fpv) + lite|fpv|lte) check_exceeded uImage ${MAX_KERNEL_SIZE} check_exceeded rootfs.squashfs ${MAX_ROOTFS_SIZE} ;; diff --git a/br-ext-chip-goke/configs/gk7205v200_fpv_defconfig b/br-ext-chip-goke/configs/gk7205v200_fpv_defconfig index c3900ecc..7154797a 100644 --- a/br-ext-chip-goke/configs/gk7205v200_fpv_defconfig +++ b/br-ext-chip-goke/configs/gk7205v200_fpv_defconfig @@ -91,7 +91,7 @@ BR2_PACKAGE_WIRELESS_TOOLS=y BR2_PACKAGE_LINUX_FIRMWARE_OPENIPC=y # BR2_PACKAGE_LINUX_FIRMWARE_OPENIPC_MT7601U is not set # BR2_PACKAGE_RTL8188EU is not set -BR2_PACKAGE_LINUX_FIRMWARE_OPENIPC_ATHEROS_9271=y +# BR2_PACKAGE_LINUX_FIRMWARE_OPENIPC_ATHEROS_9271 is not set BR2_PACKAGE_RTL8812AU_OPENIPC=y # WIREGUARD diff --git a/br-ext-chip-goke/configs/gk7205v200_lte_defconfig b/br-ext-chip-goke/configs/gk7205v200_lte_defconfig new file mode 100644 index 00000000..de2f648e --- /dev/null +++ b/br-ext-chip-goke/configs/gk7205v200_lte_defconfig @@ -0,0 +1,118 @@ +# Architecture +BR2_arm=y +BR2_cortex_a7=y +BR2_ARM_EABI=y +BR2_ARM_FPU_NEON_VFPV4=y +BR2_ARM_INSTRUCTIONS_THUMB2=y +BR2_KERNEL_HEADERS_VERSION=y +BR2_DEFAULT_KERNEL_VERSION="4.9.37" +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_9=y + +# Toolchain +BR2_PER_PACKAGE_DIRECTORIES=y +BR2_GCC_VERSION_8_X=y +# BR2_TOOLCHAIN_USES_UCLIBC is not set +# BR2_TOOLCHAIN_BUILDROOT_UCLIBC is not set +# BR2_TOOLCHAIN_BUILDROOT_LIBC="uclibc" +BR2_TOOLCHAIN_USES_MUSL=y +BR2_TOOLCHAIN_BUILDROOT_MUSL=y +BR2_TOOLCHAIN_BUILDROOT_LIBC="musl" +BR2_TOOLCHAIN_BUILDROOT_CXX=y +BR2_TOOLCHAIN_BUILDROOT_LOCALE=y +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_USE_CUSTOM_CONFIG=y +BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="$(BR2_EXTERNAL_GOKE_PATH)/board/gk7205v200/kernel/gk7205v200.generic-fpv.config" +BR2_LINUX_KERNEL_UIMAGE=y +BR2_LINUX_KERNEL_XZ=y +BR2_LINUX_KERNEL_EXT_GOKE_PATCHER=y +BR2_LINUX_KERNEL_EXT_GOKE_PATCHER_LIST="$(BR2_EXTERNAL_GOKE_PATH)/board/gk7205v200/kernel/patches/ $(BR2_EXTERNAL_GOKE_PATH)/board/gk7205v200/kernel/overlay" + +# 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="$(TOPDIR)/../general/overlay" +BR2_ROOTFS_POST_BUILD_SCRIPT="$(TOPDIR)/../scripts/executing_commands_for_$(BR2_TOOLCHAIN_BUILDROOT_LIBC).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="$(TOPDIR)/../general/package/all-patches" + +# OpenIPC packages +BR2_PACKAGE_BUSYBOX_CONFIG="$(TOPDIR)/../general/package/busybox/busybox.config" +BR2_PACKAGE_DROPBEAR_OPENIPC=y +# BR2_PACKAGE_FDK_AAC_OPENIPC is not set +BR2_PACKAGE_FWPRINTENV_OPENIPC=y +BR2_PACKAGE_GOKE_OSDRV_GK7205V200=y +BR2_PACKAGE_HISILICON_OPENSDK=y +# BR2_PACKAGE_HASERL is not set +# BR2_PACKAGE_HISI_GPIO is not set +BR2_PACKAGE_IPCTOOL=y +BR2_PACKAGE_JSON_C=y +# BR2_PACKAGE_JSONFILTER is not set +BR2_PACKAGE_LIBCURL_OPENIPC=y +BR2_PACKAGE_LIBCURL_OPENIPC_CURL=y +# BR2_PACKAGE_LIBCURL_OPENIPC_VERBOSE is not set +# BR2_PACKAGE_LIBCURL_OPENIPC_PROXY_SUPPORT is not set +# BR2_PACKAGE_LIBCURL_OPENIPC_COOKIES_SUPPORT is not set +# BR2_PACKAGE_LIBCURL_OPENIPC_EXTRA_PROTOCOLS_FEATURES is not set +BR2_PACKAGE_LIBCURL_OPENIPC_MBEDTLS=y +BR2_PACKAGE_LIBEVENT_OPENIPC=y +BR2_PACKAGE_LIBEVENT_OPENIPC_REMOVE_PYSCRIPT=y +BR2_PACKAGE_LIBYAML=y +# BR2_PACKAGE_MAJESTIC_FONTS is not set +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 +# BR2_PACKAGE_MICROBE_WEB is not set +# BR2_PACKAGE_MINI_SNMPD is not set +# BR2_PACKAGE_MOTORS is not set +# BR2_PACKAGE_SSHPASS is not set +BR2_PACKAGE_VTUND_OPENIPC=y +BR2_PACKAGE_YAML_CLI=y +# BR2_PACKAGE_QUIRC_OPENIPC is not set + +# WiFi +BR2_PACKAGE_WIRELESS_TOOLS=y +# BR2_PACKAGE_WIRELESS_REGDB 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=y +# BR2_PACKAGE_LINUX_FIRMWARE_OPENIPC_MT7601U is not set +# BR2_PACKAGE_RTL8188EU is not set +# BR2_PACKAGE_LINUX_FIRMWARE_OPENIPC_ATHEROS_9271 is not set +# BR2_PACKAGE_RTL8812AU_OPENIPC is not set + +# WIREGUARD +# BR2_PACKAGE_WIREGUARD_LINUX_COMPAT is not set +# BR2_PACKAGE_WIREGUARD_TOOLS is not set + +# FPV +BR2_PACKAGE_DATALINK=y +BR2_PACKAGE_MAVLINK_ROUTER=y +BR2_PACKAGE_MAVFWD=y + +# ZEROTIER +BR2_PACKAGE_ZEROTIER_ONE=y + +# DEBUG +BR2_PACKAGE_HOST_GDB=y +BR2_PACKAGE_GDB=y + +# Compression and decompression +BR2_PACKAGE_LIBZIP=y + +# USB +# BR2_PACKAGE_USB_MODESWITCH is not set +# BR2_PACKAGE_USB_MODESWITCH_DATA is not set diff --git a/br-ext-chip-goke/configs/gk7205v300_fpv_defconfig b/br-ext-chip-goke/configs/gk7205v300_fpv_defconfig index 320c142a..c6a0da45 100644 --- a/br-ext-chip-goke/configs/gk7205v300_fpv_defconfig +++ b/br-ext-chip-goke/configs/gk7205v300_fpv_defconfig @@ -91,7 +91,7 @@ BR2_PACKAGE_WIRELESS_TOOLS=y BR2_PACKAGE_LINUX_FIRMWARE_OPENIPC=y # BR2_PACKAGE_LINUX_FIRMWARE_OPENIPC_MT7601U is not set # BR2_PACKAGE_RTL8188EU is not set -BR2_PACKAGE_LINUX_FIRMWARE_OPENIPC_ATHEROS_9271=y +# BR2_PACKAGE_LINUX_FIRMWARE_OPENIPC_ATHEROS_9271 is not set BR2_PACKAGE_RTL8812AU_OPENIPC=y # WIREGUARD @@ -104,9 +104,6 @@ BR2_PACKAGE_WIFIBROADCAST=y BR2_PACKAGE_MAVLINK_ROUTER=y BR2_PACKAGE_MAVFWD=y -# ZEROTIER -# BR2_PACKAGE_ZEROTIER_ONE is not set - # DEBUG BR2_PACKAGE_HOST_GDB=y BR2_PACKAGE_GDB=y diff --git a/br-ext-chip-goke/configs/gk7205v300_lte_defconfig b/br-ext-chip-goke/configs/gk7205v300_lte_defconfig new file mode 100644 index 00000000..27bf9bfe --- /dev/null +++ b/br-ext-chip-goke/configs/gk7205v300_lte_defconfig @@ -0,0 +1,118 @@ +# Architecture +BR2_arm=y +BR2_cortex_a7=y +BR2_ARM_EABI=y +BR2_ARM_FPU_NEON_VFPV4=y +BR2_ARM_INSTRUCTIONS_THUMB2=y +BR2_KERNEL_HEADERS_VERSION=y +BR2_DEFAULT_KERNEL_VERSION="4.9.37" +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_9=y + +# Toolchain +BR2_PER_PACKAGE_DIRECTORIES=y +BR2_GCC_VERSION_8_X=y +# BR2_TOOLCHAIN_USES_UCLIBC is not set +# BR2_TOOLCHAIN_BUILDROOT_UCLIBC is not set +# BR2_TOOLCHAIN_BUILDROOT_LIBC="uclibc" +BR2_TOOLCHAIN_USES_MUSL=y +BR2_TOOLCHAIN_BUILDROOT_MUSL=y +BR2_TOOLCHAIN_BUILDROOT_LIBC="musl" +BR2_TOOLCHAIN_BUILDROOT_CXX=y +BR2_TOOLCHAIN_BUILDROOT_LOCALE=y +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_USE_CUSTOM_CONFIG=y +BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="$(BR2_EXTERNAL_GOKE_PATH)/board/gk7205v200/kernel/gk7205v300.generic-fpv.config" +BR2_LINUX_KERNEL_UIMAGE=y +BR2_LINUX_KERNEL_XZ=y +BR2_LINUX_KERNEL_EXT_GOKE_PATCHER=y +BR2_LINUX_KERNEL_EXT_GOKE_PATCHER_LIST="$(BR2_EXTERNAL_GOKE_PATH)/board/gk7205v200/kernel/patches/ $(BR2_EXTERNAL_GOKE_PATH)/board/gk7205v200/kernel/overlay" + +# 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="$(TOPDIR)/../general/overlay" +BR2_ROOTFS_POST_BUILD_SCRIPT="$(TOPDIR)/../scripts/executing_commands_for_$(BR2_TOOLCHAIN_BUILDROOT_LIBC).sh" + +# OpenIPC configuration +BR2_TOOLCHAIN_BUILDROOT_VENDOR="openipc" +BR2_TARGET_GENERIC_ISSUE="Welcome to OpenIPC" +BR2_TARGET_GENERIC_HOSTNAME="openipc-gk7205v300" +BR2_GLOBAL_PATCH_DIR="$(TOPDIR)/../general/package/all-patches" + +# OpenIPC packages +BR2_PACKAGE_BUSYBOX_CONFIG="$(TOPDIR)/../general/package/busybox/busybox.config" +BR2_PACKAGE_DROPBEAR_OPENIPC=y +# BR2_PACKAGE_FDK_AAC_OPENIPC is not set +BR2_PACKAGE_FWPRINTENV_OPENIPC=y +BR2_PACKAGE_GOKE_OSDRV_GK7205V200=y +BR2_PACKAGE_HISILICON_OPENSDK=y +# BR2_PACKAGE_HASERL is not set +# BR2_PACKAGE_HISI_GPIO is not set +BR2_PACKAGE_IPCTOOL=y +BR2_PACKAGE_JSON_C=y +# BR2_PACKAGE_JSONFILTER is not set +BR2_PACKAGE_LIBCURL_OPENIPC=y +BR2_PACKAGE_LIBCURL_OPENIPC_CURL=y +# BR2_PACKAGE_LIBCURL_OPENIPC_VERBOSE is not set +# BR2_PACKAGE_LIBCURL_OPENIPC_PROXY_SUPPORT is not set +# BR2_PACKAGE_LIBCURL_OPENIPC_COOKIES_SUPPORT is not set +# BR2_PACKAGE_LIBCURL_OPENIPC_EXTRA_PROTOCOLS_FEATURES is not set +BR2_PACKAGE_LIBCURL_OPENIPC_MBEDTLS=y +BR2_PACKAGE_LIBEVENT_OPENIPC=y +BR2_PACKAGE_LIBEVENT_OPENIPC_REMOVE_PYSCRIPT=y +BR2_PACKAGE_LIBYAML=y +# BR2_PACKAGE_MAJESTIC_FONTS is not set +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 +# BR2_PACKAGE_MICROBE_WEB is not set +# BR2_PACKAGE_MINI_SNMPD is not set +# BR2_PACKAGE_MOTORS is not set +# BR2_PACKAGE_SSHPASS is not set +BR2_PACKAGE_VTUND_OPENIPC=y +BR2_PACKAGE_YAML_CLI=y +# BR2_PACKAGE_QUIRC_OPENIPC is not set + +# WiFi +BR2_PACKAGE_WIRELESS_TOOLS=y +# BR2_PACKAGE_WIRELESS_REGDB 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=y +# BR2_PACKAGE_LINUX_FIRMWARE_OPENIPC_MT7601U is not set +# BR2_PACKAGE_RTL8188EU is not set +# BR2_PACKAGE_LINUX_FIRMWARE_OPENIPC_ATHEROS_9271 is not set +# BR2_PACKAGE_RTL8812AU_OPENIPC is not set + +# WIREGUARD +# BR2_PACKAGE_WIREGUARD_LINUX_COMPAT is not set +# BR2_PACKAGE_WIREGUARD_TOOLS is not set + +# FPV +BR2_PACKAGE_DATALINK=y +BR2_PACKAGE_MAVLINK_ROUTER=y +BR2_PACKAGE_MAVFWD=y + +# ZEROTIER +BR2_PACKAGE_ZEROTIER_ONE=y + +# DEBUG +BR2_PACKAGE_HOST_GDB=y +BR2_PACKAGE_GDB=y + +# Compression and decompression +BR2_PACKAGE_LIBZIP=y + +# USB +# BR2_PACKAGE_USB_MODESWITCH is not set +# BR2_PACKAGE_USB_MODESWITCH_DATA is not set diff --git a/br-ext-chip-hisilicon/configs/hi3516ev200_fpv_defconfig b/br-ext-chip-hisilicon/configs/hi3516ev200_fpv_defconfig index 20353d57..7a3589be 100644 --- a/br-ext-chip-hisilicon/configs/hi3516ev200_fpv_defconfig +++ b/br-ext-chip-hisilicon/configs/hi3516ev200_fpv_defconfig @@ -91,7 +91,7 @@ BR2_PACKAGE_WIRELESS_TOOLS=y BR2_PACKAGE_LINUX_FIRMWARE_OPENIPC=y # BR2_PACKAGE_LINUX_FIRMWARE_OPENIPC_MT7601U is not set # BR2_PACKAGE_RTL8188EU is not set -BR2_PACKAGE_LINUX_FIRMWARE_OPENIPC_ATHEROS_9271=y +# BR2_PACKAGE_LINUX_FIRMWARE_OPENIPC_ATHEROS_9271 is not set BR2_PACKAGE_RTL8812AU_OPENIPC=y # WIREGUARD diff --git a/br-ext-chip-hisilicon/configs/hi3516ev200_lte_defconfig b/br-ext-chip-hisilicon/configs/hi3516ev200_lte_defconfig new file mode 100644 index 00000000..92640935 --- /dev/null +++ b/br-ext-chip-hisilicon/configs/hi3516ev200_lte_defconfig @@ -0,0 +1,118 @@ +# Architecture +BR2_arm=y +BR2_cortex_a7=y +BR2_ARM_EABI=y +BR2_ARM_FPU_NEON_VFPV4=y +BR2_ARM_INSTRUCTIONS_THUMB2=y +BR2_KERNEL_HEADERS_VERSION=y +BR2_DEFAULT_KERNEL_VERSION="4.9.37" +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_9=y + +# Toolchain +BR2_PER_PACKAGE_DIRECTORIES=y +BR2_GCC_VERSION_8_X=y +# BR2_TOOLCHAIN_USES_UCLIBC is not set +# BR2_TOOLCHAIN_BUILDROOT_UCLIBC is not set +# BR2_TOOLCHAIN_BUILDROOT_LIBC="uclibc" +BR2_TOOLCHAIN_USES_MUSL=y +BR2_TOOLCHAIN_BUILDROOT_MUSL=y +BR2_TOOLCHAIN_BUILDROOT_LIBC="musl" +BR2_TOOLCHAIN_BUILDROOT_CXX=y +BR2_TOOLCHAIN_BUILDROOT_LOCALE=y +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_USE_CUSTOM_CONFIG=y +BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="$(BR2_EXTERNAL_HISILICON_PATH)/board/hi3516ev200/kernel/hi3516ev200.generic-fpv.config" +BR2_LINUX_KERNEL_UIMAGE=y +BR2_LINUX_KERNEL_XZ=y +BR2_LINUX_KERNEL_EXT_HISI_PATCHER=y +BR2_LINUX_KERNEL_EXT_HISI_PATCHER_LIST="$(BR2_EXTERNAL_HISILICON_PATH)/board/hi3516ev200/kernel/patches/ $(BR2_EXTERNAL_HISILICON_PATH)/board/hi3516ev200/kernel/overlay" + +# 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="$(TOPDIR)/../general/overlay" +BR2_ROOTFS_POST_BUILD_SCRIPT="$(TOPDIR)/../scripts/executing_commands_for_$(BR2_TOOLCHAIN_BUILDROOT_LIBC).sh" + +# OpenIPC configuration +BR2_TOOLCHAIN_BUILDROOT_VENDOR="openipc" +BR2_TARGET_GENERIC_ISSUE="Welcome to OpenIPC" +BR2_TARGET_GENERIC_HOSTNAME="openipc-hi3516ev200" +BR2_GLOBAL_PATCH_DIR="$(TOPDIR)/../general/package/all-patches" + +# OpenIPC packages +BR2_PACKAGE_BUSYBOX_CONFIG="$(TOPDIR)/../general/package/busybox/busybox.config" +BR2_PACKAGE_DROPBEAR_OPENIPC=y +# BR2_PACKAGE_FDK_AAC_OPENIPC is not set +BR2_PACKAGE_FWPRINTENV_OPENIPC=y +BR2_PACKAGE_HISILICON_OSDRV_HI3516EV200=y +BR2_PACKAGE_HISILICON_OPENSDK=y +# BR2_PACKAGE_HASERL is not set +# BR2_PACKAGE_HISI_GPIO is not set +BR2_PACKAGE_IPCTOOL=y +BR2_PACKAGE_JSON_C=y +# BR2_PACKAGE_JSONFILTER is not set +BR2_PACKAGE_LIBCURL_OPENIPC=y +BR2_PACKAGE_LIBCURL_OPENIPC_CURL=y +# BR2_PACKAGE_LIBCURL_OPENIPC_VERBOSE is not set +# BR2_PACKAGE_LIBCURL_OPENIPC_PROXY_SUPPORT is not set +# BR2_PACKAGE_LIBCURL_OPENIPC_COOKIES_SUPPORT is not set +# BR2_PACKAGE_LIBCURL_OPENIPC_EXTRA_PROTOCOLS_FEATURES is not set +BR2_PACKAGE_LIBCURL_OPENIPC_MBEDTLS=y +BR2_PACKAGE_LIBEVENT_OPENIPC=y +BR2_PACKAGE_LIBEVENT_OPENIPC_REMOVE_PYSCRIPT=y +BR2_PACKAGE_LIBYAML=y +# BR2_PACKAGE_MAJESTIC_FONTS is not set +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 +# BR2_PACKAGE_MICROBE_WEB is not set +# BR2_PACKAGE_MINI_SNMPD is not set +# BR2_PACKAGE_MOTORS is not set +# BR2_PACKAGE_SSHPASS is not set +BR2_PACKAGE_VTUND_OPENIPC=y +BR2_PACKAGE_YAML_CLI=y +# BR2_PACKAGE_QUIRC_OPENIPC is not set + +# WiFi +BR2_PACKAGE_WIRELESS_TOOLS=y +# BR2_PACKAGE_WIRELESS_REGDB 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=y +# BR2_PACKAGE_LINUX_FIRMWARE_OPENIPC_MT7601U is not set +# BR2_PACKAGE_RTL8188EU is not set +# BR2_PACKAGE_LINUX_FIRMWARE_OPENIPC_ATHEROS_9271 is not set +# BR2_PACKAGE_RTL8812AU_OPENIPC is not set + +# WIREGUARD +# BR2_PACKAGE_WIREGUARD_LINUX_COMPAT is not set +# BR2_PACKAGE_WIREGUARD_TOOLS is not set + +# FPV +BR2_PACKAGE_DATALINK=y +BR2_PACKAGE_MAVLINK_ROUTER=y +BR2_PACKAGE_MAVFWD=y + +# ZEROTIER +BR2_PACKAGE_ZEROTIER_ONE=y + +# DEBUG +BR2_PACKAGE_HOST_GDB=y +BR2_PACKAGE_GDB=y + +# Compression and decompression +BR2_PACKAGE_LIBZIP=y + +# USB +# BR2_PACKAGE_USB_MODESWITCH is not set +# BR2_PACKAGE_USB_MODESWITCH_DATA is not set diff --git a/br-ext-chip-hisilicon/configs/hi3516ev300_fpv_defconfig b/br-ext-chip-hisilicon/configs/hi3516ev300_fpv_defconfig index efebb5a6..818f8d99 100644 --- a/br-ext-chip-hisilicon/configs/hi3516ev300_fpv_defconfig +++ b/br-ext-chip-hisilicon/configs/hi3516ev300_fpv_defconfig @@ -91,7 +91,7 @@ BR2_PACKAGE_WIRELESS_TOOLS=y BR2_PACKAGE_LINUX_FIRMWARE_OPENIPC=y # BR2_PACKAGE_LINUX_FIRMWARE_OPENIPC_MT7601U is not set # BR2_PACKAGE_RTL8188EU is not set -BR2_PACKAGE_LINUX_FIRMWARE_OPENIPC_ATHEROS_9271=y +# BR2_PACKAGE_LINUX_FIRMWARE_OPENIPC_ATHEROS_9271 is not set BR2_PACKAGE_RTL8812AU_OPENIPC=y # WIREGUARD @@ -104,9 +104,6 @@ BR2_PACKAGE_WIFIBROADCAST=y BR2_PACKAGE_MAVLINK_ROUTER=y BR2_PACKAGE_MAVFWD=y -# ZEROTIER -# BR2_PACKAGE_ZEROTIER_ONE is not set - # DEBUG BR2_PACKAGE_HOST_GDB=y BR2_PACKAGE_GDB=y diff --git a/br-ext-chip-hisilicon/configs/hi3516ev300_lte_defconfig b/br-ext-chip-hisilicon/configs/hi3516ev300_lte_defconfig new file mode 100644 index 00000000..9652e2bd --- /dev/null +++ b/br-ext-chip-hisilicon/configs/hi3516ev300_lte_defconfig @@ -0,0 +1,118 @@ +# Architecture +BR2_arm=y +BR2_cortex_a7=y +BR2_ARM_EABI=y +BR2_ARM_FPU_NEON_VFPV4=y +BR2_ARM_INSTRUCTIONS_THUMB2=y +BR2_KERNEL_HEADERS_VERSION=y +BR2_DEFAULT_KERNEL_VERSION="4.9.37" +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_9=y + +# Toolchain +BR2_PER_PACKAGE_DIRECTORIES=y +BR2_GCC_VERSION_8_X=y +# BR2_TOOLCHAIN_USES_UCLIBC is not set +# BR2_TOOLCHAIN_BUILDROOT_UCLIBC is not set +# BR2_TOOLCHAIN_BUILDROOT_LIBC="uclibc" +BR2_TOOLCHAIN_USES_MUSL=y +BR2_TOOLCHAIN_BUILDROOT_MUSL=y +BR2_TOOLCHAIN_BUILDROOT_LIBC="musl" +BR2_TOOLCHAIN_BUILDROOT_CXX=y +BR2_TOOLCHAIN_BUILDROOT_LOCALE=y +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_USE_CUSTOM_CONFIG=y +BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="$(BR2_EXTERNAL_HISILICON_PATH)/board/hi3516ev200/kernel/hi3516ev300.generic-fpv.config" +BR2_LINUX_KERNEL_UIMAGE=y +BR2_LINUX_KERNEL_XZ=y +BR2_LINUX_KERNEL_EXT_HISI_PATCHER=y +BR2_LINUX_KERNEL_EXT_HISI_PATCHER_LIST="$(BR2_EXTERNAL_HISILICON_PATH)/board/hi3516ev200/kernel/patches/ $(BR2_EXTERNAL_HISILICON_PATH)/board/hi3516ev200/kernel/overlay" + +# 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="$(TOPDIR)/../general/overlay" +BR2_ROOTFS_POST_BUILD_SCRIPT="$(TOPDIR)/../scripts/executing_commands_for_$(BR2_TOOLCHAIN_BUILDROOT_LIBC).sh" + +# OpenIPC configuration +BR2_TOOLCHAIN_BUILDROOT_VENDOR="openipc" +BR2_TARGET_GENERIC_ISSUE="Welcome to OpenIPC" +BR2_TARGET_GENERIC_HOSTNAME="openipc-hi3516ev300" +BR2_GLOBAL_PATCH_DIR="$(TOPDIR)/../general/package/all-patches" + +# OpenIPC packages +BR2_PACKAGE_BUSYBOX_CONFIG="$(TOPDIR)/../general/package/busybox/busybox.config" +BR2_PACKAGE_DROPBEAR_OPENIPC=y +# BR2_PACKAGE_FDK_AAC_OPENIPC is not set +BR2_PACKAGE_FWPRINTENV_OPENIPC=y +BR2_PACKAGE_HISILICON_OSDRV_HI3516EV200=y +BR2_PACKAGE_HISILICON_OPENSDK=y +# BR2_PACKAGE_HASERL is not set +# BR2_PACKAGE_HISI_GPIO is not set +BR2_PACKAGE_IPCTOOL=y +BR2_PACKAGE_JSON_C=y +# BR2_PACKAGE_JSONFILTER is not set +BR2_PACKAGE_LIBCURL_OPENIPC=y +BR2_PACKAGE_LIBCURL_OPENIPC_CURL=y +# BR2_PACKAGE_LIBCURL_OPENIPC_VERBOSE is not set +# BR2_PACKAGE_LIBCURL_OPENIPC_PROXY_SUPPORT is not set +# BR2_PACKAGE_LIBCURL_OPENIPC_COOKIES_SUPPORT is not set +# BR2_PACKAGE_LIBCURL_OPENIPC_EXTRA_PROTOCOLS_FEATURES is not set +BR2_PACKAGE_LIBCURL_OPENIPC_MBEDTLS=y +BR2_PACKAGE_LIBEVENT_OPENIPC=y +BR2_PACKAGE_LIBEVENT_OPENIPC_REMOVE_PYSCRIPT=y +BR2_PACKAGE_LIBYAML=y +# BR2_PACKAGE_MAJESTIC_FONTS is not set +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 +# BR2_PACKAGE_MICROBE_WEB is not set +# BR2_PACKAGE_MINI_SNMPD is not set +# BR2_PACKAGE_MOTORS is not set +# BR2_PACKAGE_SSHPASS is not set +BR2_PACKAGE_VTUND_OPENIPC=y +BR2_PACKAGE_YAML_CLI=y +# BR2_PACKAGE_QUIRC_OPENIPC is not set + +# WiFi +BR2_PACKAGE_WIRELESS_TOOLS=y +# BR2_PACKAGE_WIRELESS_REGDB 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=y +# BR2_PACKAGE_LINUX_FIRMWARE_OPENIPC_MT7601U is not set +# BR2_PACKAGE_RTL8188EU is not set +# BR2_PACKAGE_LINUX_FIRMWARE_OPENIPC_ATHEROS_9271 is not set +# BR2_PACKAGE_RTL8812AU_OPENIPC is not set + +# WIREGUARD +# BR2_PACKAGE_WIREGUARD_LINUX_COMPAT is not set +# BR2_PACKAGE_WIREGUARD_TOOLS is not set + +# FPV +BR2_PACKAGE_DATALINK=y +BR2_PACKAGE_MAVLINK_ROUTER=y +BR2_PACKAGE_MAVFWD=y + +# ZEROTIER +BR2_PACKAGE_ZEROTIER_ONE=y + +# DEBUG +BR2_PACKAGE_HOST_GDB=y +BR2_PACKAGE_GDB=y + +# Compression and decompression +BR2_PACKAGE_LIBZIP=y + +# USB +# BR2_PACKAGE_USB_MODESWITCH is not set +# BR2_PACKAGE_USB_MODESWITCH_DATA is not set diff --git a/building.sh b/building.sh index a2a9af49..ccafcc3d 100755 --- a/building.sh +++ b/building.sh @@ -159,7 +159,7 @@ should_fit() { } rename() { - if grep -q ultimate_defconfig ./output/.config || grep -q fpv_defconfig ./output/.config || grep -q sdcard_defconfig ./output/.config; then + if grep -q ultimate_defconfig ./output/.config || grep -q fpv_defconfig ./output/.config || grep -q lte_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 diff --git a/general/overlay/etc/profile b/general/overlay/etc/profile index ef5bba22..3d9dc974 100644 --- a/general/overlay/etc/profile +++ b/general/overlay/etc/profile @@ -3,7 +3,6 @@ export HOME=$(grep -e "^${USER:-root}:" /etc/passwd | cut -d ":" -f 6) export HOME=${HOME:-/root} export TZ=$(cat /etc/TZ) export SENSOR=$(fw_printenv -n sensor) -export ARCH=$(uname -m) echo_c() { echo -ne "\e[1;$1m$2\e[0m"; } @@ -20,21 +19,12 @@ if [ "$PS1" ]; then fi fi -if echo $ARCH | grep -q mips; then - export ARC='-mips32' -else - export ARC='' -fi - export EDITOR='/bin/vi' [ -x /usr/bin/arp ] || arp() { cat /proc/net/arp; } differ() { diff -rN "/rom$1" "$1"; } -[ -x /tmp/ipctool ] || ipctool() { [ -x /tmp/ipctool ] && /tmp/ipctool $@ || (curl -s -L -o /tmp/ipctool https://github.com/OpenIPC/ipctool/releases/download/latest/ipctool$ARC && \ - chmod +x /tmp/ipctool && echo_c 35 "The ipctool installed as remote GitHub plugin\n\n" && /tmp/ipctool $@); } - majestic_changes() { diff -L "Majestic changes" -U 3 /rom/etc/majestic.yaml /etc/majestic.yaml; } show_modules() { echo; cat /proc/modules | cut -f 1 -d " " | while read module; do echo "Module: $module"; \ diff --git a/general/overlay/usr/sbin/extutils b/general/overlay/usr/sbin/extutils index a7dcd5b1..d09f0a0f 100755 --- a/general/overlay/usr/sbin/extutils +++ b/general/overlay/usr/sbin/extutils @@ -1,10 +1,26 @@ #!/bin/sh -cmd=`echo $0 | cut -d / -f 4` +CMD=$(echo $0 | cut -d / -f 4) +ARCH=$(uname -m) -case "${cmd}" in +if echo $ARCH | grep -q mips; then + ARC='-mips32' +else + ARC='' +fi + +case "${CMD}" in cli) - yaml-cli -i /etc/majestic.yaml $@; + yaml-cli -i /etc/majestic.yaml $@ + ;; + ipctool) + IPCTOOL=/tmp/ipctool + if [ ! -x $IPCTOOL ]; then + curl -s -L -o $IPCTOOL https://github.com/OpenIPC/ipctool/releases/download/latest/ipctool$ARC + chmod +x $IPCTOOL + echo "The ipctool installed as remote GitHub plugin" + fi + $IPCTOOL $@ ;; *) ;; diff --git a/general/overlay/usr/sbin/ipctool b/general/overlay/usr/sbin/ipctool new file mode 120000 index 00000000..756c71c5 --- /dev/null +++ b/general/overlay/usr/sbin/ipctool @@ -0,0 +1 @@ +extutils \ No newline at end of file diff --git a/general/package/datalink/files/S98datalink b/general/package/datalink/files/S98datalink index 75d287f0..ed0ae9df 100755 --- a/general/package/datalink/files/S98datalink +++ b/general/package/datalink/files/S98datalink @@ -6,7 +6,7 @@ . /etc/datalink.conf chip=$(ipcinfo -c) -cli="yaml-cli -i /etc/majestic.yaml" +fw=$(grep "BUILD_OPTION" "/etc/os-release" | cut -d= -f2) case "$1" in start) @@ -17,10 +17,10 @@ case "$1" in echo "Starting FPV datalink..." - if [ ${transport} = "lte" ]; then + if [ ${fw} = "lte" ]; then if [ ${usb_modem} = "true" ]; then echo "Starting lte modem configuration..." - echo "Running usb_modswitch or other shit here..." + echo "ToDo: Running usb_modeswitch or other shit here..." fi # for the future #cli -s .outgoing.url1 udp://${gs_ipaddr}:${gs_port} diff --git a/general/package/datalink/files/datalink.conf b/general/package/datalink/files/datalink.conf index b687e213..be787bd4 100644 --- a/general/package/datalink/files/datalink.conf +++ b/general/package/datalink/files/datalink.conf @@ -1,11 +1,10 @@ daemon=1 -transport=wfb telemetry=true usb_modem=false gs_ipaddr=127.0.0.1 gs_port=5600 -# firmware for 8Mb flash do not contain zerotier +# zerotier package contain only in the lte or ultimate builds use_zt=false zt_netid= diff --git a/general/package/datalink/files/telemetry b/general/package/datalink/files/telemetry index 75019e92..528a3cc6 100755 --- a/general/package/datalink/files/telemetry +++ b/general/package/datalink/files/telemetry @@ -8,6 +8,8 @@ keydir="/etc" +fw=$(grep "BUILD_OPTION" "/etc/os-release" | cut -d= -f2) + start_telemetry() { if [ ! -f /usr/bin/telemetry_rx -a ! -f /usr/bin/telemetry_tx ]; then ln -s /usr/bin/wfb_rx /usr/bin/telemetry_rx ; chmod +x /usr/bin/telemetry_rx @@ -24,12 +26,12 @@ case "$1" in start) echo "Loading MAVLink telemetry service..." - if [ ${router} -eq 1 ] || [ ${transport} = "lte" ]; then + if [ ${router} -eq 1 ] || [ ${fw} = "lte" ]; then /usr/bin/mavlink-routerd & else mavfwd --master ${serial} --baudrate ${baud} --out 127.0.0.1:${port_tx} --in 127.0.0.1:${port_rx} & fi - if [ ${transport} = "wfb" ]; then + if [ ${fw} = "fpv" ]; then start_telemetry fi echo "Done." diff --git a/general/package/datalink/files/tweaksys b/general/package/datalink/files/tweaksys index 19cc641c..7262d551 100755 --- a/general/package/datalink/files/tweaksys +++ b/general/package/datalink/files/tweaksys @@ -6,8 +6,6 @@ vendor=$(ipcinfo -v) sensor=$(ipcinfo -s) prefix=${family} -cli="yaml-cli -i /etc/majestic.yaml" - all_other() { if [ ${vendor} = "hisilicon" ]; then prefix="open" @@ -30,25 +28,25 @@ all_other() { # disable mavlink routerd autostart sed -i "s!/usr/bin/mavlink-routerd &!#/usr/bin/mavlink-routerd &!g" /etc/init.d/S97mavlink # majestic basic settings - ${cli} -s .isp.slowShutter disabled - ${cli} -s .isp.drc 350 + cli -s .isp.slowShutter disabled + cli -s .isp.drc 350 # enable digital image stabilization - # ${cli} -s .isp.dis true - ${cli} -s .image.contrast 50 - ${cli} -s .image.luminance 50 - ${cli} -s .video0.bitrate 4096 - ${cli} -s .video0.codec h264 - ${cli} -s .video0.rcMode cbr - ${cli} -s .video0.gopSize 0.2 - ${cli} -s .hls.enabled false - ${cli} -s .netip.enabled false - ${cli} -s .jpeg.enabled false + # cli -s .isp.dis true + cli -s .image.contrast 50 + cli -s .image.luminance 50 + cli -s .video0.bitrate 4096 + cli -s .video0.codec h264 + cli -s .video0.rcMode cbr + cli -s .video0.gopSize 0.2 + cli -s .hls.enabled false + cli -s .netip.enabled false + cli -s .jpeg.enabled false # lowdelay support only imx307 sensor if [ ${sensor} = "imx307" ]; then - ${cli} -s .video0.size 1280x720 - # ${cli} -s .video0.fps 30 - ${cli} -s .isp.lowDelay true - # ${cli} -s .video0.sliceUnits 4 + cli -s .video0.size 1280x720 + # cli -s .video0.fps 30 + cli -s .isp.lowDelay true + # cli -s .video0.sliceUnits 4 fi # tune socket buffer cat >> /etc/sysctl.conf << EOF @@ -73,7 +71,7 @@ case "$1" in # set custom config if [ ${chip} = "gk7205v200" ] && [ ${sensor} = "imx307" ]; then echo "switch to custom sensor config" - # ${cli} -s .isp.sensorConfig /etc/sensors/60fps/720p_imx307_i2c_2l.ini + # cli -s .isp.sensorConfig /etc/sensors/60fps/720p_imx307_i2c_2l.ini fi # fix osmem in bootargs @@ -96,7 +94,7 @@ case "$1" in # set sensor config for smtsec board if [ ${chip} = "gk7205v300" ] && [ ${sensor} = "imx307" ]; then - ${cli} -s .isp.sensorConfig /etc/sensors/smtsec_imx307_i2c_4l_1080p.ini + cli -s .isp.sensorConfig /etc/sensors/smtsec_imx307_i2c_4l_1080p.ini fi all_other diff --git a/general/package/majestic/majestic.mk b/general/package/majestic/majestic.mk index a7c0268f..085f9335 100644 --- a/general/package/majestic/majestic.mk +++ b/general/package/majestic/majestic.mk @@ -23,6 +23,10 @@ ifeq ($(RELEASE),ultimate) endif endif +ifeq ($(RELEASE),lte) + RELEASE := fpv +endif + MAJESTIC_SOURCE := majestic.$(FAMILY).$(RELEASE).master.tar.bz2 MAJESTIC_DEPENDENCIES = \ diff --git a/general/package/mavfwd/Config.in b/general/package/mavfwd/Config.in index 2bafaed8..4564958e 100644 --- a/general/package/mavfwd/Config.in +++ b/general/package/mavfwd/Config.in @@ -3,6 +3,6 @@ config BR2_PACKAGE_MAVFWD default n select BR2_PACKAGE_LIBEVENT_OPENIPC help - mavfwd - Cool and awesome tool for FPV + mavfwd - Cool and awesome mavlink forwader for FPV - https://github.com/widgetii/mavfwd + https://github.com/OpenIPC/mavfwd diff --git a/general/package/mavfwd/mavfwd.mk b/general/package/mavfwd/mavfwd.mk index 6303b4e4..5a8ec169 100644 --- a/general/package/mavfwd/mavfwd.mk +++ b/general/package/mavfwd/mavfwd.mk @@ -1,11 +1,11 @@ ################################################################################ # -# mavfwd | updated 2022.11.21 +# mavfwd # ################################################################################ -MAVFWD_VERSION = $(shell git ls-remote https://github.com/widgetii/mavfwd/ master | awk '{ print $$1 }') -MAVFWD_SITE = $(call github,widgetii,mavfwd,$(MAVFWD_VERSION)) +MAVFWD_VERSION = $(shell git ls-remote https://github.com/OpenIPC/mavfwd/ master | awk '{ print $$1 }') +MAVFWD_SITE = $(call github,OpenIPC,mavfwd,$(MAVFWD_VERSION)) MAVFWD_LICENSE = MIT MAVFWD_LICENSE_FILES = LICENSE diff --git a/general/package/wifibroadcast/files/htc_9271-1.4.0.fw b/general/package/wifibroadcast/files/htc_9271-1.4.0.fw new file mode 100644 index 0000000000000000000000000000000000000000..79ae6068c393edb0bf433b93e10588f49fddd09e GIT binary patch literal 51008 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

KoWRy-#KKQ$9v?j{5Kdepgw%uR7k`L*b< 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/usr/lib/os-release date "+GITHUB_VERSION=\"${BRANCH}+${GIT_HASH}, %Y-%m-%d\"" >>${TARGET_DIR}/usr/lib/os-release if grep -q fpv_defconfig ${BR2_CONFIG}; then echo "BUILD_OPTION=fpv" >>${TARGET_DIR}/usr/lib/os-release +elif grep -q lte_defconfig ${BR2_CONFIG}; then + echo "BUILD_OPTION=lte" >>${TARGET_DIR}/usr/lib/os-release elif grep -q ultimate_defconfig ${BR2_CONFIG}; then echo "BUILD_OPTION=ultimate" >>${TARGET_DIR}/usr/lib/os-release else @@ -22,6 +24,7 @@ ln -sfv ../../lib/libc.so ${TARGET_DIR}/usr/bin/ldd if ! grep -q ^BR2_PACKAGE_WIFIBROADCAST=y ${BR2_CONFIG} && \ ! grep -q ^BR2_PACKAGE_LIBV4L=y ${BR2_CONFIG} && \ + ! grep -q ^BR2_PACKAGE_MAVLINK_ROUTER=y ${BR2_CONFIG} && \ ! grep -q ^BR2_PACKAGE_INGENIC_OSDRV_T30=y ${BR2_CONFIG} \ ; then rm -f ${TARGET_DIR}/usr/lib/libstdc++* diff --git a/scripts/executing_commands_for_uclibc.sh b/scripts/executing_commands_for_uclibc.sh index 69ae31ee..e044d0a6 100755 --- a/scripts/executing_commands_for_uclibc.sh +++ b/scripts/executing_commands_for_uclibc.sh @@ -8,6 +8,8 @@ echo "OPENIPC_VERSION=${D:0:1}.${D:1}" >>${TARGET_DIR}/usr/lib/os-release date "+GITHUB_VERSION=\"${BRANCH}+${GIT_HASH}, %Y-%m-%d\"" >>${TARGET_DIR}/usr/lib/os-release if grep -q fpv_defconfig ${BR2_CONFIG}; then echo "BUILD_OPTION=fpv" >>${TARGET_DIR}/usr/lib/os-release +elif grep -q lte_defconfig ${BR2_CONFIG}; then + echo "BUILD_OPTION=lte" >>${TARGET_DIR}/usr/lib/os-release elif grep -q ultimate_defconfig ${BR2_CONFIG}; then echo "BUILD_OPTION=ultimate" >>${TARGET_DIR}/usr/lib/os-release else @@ -17,8 +19,11 @@ fi echo 'Note: BR2_TOOLCHAIN_BUILDROOT_LIBC="uclibc"' # -if ! grep -q ^BR2_PACKAGE_WIFIBROADCAST=y ${BR2_CONFIG}; then - rm -f ${TARGET_DIR}/usr/lib/libstdc++* +if ! grep -q ^BR2_PACKAGE_WIFIBROADCAST=y ${BR2_CONFIG} && \ + ! grep -q ^BR2_PACKAGE_LIBV4L=y ${BR2_CONFIG} && \ + ! grep -q ^BR2_PACKAGE_MAVLINK_ROUTER=y ${BR2_CONFIG} \ +; then + rm -f ${TARGET_DIR}/usr/lib/libstdc++* fi rm -f ${TARGET_DIR}/usr/bin/gdbserver