diff --git a/.github/workflows/hi3516ev200_images.yml b/.github/workflows/hi3516ev200_images.yml new file mode 100644 index 00000000..e1e5436e --- /dev/null +++ b/.github/workflows/hi3516ev200_images.yml @@ -0,0 +1,129 @@ +name: OpenIPC for Hi3516Ev200 + +on: + push: + branches: + - main + tags: + - "v*" + +jobs: + build_core: + name: OpenIPC v2.0 for Hi3516Ev200 + runs-on: ubuntu-18.04 + + steps: + + - name: Checkout + id: checkout + uses: actions/checkout@v2 + + - name: Install build dependencies + id: install + run: | + make install-deps + mkdir -p tmp + + - name: Free disk space + id: freshing + run: | + sudo swapoff -a + sudo rm -f /swapfile + sudo apt clean + docker rmi $(docker image ls -aq) + df -h + + - name: Prepare buildroot + id: prepare + run: | + HEAD_TAG=$(git tag --points-at HEAD) + GIT_HASH=$(git rev-parse --short $GITHUB_SHA) + BRANCH_NAME=$(echo $GITHUB_REF | cut -d'/' -f 3) + if [ -z "$HEAD_TAG" ]; then + TAG_NAME="latest" + RELEASE_NAME="Development Build" + PRERELEASE=true + else + TAG_NAME=${{ github.ref }} + RELEASE_NAME="Release ${{ github.ref }}" + PRERELEASE=false + fi + echo "GIT_HASH=$GIT_HASH" >> $GITHUB_ENV + echo "TAG_NAME=$TAG_NAME" >> $GITHUB_ENV + echo "RELEASE_NAME=$RELEASE_NAME" >> $GITHUB_ENV + echo "PRERELEASE=$PRERELEASE" >> $GITHUB_ENV + echo "BRANCH_NAME=$BRANCH_NAME" >> $GITHUB_ENV + cd $GITHUB_WORKSPACE + make prepare + + - name: Build Hi3516Ev200 firmware + id: build-hi3516ev200-firmware + continue-on-error: true + run: | + ARCHIVE_FW="${GITHUB_WORKSPACE}/output/images/openipc.hi3516ev200-br.tgz" + echo "ARCHIVE_FW=$ARCHIVE_FW" >> $GITHUB_ENV + cd $GITHUB_WORKSPACE + make -j$(($(nproc)+1)) BOARD=unknown_unknown_hi3516ev200_openipc all + tar -C ${GITHUB_WORKSPACE}/output/images -cvzf $ARCHIVE_FW rootfs.squashfs uImage + + - name: Build Hi3516Ev200 SDK + id: build-hi3516ev200-sdk + continue-on-error: true + run: | + ARCHIVE_SDK="${GITHUB_WORKSPACE}/output/images/arm-openipc-linux-musleabi_sdk-buildroot.tar.gz" + echo "ARCHIVE_SDK=$ARCHIVE_SDK" >> $GITHUB_ENV + cd $GITHUB_WORKSPACE/output + make sdk + + - name: Send warning message to telegram channel + env: + TG_TOKEN: ${{ secrets.TELEGRAM_TOKEN_BOT_OPENIPC }} + TG_CHANNEL: ${{ secrets.TELEGRAM_CHANNEL_OPENIPC_DEV }} + if: steps.build-hi3516ev200-firmware.outcome != 'success' || steps.build-hi3516ev200-sdk.outcome != 'success' + run: | + TG_OPTIONS="-s --connect-timeout 5 --max-time 15" + TG_NOTIFY="Warning, Buildroot compiling error..." + TG_HEADER=$(echo -e "\r\n$TG_NOTIFY \r\n\r\nCommit: $GIT_HASH \r\nBranch: $BRANCH_NAME \r\nTag: $TAG_NAME \r\n\r\n\xE2\x9A\xA0 GitHub Actions") + curl $TG_OPTIONS -H "Content-Type: multipart/form-data" -X POST https://api.telegram.org/bot$TG_TOKEN/sendMessage \ + -F chat_id=$TG_CHANNEL -F text="$TG_HEADER" + + - name: Create release + uses: actions/create-release@v1 + continue-on-error: true + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag_name: ${{ env.TAG_NAME }} + release_name: ${{ env.RELEASE_NAME }} + draft: false + prerelease: ${{ env.PRERELEASE }} + + - name: Upload FW to release + uses: svenstaro/upload-release-action@v2 + continue-on-error: true + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + file: ${{ env.ARCHIVE_FW }} + asset_name: "openipc.hi3516ev200-br.tgz" + tag: ${{ env.TAG_NAME }} + overwrite: true + + - name: Upload SDK to release + uses: svenstaro/upload-release-action@v2 + continue-on-error: true + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + file: ${{ env.ARCHIVE_SDK }} + asset_name: "arm-openipc-linux-musleabi_sdk-buildroot.tar.gz" + tag: ${{ env.TAG_NAME }} + overwrite: true + + - name: Send binary file to telegram channel + env: + TG_TOKEN: ${{ secrets.TELEGRAM_TOKEN_BOT_OPENIPC }} + TG_CHANNEL: ${{ secrets.TELEGRAM_CHANNEL_OPENIPC_DEV }} + run: | + TG_OPTIONS="-s --connect-timeout 5 --max-time 15" + TG_HEADER=$(echo -e "\r\nCommit: $GIT_HASH \r\nBranch: $BRANCH_NAME \r\nTag: $TAG_NAME \r\n\r\n\xE2\x9C\x85 GitHub Actions") + curl $TG_OPTIONS -H "Content-Type: multipart/form-data" -X POST https://api.telegram.org/bot$TG_TOKEN/sendDocument \ + -F chat_id=$TG_CHANNEL -F document="@$ARCHIVE_FW" -F caption="$TG_HEADER" diff --git a/.github/workflows/hi3516ev300_images.yml b/.github/workflows/hi3516ev300_images.yml new file mode 100644 index 00000000..debbc84c --- /dev/null +++ b/.github/workflows/hi3516ev300_images.yml @@ -0,0 +1,129 @@ +name: OpenIPC for Hi3516Ev300 + +on: + push: + branches: + - main + tags: + - "v*" + +jobs: + build_core: + name: OpenIPC v2.0 for Hi3516Ev300 + runs-on: ubuntu-18.04 + + steps: + + - name: Checkout + id: checkout + uses: actions/checkout@v2 + + - name: Install build dependencies + id: install + run: | + make install-deps + mkdir -p tmp + + - name: Free disk space + id: freshing + run: | + sudo swapoff -a + sudo rm -f /swapfile + sudo apt clean + docker rmi $(docker image ls -aq) + df -h + + - name: Prepare buildroot + id: prepare + run: | + HEAD_TAG=$(git tag --points-at HEAD) + GIT_HASH=$(git rev-parse --short $GITHUB_SHA) + BRANCH_NAME=$(echo $GITHUB_REF | cut -d'/' -f 3) + if [ -z "$HEAD_TAG" ]; then + TAG_NAME="latest" + RELEASE_NAME="Development Build" + PRERELEASE=true + else + TAG_NAME=${{ github.ref }} + RELEASE_NAME="Release ${{ github.ref }}" + PRERELEASE=false + fi + echo "GIT_HASH=$GIT_HASH" >> $GITHUB_ENV + echo "TAG_NAME=$TAG_NAME" >> $GITHUB_ENV + echo "RELEASE_NAME=$RELEASE_NAME" >> $GITHUB_ENV + echo "PRERELEASE=$PRERELEASE" >> $GITHUB_ENV + echo "BRANCH_NAME=$BRANCH_NAME" >> $GITHUB_ENV + cd $GITHUB_WORKSPACE + make prepare + + - name: Build Hi3516Ev300 firmware + id: build-hi3516ev300-firmware + continue-on-error: true + run: | + ARCHIVE_FW="${GITHUB_WORKSPACE}/output/images/openipc.hi3516ev300-br.tgz" + echo "ARCHIVE_FW=$ARCHIVE_FW" >> $GITHUB_ENV + cd $GITHUB_WORKSPACE + make BOARD=unknown_unknown_hi3516ev300_openipc all + tar -C ${GITHUB_WORKSPACE}/output/images -cvzf $ARCHIVE_FW rootfs.squashfs uImage + + - name: Build Hi3516Ev300 SDK + id: build-hi3516ev300-sdk + continue-on-error: true + run: | + ARCHIVE_SDK="${GITHUB_WORKSPACE}/output/images/arm-openipc-linux-musleabi_sdk-buildroot.tar.gz" + echo "ARCHIVE_SDK=$ARCHIVE_SDK" >> $GITHUB_ENV + cd $GITHUB_WORKSPACE/output + make sdk + + - name: Send warning message to telegram channel + env: + TG_TOKEN: ${{ secrets.TELEGRAM_TOKEN_BOT_OPENIPC }} + TG_CHANNEL: ${{ secrets.TELEGRAM_CHANNEL_OPENIPC_DEV }} + if: steps.build-hi3516ev300-firmware.outcome != 'success' || steps.build-hi3516ev300-sdk.outcome != 'success' + run: | + TG_OPTIONS="-s --connect-timeout 5 --max-time 15" + TG_NOTIFY="Warning, Buildroot compiling error..." + TG_HEADER=$(echo -e "\r\n$TG_NOTIFY \r\n\r\nCommit: $GIT_HASH \r\nBranch: $BRANCH_NAME \r\nTag: $TAG_NAME \r\n\r\n\xE2\x9A\xA0 GitHub Actions") + curl $TG_OPTIONS -H "Content-Type: multipart/form-data" -X POST https://api.telegram.org/bot$TG_TOKEN/sendMessage \ + -F chat_id=$TG_CHANNEL -F text="$TG_HEADER" + + - name: Create release + uses: actions/create-release@v1 + continue-on-error: true + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag_name: ${{ env.TAG_NAME }} + release_name: ${{ env.RELEASE_NAME }} + draft: false + prerelease: ${{ env.PRERELEASE }} + + - name: Upload FW to release + uses: svenstaro/upload-release-action@v2 + continue-on-error: true + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + file: ${{ env.ARCHIVE_FW }} + asset_name: "openipc.hi3516ev300-br.tgz" + tag: ${{ env.TAG_NAME }} + overwrite: true + + - name: Upload SDK to release + uses: svenstaro/upload-release-action@v2 + continue-on-error: true + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + file: ${{ env.ARCHIVE_SDK }} + asset_name: "arm-openipc-linux-musleabi_sdk-buildroot.tar.gz" + tag: ${{ env.TAG_NAME }} + overwrite: true + + - name: Send binary file to telegram channel + env: + TG_TOKEN: ${{ secrets.TELEGRAM_TOKEN_BOT_OPENIPC }} + TG_CHANNEL: ${{ secrets.TELEGRAM_CHANNEL_OPENIPC_DEV }} + run: | + TG_OPTIONS="-s --connect-timeout 5 --max-time 15" + TG_HEADER=$(echo -e "\r\nCommit: $GIT_HASH \r\nBranch: $BRANCH_NAME \r\nTag: $TAG_NAME \r\n\r\n\xE2\x9C\x85 GitHub Actions") + curl $TG_OPTIONS -H "Content-Type: multipart/form-data" -X POST https://api.telegram.org/bot$TG_TOKEN/sendDocument \ + -F chat_id=$TG_CHANNEL -F document="@$ARCHIVE_FW" -F caption="$TG_HEADER" diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..a442e57a --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +buildroot-2021.02/ +buildroot-2020.02/ +buildroot-2019.11.1/ +output/ diff --git a/Makefile b/Makefile new file mode 100644 index 00000000..bba21096 --- /dev/null +++ b/Makefile @@ -0,0 +1,137 @@ + +ROOT_DIR := $(CURDIR) +BR_VER := 2021.02 +BR_DIR := $(ROOT_DIR)/buildroot-$(BR_VER) +BR_EXT_DIR := $(ROOT_DIR)/br-ext-chip-hisilicon +SCRIPTS_DIR := $(ROOT_DIR)/scripts +BOARDS := $(shell ls -1 $(BR_EXT_DIR)/configs) + +.PHONY: usage help prepare install-deps all toolchain-params run-tests overlayed-rootfs-% + +usage help: + @echo \ + "\n\ + BR-OpenIPC usage:\n\ + - make help|usage - print this help\n\ + - make install-deps - install system deps\n\ + - make prepare - download and unpack buildroot\n\ + - make list-configs - show avalible hardware configs list\n\ + - make BOARD= board-info - write to stdout information about selected board\n\ + - make BOARD= all - build all needed for a board (toolchain, kernel and rootfs images)\n\ + - make overlayed-rootfs- ROOTFS_OVERLAYS=... - create rootfs image that contains original\n\ + Buildroot target dir overlayed by some custom layers.\n\ + Example:\n\ + make overlayed-rootfs-squashfs ROOTFS_OVERLAYS=./examples/echo_server/overlay\n\ + " + + +prepare: $(BR_DIR) +$(ROOT_DIR)/buildroot-$(BR_VER).tar.gz: + wget -O $@ --header="Host: buildroot.org" --no-check-certificate https://buildroot.org/downloads/buildroot-$(BR_VER).tar.gz + +$(BR_DIR): $(ROOT_DIR)/buildroot-$(BR_VER).tar.gz + tar -C $(ROOT_DIR) -xf buildroot-$(BR_VER).tar.gz + rm -f buildroot-$(BR_VER).tar.gz + + +install-deps: + DEBIAN_FRONTEND=noninteractive sudo apt-get update && sudo apt-get -y install build-essential make libncurses-dev wget + + +%_info: + @echo + @cat $(BR_EXT_DIR)/board/$(subst _info,,$@)/config | grep RAM_LINUX_SIZE + $(eval VENDOR := $(shell echo $@ | cut -d "_" -f 1)) + $(eval FAMILY := $(shell cat $(BR_EXT_DIR)/board/$(subst _info,,$@)/config | grep FAMILY | cut -d "=" -f 2)) + $(eval CHIP := $(shell echo $@ | cut -d "_" -f 3)) + @cat $(BR_EXT_DIR)/board/$(FAMILY)/$(CHIP).config + + +list-configs: + @echo + @ls -1 $(BR_EXT_DIR)/configs + + +# ------------------------------------------------------------------------------------------------- +OUT_DIR ?= $(ROOT_DIR)/output + +# Buildroot considers relative paths relatively to its' own root directory. So we use absolute paths +# to avoid ambiguity +override OUT_DIR := $(abspath $(OUT_DIR)) +BOARD_MAKE := $(MAKE) -C $(BR_DIR) BR2_EXTERNAL=$(BR_EXT_DIR) O=$(OUT_DIR) + +define CREATE_TOOLCHAIN_PARAMS + eval $$($(BOARD_MAKE) -s --no-print-directory VARS=GNU_TARGET_NAME printvars) \ + && $(SCRIPTS_DIR)/create_toolchain_binding.sh $(OUT_DIR)/host/bin $$GNU_TARGET_NAME \ + > $(OUT_DIR)/toolchain-params.mk +endef + +# ------------------------------------------------------------------------------------------------- +$(OUT_DIR)/.config: +ifndef BOARD + @echo "Variable BOARD must be defined to initialize output directory" >&2 && exit 1 +endif + $(BOARD_MAKE) BR2_DEFCONFIG=$(BR_EXT_DIR)/configs/$(BOARD)_defconfig defconfig + + +$(OUT_DIR)/toolchain-params.mk: $(OUT_DIR)/.config $(SCRIPTS_DIR)/create_toolchain_binding.sh + $(CREATE_TOOLCHAIN_PARAMS) + + +# ------------------------------------------------------------------------------------------------- +# build all needed for a board +all: $(OUT_DIR)/.config $(OUT_DIR)/toolchain-params.mk + $(BOARD_MAKE) all + + +# ------------------------------------------------------------------------------------------------- +# re-create params file +toolchain-params: + $(CREATE_TOOLCHAIN_PARAMS) + +# ------------------------------------------------------------------------------------------------- +# create rootfs image that contains original Buildroot target dir overlayed by some custom layers +# space-separated list of overlays + +ROOTFS_OVERLAYS ?= +# overlayed rootfs directory +ROOTFS_OVERLAYED_DIR ?= $(OUT_DIR)/target-overlayed +# overlayed rootfs image's name (without prefix) +ROOTFS_OVERLAYED_IMAGE ?= rootfs-overlayed + +overlayed-rootfs-%: $(OUT_DIR)/.config + $(SCRIPTS_DIR)/create_overlayed_rootfs.sh $(ROOTFS_OVERLAYED_DIR) $(OUT_DIR)/target $(ROOTFS_OVERLAYS) + $(BOARD_MAKE) $(subst overlayed-,,$@) \ + BASE_TARGET_DIR=$(abspath $(ROOTFS_OVERLAYED_DIR)) \ + ROOTFS_$(call UPPERCASE,$(subst overlayed-rootfs-,,$@))_FINAL_IMAGE_NAME=$(ROOTFS_OVERLAYED_IMAGE).$(subst overlayed-rootfs-,,$@) + + +# ------------------------------------------------------------------------------------------------- +board-info: + @cat $(BR_EXT_DIR)/board/$(BOARD)/config | grep RAM_LINUX_SIZE + $(eval VENDOR := $(shell echo $(BOARD) | cut -d "_" -f 1)) + $(eval FAMILY := $(shell cat $(BR_EXT_DIR)/board/$(BOARD)/config | grep FAMILY | cut -d "=" -f 2)) + $(eval CHIP := $(shell echo $(BOARD) | cut -d "_" -f 3)) + @cat $(BR_EXT_DIR)/board/$(FAMILY)/$(CHIP).config + @cat $(BR_EXT_DIR)/board/$(BOARD)/config + + +# ------------------------------------------------------------------------------------------------- +# such targets (with trimmed `br-` prefix) are passed to Buildroot's Makefile +br-%: $(OUT_DIR)/.config + $(BOARD_MAKE) $(subst br-,,$@) + + +# ------------------------------------------------------------------------------------------------- +run-tests: + $(MAKE) -C $(ROOT_DIR)/tests + + +# ------------------------------------------------------------------------------------------------- +# there are some extra targets of specific packages +include $(sort $(wildcard $(ROOT_DIR)/extra/*.mk)) + + +# ------------------------------------------------------------------------------------------------- +# util stuff is below +UPPERCASE = $(shell echo $(1) | tr a-z A-Z) diff --git a/NOTIFY.md b/NOTIFY.md new file mode 100644 index 00000000..b51e45c9 --- /dev/null +++ b/NOTIFY.md @@ -0,0 +1,68 @@ +# openipc-v2.0 + +OpenIPC v2.0 based on Buildroot + +[![Test building...](https://github.com/FlyRouter/openipc-v2.0/actions/workflows/main.yml/badge.svg)](https://github.com/FlyRouter/openipc-v2.0/actions/workflows/main.yml) + +----- + +## Quick Start for Hi3516Ev300 + +``` +make prepare +make -j$(($(nproc)+1)) BOARD=unknown_unknown_hi3516ev300_unknown all +``` + +Execute the commands above and your files will be in the directory **output/images** + +----- + +## ToDo support + +* br-ext-chip-anyka +* br-ext-chip-fullhan +* br-ext-chip-goke +* br-ext-chip-grainmedia +* br-ext-chip-ingenic + +* br-ext-chip-infineon + +----- + +## Other strings + +``` +# +# make help +# make install-deps +# make prepare +# make list-configs +# +# make busybox-{dirclean,rebuild} +# make fwprintenv-ng-{dirclean,rebuild} +# make hisilicon-osdrv4-{dirclean,rebuild} +# make ipctool-{dirclean,rebuild} +# make jpeg-turbo-{dirclean,rebuild} +# make libevent-mini-{dirclean,rebuild} +# make linux-{dirclean,rebuild} +# make majestic-{dirclean,rebuild} +# make uboot-tools-fwprintenv-{dirclean,rebuild} +# +# make BOARD=unknown_unknown_hi3516ev300_unknown board-info +# make BOARD=unknown_unknown_hi3516ev300_unknown all && 2dolphin +# +# make BOARD=unknown_unknown_xm530_unknown board-info +# make BOARD=unknown_unknown_xm530_unknown all +# +# cd output ; make sdk +# +# tag="v21.04.10.3" +# +# git pull +# git push +# git tag ${tag} -m "Jump to ${tag}" +# git push origin --tags +# git push --follow-tags +# +``` + diff --git a/README.md b/README.md index 7cf69828..79dfa017 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,7 @@ # Experimental project - openipc-2.1 **All information about the project is available in our [Wiki](https://github.com/OpenIPC/openipc-2.1/wiki)** + +[![Test building...](https://github.com/OpenIPC/openipc-2.1/actions/workflows/hi3516ev200_images.yml/badge.svg)](https://github.com/OpenIPC/openipc-2.1/actions/workflows/hi3516ev200_images.yml) + +[![Test building...](https://github.com/OpenIPC/openipc-2.1/actions/workflows/hi3516ev300_images.yml/badge.svg)](https://github.com/OpenIPC/openipc-2.1/actions/workflows/hi3516ev300_images.yml) \ No newline at end of file diff --git a/br-ext-chip-sigmastar/.empty b/br-ext-chip-sigmastar/.empty new file mode 100644 index 00000000..e69de29b diff --git a/scripts/create_overlayed_rootfs.sh b/scripts/create_overlayed_rootfs.sh new file mode 100755 index 00000000..64134885 --- /dev/null +++ b/scripts/create_overlayed_rootfs.sh @@ -0,0 +1,21 @@ +#!/bin/bash + +DST=$1 +shift + +rm -rf $DST +mkdir -p $DST + +while [[ $# -ge 1 ]]; do + echo "Put layer '$1' onto '$DST'..." >&2 +# if cp -r $1/* $DST/; then + if rsync -a --ignore-times --chmod=u=rwX,go=rX --exclude .empty $1/ $DST/; then + echo "DONE" >&2 + else + echo "FAILED" >&2 + exit -1 + fi + shift +done + + diff --git a/scripts/create_toolchain_binding.sh b/scripts/create_toolchain_binding.sh new file mode 100755 index 00000000..336d34ac --- /dev/null +++ b/scripts/create_toolchain_binding.sh @@ -0,0 +1,28 @@ +#!/bin/bash + +TOOLCHAIN_DIR=$1 +TOOLCHAIN_PREFIX=$2 + +cat - << EOF +# THIS FILE IS GENERATED BY $(readlink -f $0) + +TOOLCHAIN_DIR := $TOOLCHAIN_DIR +TOOLCHAIN_PREFIX := $TOOLCHAIN_PREFIX + +TOOLCHAIN := \$(TOOLCHAIN_DIR)/\$(TOOLCHAIN_PREFIX) + +CC := \$(TOOLCHAIN)-gcc +AR := \$(TOOLCHAIN)-ar +LD := \$(TOOLCHAIN)-ld +RANLIB := \$(TOOLCHAIN)-ranlib +NM := \$(TOOLCHAIN)-nm +STRIP := \$(TOOLCHAIN)-strip +EOF + +EXTRA_BINS=(go gofmt m4 swig) + +for I in ${EXTRA_BINS[*]}; do + if [ -e $TOOLCHAIN_DIR/$I ]; then + echo "${I^^} := \$(TOOLCHAIN_DIR)/$I" + fi +done