cannon

kernel version

4.14.336-perf-cus

date

SUN DEC 2025.12.28 3:23 CST

标准化自动编译cannon kernel to active docker

docker run -it --name build -v"$(pwd)"/data:/data ubuntu:22.04 

apt update -y && apt install -y git wget curl tar zip unzip make binutils bison flex libssl-dev bc libelf-dev gcc-aarch64-linux-gnu gcc-arm-linux-gnueabi build-essential python3 libncurses5-dev libncursesw5-dev pkg-config ccache
mkdir -p /toolchain && cd /toolchain && wget https://android.googlesource.com/platform/prebuilts/clang/host/linux-x86/+archive/refs/heads/master-kernel-build-2022/clang-r450784e.tar.gz && mkdir clang && tar -C clang -zxvf clang-r450784e.tar.gz
wget -O gcc64.tar.gz https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/+archive/refs/tags/android-12.1.0_r27.tar.gz && mkdir gcc64 && tar -C gcc64 -zxvf gcc64.tar.gz
wget -O gcc32.tar.gz https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9/+archive/refs/tags/android-12.1.0_r27.tar.gz && mkdir gcc32 && tar -C gcc32 -zxvf gcc32.tar.gz
wget -O kernel.zip https://github.com/GTian5418/android_kernel_xiaomi_cannon/archive/refs/heads/lineage-20.zip && unzip kernel.zip
wget -O AnyKernel3.zip https://github.com/osm0sis/AnyKernel3/archive/refs/heads/master.zip && \ unzip AnyKernel3.zip && \ mv AnyKernel3-master Anykernel && \ rm -f AnyKernel3.zip Anykernel/LICENSE Anykernel/README.md
wget -O Anykernel/dtb.img https://github.com/GTian5418/android_kernel_xiaomi_cannon/releases/download/Kernel/dtb.img
wget -O Anykernel/dtbo.img https://github.com/GTian5418/android_kernel_xiaomi_cannon/releases/download/Kernel/dtbo.img
wget https://github.com/GTian5418/android_kernel_xiaomi_cannon/releases/download/Kernel/config.zip && unzip config.zip
rm -rf *.zip *.gz

定义编译脚本

cat << 'EOF' > /cannon/build.sh
#!/bin/bash
TOOLCHAIN="/cannon"
CONFIG_DIR="$TOOLCHAIN/config"
KERNEL="$TOOLCHAIN/android_kernel_xiaomi_cannon-lineage-20"
OUT_DIR="$TOOLCHAIN/out"
AK_DIR="$TOOLCHAIN/Anykernel"
ZIPS_OUT="$TOOLCHAIN/Anykernel3-Cannon-God.zip"
export PATH="$TOOLCHAIN/clang/bin:$TOOLCHAIN/gcc64/bin:$TOOLCHAIN/gcc32/bin:$PATH"
export CCACHE_DIR="$TOOLCHAIN/.ccache"
GCC64="aarch64-linux-android-"
GCC32="arm-linux-androideabi-"
export USE_CCACHE=1
export CC="clang"
COMMON_ARGS="O=$OUT_DIR ARCH=arm64 CLANG_TRIPLE=aarch64-linux-gnu- CROSS_COMPILE=$GCC64"
BUILD_ARGS="CROSS_COMPILE_ARM32=$GCC32 LD=ld.lld KCFLAGS=-Wno-error"
mkdir -p "$OUT_DIR"
mkdir -p "$CCACHE_DIR"
ccache -z
ccache -M 50G
echo ">>> [预处理] 正在修正 sctp/output.c 语法错误..."
TARGET_FILE="$KERNEL/net/sctp/output.c"
if [ -f "$TARGET_FILE" ]; then
sed -i 's/skb_gro_receive(head, nskb)/skb_gro_receive(\&head, nskb)/g' "$TARGET_FILE"
sed -i '502s/skb_gro_receive(&head, nskb)/skb_gro_receive(head, nskb)/' "$TARGET_FILE"
fi
build_step() {
local cfg_file=$1
echo "================================================"
echo ">>> 开始处理阶段: $cfg_file"
local start_time=$(date +%s)
cp "$CONFIG_DIR/$cfg_file" "$OUT_DIR/.config"
sed -i 's/CONFIG_LOCALVERSION="-perf-cus"/CONFIG_LOCALVERSION="-Cannon-God"/' "$OUT_DIR/.config"
cd "$KERNEL"
make $COMMON_ARGS CC="ccache clang" olddefconfig > /dev/null 2>&1
if make -j$(nproc --all) $COMMON_ARGS $BUILD_ARGS CC="ccache clang" Image.gz; then
local end_time=$(date +%s)
local duration=$((end_time - start_time))
echo ">>> $cfg_file 编译成功!耗时: $((duration / 60))分$((duration % 60))秒"
ccache -s | grep "hit rate" || true
else
echo ">>> [错误] $cfg_file 编译失败!"
exit 1
fi
}
TOTAL_START=$(date +%s)
for i in g g1 g2 g3 g4 g5 g6; do
if [ -f "$CONFIG_DIR/$i.config" ]; then
build_step "$i.config"
fi
done
TOTAL_END=$(date +%s)
echo "================================================"
if [ -f "$OUT_DIR/arch/arm64/boot/Image.gz" ]; then
cd "$AK_DIR"
rm -f Image.* *.zip
cp "$OUT_DIR/arch/arm64/boot/Image.gz" .
sed -i '
8s/do\.devicecheck=1/do.devicecheck=0/;
13s/device\.name1=.*/device.name1=cannon/;
14s/device\.name2=.*/device.name2=cannong/;
15s/device\.name3=.*/device.name3=/;
16s/device\.name4=.*/device.name4=/;
32s|BLOCK=/dev/block/platform/omap/omap_hsmmc\.0/by-name/boot;|BLOCK=auto;|
' "$AK_DIR/anykernel.sh"
zip -r9 "$ZIPS_OUT" . -x ".git/*" > /dev/null
echo ">>> 完成!总耗时: $(( (TOTAL_END - TOTAL_START) / 60 ))分"
else
echo ">>> 失败:未生成镜像"
exit 1
fi
EOF

chmod +x /cannon/build.sh
./build.sh

手动编译常用

make O=$OUT_DIR menuconfig

cd /toolchain/A && rm -rf Image.* *.zip && cp $i/Image.gz /toolchain/A && cd /toolchain/A && zip -r9 /toolchain/Anykernel.zip * && rm -rf Image.* *.zip &&cd ..

cp android_kernel_xiaomi_cannon-lineage-20/arch/arm64/configs/god_defconfig /toolchain/out/.config

export i=/toolchain/out/arch/arm64/boot
export o=/toolchain/android_kernel_xiaomi_cannon-lineage-20/arch/arm64/configs





TOOLCHAIN="/toolchain"
CONFIG_DIR="/toolchain/config"
KERNEL="$TOOLCHAIN/android_kernel_xiaomi_cannon-lineage-20"
OUT_DIR="/toolchain/out"
export PATH="$TOOLCHAIN/clang/bin:$PATH"
CLANG="$TOOLCHAIN/clang/bin/clang"
GCC64="$TOOLCHAIN/gcc64/bin/aarch64-linux-android-"
GCC32="$TOOLCHAIN/gcc32/bin/arm-linux-androideabi-"
COMMON_ARGS="O=$OUT_DIR ARCH=arm64 CC=$CLANG CLANG_TRIPLE=aarch64-linux-gnu- CROSS_COMPILE=$GCC64"
BUILD_ARGS="CROSS_COMPILE_ARM32=$GCC32 LD=ld.lld KCFLAGS=-Wno-error"
mkdir -p "$OUT_DIR"
cd $KERNEL
cp "$CONFIG_DIR/g.config" "$OUT_DIR/.config"
make $COMMON_ARGS olddefconfig
make -j$(nproc --all) $COMMON_ARGS $BUILD_ARGS Image.gz
cd $KERNEL
cp "$CONFIG_DIR/g1.config" "$OUT_DIR/.config"
make $COMMON_ARGS olddefconfig
make -j$(nproc --all) $COMMON_ARGS $BUILD_ARGS Image.gz
cd $KERNEL
cp "$CONFIG_DIR/g2.config" "$OUT_DIR/.config"
make $COMMON_ARGS olddefconfig
make -j$(nproc --all) $COMMON_ARGS $BUILD_ARGS Image.gz
sed -i '502s/skb_gro_receive(&head, nskb)/skb_gro_receive(head, nskb)/' /toolchain/android_kernel_xiaomi_cannon-lineage-20/net/sctp/output.c
cd $KERNEL
cp "$CONFIG_DIR/g3.config" "$OUT_DIR/.config"
make $COMMON_ARGS olddefconfig
make -j$(nproc --all) $COMMON_ARGS $BUILD_ARGS Image.gz
cd $KERNEL
cp "$CONFIG_DIR/g4.config" "$OUT_DIR/.config"
make $COMMON_ARGS olddefconfig
make -j$(nproc --all) $COMMON_ARGS $BUILD_ARGS Image.gz
cd $KERNEL
cp "$CONFIG_DIR/g5.config" "$OUT_DIR/.config"
make $COMMON_ARGS olddefconfig
make -j$(nproc --all) $COMMON_ARGS $BUILD_ARGS Image.gz
cd $KERNEL
cp "$CONFIG_DIR/g6.config" "$OUT_DIR/.config"
make $COMMON_ARGS olddefconfig
make -j$(nproc --all) $COMMON_ARGS $BUILD_ARGS Image.gz
(cd /toolchain/Anykernel && rm -f Image.* *.zip && cp /toolchain/out/arch/arm64/boot/Image.gz . && zip -r9 "/mnt/hgfs/D/Anykernel.zip" . -x ".git/*" && rm -f Image.gz)

Anykernel3 打包

wget -O Anykernel.zip https://github.com/osm0sis/AnyKernel3/archive/refs/heads/master.zip
unzip -d ./Anykernel3
rm -rf /Anykernel3/LICENSE /Anykernel3/README.md
sed -i '
8s/do\.devicecheck=1/do.devicecheck=0/;
13s/device\.name1=.*/device.name1=cannon/;
14s/device\.name2=.*/device.name2=cannong/;
15s/device\.name3=.*/device.name3=/;
16s/device\.name4=.*/device.name4=/;
32s|BLOCK=/dev/block/platform/omap/omap_hsmmc\.0/by-name/boot;|BLOCK=auto;|
' Anykernel/anykernel.sh

Dockefile

FROM ubuntu:22.04
ENV DEBIAN_FRONTEND=noninteractive
RUN apt update -y && apt install -y \
git wget curl tar zip unzip make binutils bison flex libssl-dev bc libelf-dev \
gcc-aarch64-linux-gnu gcc-arm-linux-gnueabi build-essential python3 \
libncurses5-dev libncursesw5-dev pkg-config ccache && \
apt clean && rm -rf /var/lib/apt/lists/*
WORKDIR /cannon
RUN wget https://android.googlesource.com/platform/prebuilts/clang/host/linux-x86/+archive/refs/heads/master-kernel-build-2022/clang-r450784e.tar.gz && \
mkdir clang && tar -C clang -zxvf clang-r450784e.tar.gz && \
wget -O gcc64.tar.gz https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/+archive/refs/tags/android-12.1.0_r27.tar.gz && \
mkdir gcc64 && tar -C gcc64 -zxvf gcc64.tar.gz && \
wget -O gcc32.tar.gz https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9/+archive/refs/tags/android-12.1.0_r27.tar.gz && \
mkdir gcc32 && tar -C gcc32 -zxvf gcc32.tar.gz
RUN wget -O kernel.zip https://github.com/GTian5418/android_kernel_xiaomi_cannon/archive/refs/heads/lineage-20.zip && \
unzip kernel.zip && \
wget -O AnyKernel3.zip https://github.com/osm0sis/AnyKernel3/archive/refs/heads/master.zip && \
unzip AnyKernel3.zip && mv AnyKernel3-master Anykernel && \
wget -O Anykernel/dtb.img https://github.com/GTian5418/android_kernel_xiaomi_cannon/releases/download/Kernel/dtb.img && \
wget -O Anykernel/dtbo.img https://github.com/GTian5418/android_kernel_xiaomi_cannon/releases/download/Kernel/dtbo.img && \
wget https://github.com/GTian5418/android_kernel_xiaomi_cannon/releases/download/Kernel/config.zip && \
unzip config.zip && \
rm -rf *.zip *.gz Anykernel/LICENSE Anykernel/README.md
COPY build.sh /cannon/build.sh
RUN chmod +x /cannon/build.sh
CMD ["/bin/bash", "-c", "/cannon/build.sh && cp /cannon/*.zip /output/"]