From 58af873a435c47d0b2e31a3e6171040ade81dfc8 Mon Sep 17 00:00:00 2001 From: Gunjan Gupta Date: Fri, 22 Dec 2023 20:58:46 +0530 Subject: [PATCH] Add extension to perform major kernel upgrade for allwinner kernels --- extensions/allwinner-kernel-bump.sh | 96 +++++++++++++++++++++++++++++ tools/mk_format_patch | 7 +-- 2 files changed, 99 insertions(+), 4 deletions(-) create mode 100644 extensions/allwinner-kernel-bump.sh diff --git a/extensions/allwinner-kernel-bump.sh b/extensions/allwinner-kernel-bump.sh new file mode 100644 index 000000000..889906d11 --- /dev/null +++ b/extensions/allwinner-kernel-bump.sh @@ -0,0 +1,96 @@ +# +# SPDX-License-Identifier: GPL-2.0 +# Copyright (c) 2023 Gunjan Gupta +# This file is a part of the Armbian Build Framework https://github.com/armbian/build/ +# + +PREV_KERNEL_PATCH_DIR=none + +function extension_prepare_config__prepare_kernel_patches() { + if [[ ! ${LINUXFAMILY} == sunxi* ]] || [[ "${BRANCH}" != "edge" ]]; then + exit_with_error "allwinner-kernel-bump extension must only be used with allwinner boards with edge kernel" + fi + + if [[ ${ARMBIAN_RELAUNCHED} == "yes" ]]; then + display_alert "allwinner-kernel-bump" "Checking new kernel version" "info" + PREV_KERNEL_PATCH_DIR=${SRC}/patch/kernel/${KERNELPATCHDIR} + declare -g KERNELBRANCH="branch:master" + declare -A AKB_GIT_INFO=([GIT_SOURCE]="${KERNELSOURCE}" [GIT_REF]="${KERNELBRANCH}") + run_memoized AKB_GIT_INFO "git2info" memoized_git_ref_to_info "include_makefile_body" + declare -g KERNEL_MAJOR_MINOR=${AKB_GIT_INFO[MAKEFILE_FULL_VERSION]%.*} + declare -g KERNELPATCHDIR="archive/sunxi-${KERNEL_MAJOR_MINOR}" + display_alert "allwinner-kernel-bump" "New kernel version ${KERNEL_MAJOR_MINOR}" "info" + fi +} + +function extension_finish_config__prepare_megous_patches() { + if [[ ${ARMBIAN_RELAUNCHED} == "yes" ]]; then + declare bare_tree_done_marker_file=".git/armbian-bare-tree-done" + declare kernel_git_bare_tree + declare git_bundles_dir + declare git_kernel_ball_fn + declare git_kernel_oras_ref + declare kernel_work_dir="${SRC}/cache/sources/${LINUXSOURCEDIR}" + patch_dir_base="${SRC}/patch/kernel/${KERNELPATCHDIR}" + patch_dir_megous="${patch_dir_base}/patches.megous" + patch_dir_tmp="${patch_dir_base}/patches.megi" + + if [[ -d ${patch_dir_base} ]]; then + display_alert "allwinner-kernel-bump" "Found existing kernel patch directory" "info" + if [[ "${OVERWRITE_PATCHDIR:-no}" == "yes" ]]; then + display_alert "allwinner-kernel-bump" "Removing as requested. Any manual changes will get overwritten" "info" + rm -rf ${patch_dir_base} + else + display_alert "allwinner-kernel-bump" "Skipping kernel patch directory creation" "info" + return 0 + fi + fi + + display_alert "allwinner-kernel-bump" "Preparing kernel git tree" "info" + kernel_prepare_bare_repo_decide_shallow_or_full + kernel_prepare_bare_repo_from_oras_gitball + kernel_prepare_git + kernel_maybe_clean + + bundle_file="${git_bundles_dir}/linux-megous.bundle" + bundle_url="https://xff.cz/kernels/git/orange-pi-active.bundle" + + display_alert "allwinner-kernel-bump" "Applying megous git bundle on kernel git tree" "info" + run_host_command_logged mkdir -pv "${git_bundles_dir}" + run_host_command_logged rm "${bundle_file}" || true + do_with_retries 5 axel "--output=${bundle_file}" "${bundle_url}" + run_host_command_logged git -C ${kernel_work_dir} fetch ${bundle_file} '+refs/heads/*:refs/remotes/megous/*' + + display_alert "allwinner-kernel-bump" "Initializing kernel patch directory using previous kernel patch dir" "info" + run_host_command_logged cp -aR ${PREV_KERNEL_PATCH_DIR} ${patch_dir_base} + + # Removing older copy of megous patches and series.conf file + run_host_command_logged rm -rf ${patch_dir_base}/patches.megous/* + run_host_command_logged rm -f ${patch_dir_base}/series.{conf,megous} + + display_alert "allwinner-kernel-bump" "Extracting latest Megous patches" "info" + megous_trees=( "a83t-suspend" "af8133j" "anx" "audio" "axp" "cam" "drm" + "err" "fixes" "mbus" "modem" "opi3" "pb" "pinetab" "pp" "ppkb" "samuel" + "speed" "tbs-a711" "ths" ) + + run_host_command_logged mkdir -p ${patch_dir_megous} ${patch_dir_tmp} + + for tree in ${megous_trees[@]}; do + run_host_command_logged "${SRC}"/tools/mk_format_patch ${kernel_work_dir} master..megous/${tree}-${KERNEL_MAJOR_MINOR} ${patch_dir_megous} sufix=megi + run_host_command_logged cp ${patch_dir_megous}/* ${patch_dir_tmp} + run_host_command_logged cat ${patch_dir_base}/series.megous ">>" ${patch_dir_base}/series.megi + done + + run_host_command_logged cp ${patch_dir_tmp}/* ${patch_dir_megous} + run_host_command_logged mv ${patch_dir_base}/series.megi ${patch_dir_base}/series.megous + run_host_command_logged rm -rf ${patch_dir_tmp} ${patch_dir_base}/series.megi + + # Disable previously disabled patches + grep '^-' ${PREV_KERNEL_PATCH_DIR}/series.megous | awk -F / '{print $NF}' | xargs -I {} sed -i "/\/{}/s/^/-/g" ${patch_dir_base}/series.megous + + display_alert "allwinner-kernel-bump" "Generating series.conf file" "info" + run_host_command_logged cat ${patch_dir_base}/series.megous ">>" ${patch_dir_base}/series.conf + run_host_command_logged cat ${patch_dir_base}/series.fixes ">>" ${patch_dir_base}/series.conf + run_host_command_logged cat ${patch_dir_base}/series.armbian ">>" ${patch_dir_base}/series.conf + fi +} diff --git a/tools/mk_format_patch b/tools/mk_format_patch index b963db0bc..b8b2991d0 100755 --- a/tools/mk_format_patch +++ b/tools/mk_format_patch @@ -65,8 +65,7 @@ mk_patch_series () echo -e "numbered =: [\033[1;31m${numbered}\033[0m]\n" [ -d $url_t ] || mess+=" bad url [$url_t]\n" - [ "$(git -C $url_t rev-parse --git-dir 2>/dev/null)" != ".git" ] && \ - mess+=" It's NOT git\n" + git -C $url_t rev-parse --git-dir 2>/dev/null || mess+=" It's NOT git\n" [ $(git -C $url_t rev-list ${range%..*} -1 2>/dev/null) ] || \ mess+=" bad first tag [${range%..*}]\n" @@ -153,7 +152,7 @@ then echo -e "\t\tAll generated patches: [$(ls $tmp_dir | wc -l)]" $(cd $tmp_dir - for pt in $(ls) + for pt in $(git -C $url_t log --graph --no-merges --pretty=%H $range | awk '{print $2}' | tac | xargs -I {} grep -l {} *) do if test -s $pt then @@ -177,7 +176,7 @@ then echo -e "\t\tAll generated patches: [$(cd $tmp_dir/$target_name; ls | wc -l)]" $(cd $tmp_dir/$target_name - for pt in $(ls) + for pt in $(git -C $url_t log --graph --no-merges --pretty=%H $range | awk '{print $2}' | tac | xargs -I {} grep -l {} *) do if test -s $pt then