Files
matrix-screen-controller/核桃派软件源代码/scripts/build_axp313a_kernel.sh
T

106 lines
4.1 KiB
Bash

#!/bin/sh
set -eu
SOURCE=
CONFIG=
OUTPUT=
JOBS=${JOBS:-2}
RELEASE=6.1.31-matrix-axp313a1
LOCALVERSION_SUFFIX=-matrix-axp313a1
VENDOR_COMMIT=30ff3fd5cf45417622b447a12e7a947402ffe34d
while [ "$#" -gt 0 ]; do
case "$1" in
--source) SOURCE=$2; shift 2 ;;
--config) CONFIG=$2; shift 2 ;;
--output) OUTPUT=$2; shift 2 ;;
*) echo "unknown argument: $1" >&2; exit 2 ;;
esac
done
if [ -z "$SOURCE" ] || [ -z "$CONFIG" ] || [ -z "$OUTPUT" ]; then
echo "usage: build_axp313a_kernel.sh --source DIR --config FILE --output EMPTY_DIR" >&2
exit 2
fi
SOURCE=$(CDPATH= cd -- "$SOURCE" && pwd)
CONFIG=$(readlink -f -- "$CONFIG")
OUTPUT=$(readlink -f -- "$OUTPUT")
SCRIPT_ROOT=$(CDPATH= cd -- "$(dirname -- "$0")/.." && pwd)
PATCH_ROOT=$SCRIPT_ROOT/kernel/patches
BUILD=$OUTPUT/build
STAGE=$OUTPUT/stage
case "$SOURCE" in /|/boot|/opt|/usr|/var|/home) echo "source path is too broad" >&2; exit 1 ;; esac
case "$OUTPUT" in /|/boot|/opt|/usr|/var|/home) echo "output path is too broad" >&2; exit 1 ;; esac
if [ ! -f "$SOURCE/Makefile" ] || [ ! -f "$CONFIG" ]; then
echo "kernel source or config is missing" >&2
exit 1
fi
if [ -n "$(find "$OUTPUT" -mindepth 1 -maxdepth 1 -print -quit)" ]; then
echo "output directory must be empty" >&2
exit 1
fi
case "$JOBS" in *[!0-9]*|'') echo "JOBS must be a positive integer" >&2; exit 1 ;; esac
if [ "$JOBS" -lt 1 ] || [ "$JOBS" -gt 4 ]; then
echo "JOBS must be within 1..4" >&2
exit 1
fi
(cd "$PATCH_ROOT" && sha256sum -c SHA256SUMS)
for upstream_patch in \
75c8cb2f4cb218aaf4ea68cab08d6dbc96eeae15.patch \
60fd7eb89670d2636ac3156881acbd103c6eba6a.patch \
4628b804555773daa982d9578d89fe04fcdde374.patch
do
test -f "$PATCH_ROOT/$upstream_patch"
done
grep -q 'AXP313A_ID' "$SOURCE/include/linux/mfd/axp20x.h"
grep -q 'axp313a_regulators' "$SOURCE/drivers/regulator/axp20x-regulator.c"
for patch_file in \
0003-walnutpi-6.1-axp313a-strict-backport.patch \
0004-walnutpi-axp313a-dts.patch \
0005-walnutpi-axp313a-preserve-dldo1.patch \
0006-walnutpi-uwe5622-out-of-tree-build.patch \
0007-walnutpi-enabled-realtek-out-of-tree-build.patch \
0008-walnutpi-rtl8192eu-out-of-tree-build.patch \
0009-walnutpi-rtl8812au-out-of-tree-build.patch \
0010-walnutpi-rtl8812au-phydm-out-of-tree-build.patch \
0011-walnutpi-rtl88x2cs-topdir-out-of-tree-build.patch \
0012-walnutpi-emmc-axp313a-dts.patch \
0013-walnutpi-axp313a-fixed-dcdc-frequency.patch
do
patch -d "$SOURCE" -p1 --forward --batch --fuzz=0 < "$PATCH_ROOT/$patch_file"
done
mkdir -p -- "$BUILD" "$STAGE/boot" "$STAGE/lib"
cp -- "$CONFIG" "$BUILD/.config"
make -C "$SOURCE" O="$BUILD" olddefconfig
"$SOURCE/scripts/config" --file "$BUILD/.config" \
--set-str LOCALVERSION '' \
--disable LOCALVERSION_AUTO \
--set-str SYSTEM_TRUSTED_KEYS '' \
--set-str SYSTEM_REVOCATION_KEYS ''
make -C "$SOURCE" O="$BUILD" olddefconfig
actual_release=$(make -s -C "$SOURCE" O="$BUILD" \
LOCALVERSION="$LOCALVERSION_SUFFIX" kernelrelease)
if [ "$actual_release" != "$RELEASE" ]; then
echo "unexpected kernel release: $actual_release" >&2
exit 1
fi
make -C "$SOURCE" O="$BUILD" LOCALVERSION="$LOCALVERSION_SUFFIX" \
-j"$JOBS" Image dtbs modules
make -C "$SOURCE" O="$BUILD" LOCALVERSION="$LOCALVERSION_SUFFIX" \
modules_install INSTALL_MOD_PATH="$STAGE"
install -m 0644 "$BUILD/arch/arm64/boot/Image" "$STAGE/boot/Image-matrix-axp313a1"
install -m 0644 "$BUILD/arch/arm64/boot/dts/allwinner/sun50i-h616-walnutpi-1b.dtb" \
"$STAGE/boot/sun50i-h616-walnutpi-1b-matrix-axp313a1.dtb"
install -m 0644 "$BUILD/arch/arm64/boot/dts/allwinner/sun50i-h616-walnutpi-1b-emmc.dtb" \
"$STAGE/boot/sun50i-h616-walnutpi-1b-emmc-matrix-axp313a1.dtb"
install -m 0644 "$BUILD/System.map" "$STAGE/boot/System.map-$RELEASE"
install -m 0644 "$BUILD/.config" "$STAGE/boot/config-$RELEASE"
printf '%s\n' "$VENDOR_COMMIT" > "$STAGE/SOURCE_COMMIT"
printf '%s\n' "$RELEASE" > "$STAGE/KERNEL_RELEASE"
(cd "$STAGE" && find boot lib SOURCE_COMMIT KERNEL_RELEASE -type f -print0 | sort -z | xargs -0 sha256sum > SHA256SUMS)
echo "candidate kernel built at $STAGE"