Repository: Xiaomichael/OnePlus-Actions
Branch: Build
Commit: 9fe3ed5d16cf
Files: 14
Total size: 221.3 KB
Directory structure:
gitextract_8shsx1ht/
├── .github/
│ └── workflows/
│ ├── Build Kernel Only.yml
│ ├── Build KernelSU Next.yml
│ ├── Build KernelSU.yml
│ ├── Build ReSukiSU.yml
│ ├── Build SukiSU Ultra.yml
│ ├── Clean_ccache.yml
│ └── Clean_workflows.yml
├── README.md
├── local/
│ ├── Build_KernelSU.sh
│ ├── Build_Next.sh
│ ├── Build_Only.sh
│ ├── Build_ReSukiSU.sh
│ └── Build_SukiSU.sh
└── script/
└── buildbot.py
================================================
FILE CONTENTS
================================================
================================================
FILE: .github/workflows/Build Kernel Only.yml
================================================
name: Build Kernel Only
on:
workflow_dispatch:
inputs:
CPU:
description: "CPU分支"
required: true
type: choice
options:
- 'sm8750'
- 'sm8735'
- 'mt6991'
- 'sm8650'
- 'mt6989'
- 'sm8635'
- 'sm8550'
- 'sm8450'
- 'sm8475'
- 'sm7675'
- 'sm7635'
- 'sm7550'
- 'sm6375'
default: 'sm8650'
FEIL:
description: "手机型号"
required: true
type: choice
options:
- 'oneplus_13_b'
- 'oneplus_13s_b'
- 'oneplus_13t_b'
- 'oneplus_ace5_pro_b'
- 'oneplus_ace_6'
- 'oneplus_pad_2_pro_b'
- 'oneplus_pad_3_b'
- 'oneplus_ace5_ultra_b'
- 'oneplus_turbo_6'
- 'oneplus_12_b'
- 'oneplus_ace3_pro_b'
- 'oneplus_ace5_b'
- 'oneplus_13r_b'
- 'oneplus_pad2_b'
- 'oneplus_pad_pro_b'
- 'oneplus_ace5_race_b'
- 'oneplus_nord_5_b'
- 'oneplus_11_b'
- 'oneplus_12r_b'
- 'oneplus_ace2_pro_b'
- 'oneplus_ace3_b'
- 'oneplus_open_b'
- 'oneplus_10t_v'
- 'oneplus_11r_b'
- 'oneplus_ace2_b'
- 'oneplus_ace_pro_v'
- 'oneplus_10_pro_b'
- 'oneplus_ace_3v_b'
- 'oneplus_turbo_6v'
- 'oneplus_nord_4_b'
- 'oneplus_nord_ce4_lite_5g'
- 'oneplus_nord_ce4_b'
default: 'oneplus_12_b'
ANDROID_VERSION:
description: "内核安卓KMI版本"
required: true
type: choice
options:
- 'android15'
- 'android14'
- 'android13'
- 'android12'
default: 'android14'
KERNEL_VERSION:
description: "内核版本"
required: true
type: choice
options:
- '6.6'
- '6.1'
- '5.15'
- '5.10'
default: '6.1'
lz4kd:
description: "是否启用lz4kd(6.1 关闭时使用 lz4 + zstd; 6.6 关闭时使用 lz4)"
required: true
type: choice
options:
- 'On'
- 'Off'
default: 'Off'
bbg:
description: "是否启用BBG基带保护"
required: true
type: choice
options:
- 'On'
- 'Off'
default: 'On'
bbr:
description: "是否启用BBR算法(对手机日用无太大意义甚至可能负优化)"
required: true
type: choice
options:
- 'On'
- 'Off'
default: 'Off'
proxy:
description: "是否添加代理性能优化(联发科芯片跑的时候请关闭否则出现恶性问题)"
required: true
type: choice
options:
- 'On'
- 'Off'
default: 'On'
UNICODE_BYPASS:
description: "是否添加Unicode零宽绕过修复补丁(高内核版本不推荐开启, 建议使用 https://t.me/real5ec1cff/271 无痛修复)"
required: true
type: choice
options:
- 'On'
- 'Off'
default: 'Off'
jobs:
build:
name: For ${{ github.event.inputs.FEIL }} lz4kd ${{ github.event.inputs.lz4kd }}
runs-on: ubuntu-latest
env:
CCACHE_COMPILERCHECK: "%compiler% -dumpmachine; %compiler% -dumpversion"
CCACHE_NOHASHDIR: "true"
CCACHE_HARDLINK: "true"
CCACHE_MAXSIZE: 8G
steps:
- name: "🚀 Maximize Build Space | 最大化构建空间"
if: ${{ github.event.inputs.KERNEL_VERSION == '5.10' || github.event.inputs.KERNEL_VERSION == '5.15' }}
uses: easimon/maximize-build-space@master
with:
root-reserve-mb: 8192
temp-reserve-mb: 4096
remove-dotnet: 'true'
remove-android: 'true'
remove-haskell: 'true'
remove-codeql: 'true'
- name: "⚙️ Setup Cache Env | 设置缓存环境"
run: |
echo "🔧 正在设置机型隔离缓存目录..."
echo "CCACHE_DIR=$HOME/.ccache_${{ github.event.inputs.FEIL }}_Kernel" >> $GITHUB_ENV
mkdir -p "$HOME/.ccache_${{ github.event.inputs.FEIL }}_Kernel"
echo "✅ 缓存目录已设置: $HOME/.ccache_${{ github.event.inputs.FEIL }}_Kernel"
- name: "🔐 Configure Git | 配置Git账户"
run: |
echo "🔧 正在配置Git用户信息..."
git config --global user.name "build"
git config --global user.email "2210077278@qq.com"
echo "✅ Git配置完成"
- name: "📦 Cache & Install Dependencies | 缓存 & 安装构建依赖"
uses: awalsh128/cache-apt-pkgs-action@latest
with:
packages: python3 git curl ccache libelf-dev build-essential flex bison libssl-dev libncurses-dev liblz4-tool zlib1g-dev libxml2-utils rsync unzip gawk dos2unix
execute_install_scripts: true
- name: "💾 Restore ccache | 恢复ccache缓存"
uses: actions/cache@v5
with:
path: ${{ env.CCACHE_DIR }}
key: ccache-${{ runner.os }}-${{ github.ref }}-${{ github.event.inputs.FEIL }}-Kernel
restore-keys: |
ccache-${{ runner.os }}-${{ github.event.inputs.FEIL }}-Kernel
ccache-${{ runner.os }}-Kernel
- name: "⚙️ Initialize ccache | 初始化ccache"
run: |
echo "🔧 正在初始化ccache..."
INIT_FLAG="${{ env.CCACHE_DIR }}/.ccache_initialized"
if command -v ccache >/dev/null 2>&1; then
if [ ! -f "$INIT_FLAG" ]; then
mkdir -p "${{ env.CCACHE_DIR }}"
ccache -M ${{ env.CCACHE_MAXSIZE }}
touch "$INIT_FLAG"
echo "🆕 ccache初始化完成"
else
echo "ℹ️ ccache已存在,跳过初始化"
fi
else
echo "⚠️ 未找到ccache命令,跳过初始化"
fi
# 显示缓存统计
ccache -s
echo "✅ ccache初始化流程完成"
- name: "📥 Install Repo Tool | 安装Repo工具"
run: |
echo "⬇️ 正在下载repo工具..."
curl -fsSL https://storage.googleapis.com/git-repo-downloads/repo > ~/repo
chmod a+x ~/repo
sudo mv ~/repo /usr/local/bin/repo
echo "✅ repo工具安装完成"
- name: "⬇️ Clone Kernel Source | 克隆内核源码"
run: |
echo "🌐 正在初始化内核仓库..."
mkdir kernel_workspace && cd kernel_workspace
repo init -u https://github.com/Xiaomichael/kernel_manifest.git -b refs/heads/oneplus/${{ github.event.inputs.CPU }} -m ${{ github.event.inputs.FEIL }}.xml --depth=1
echo "🔄 同步代码库(使用$(nproc --all)线程)..."
repo sync -c -j$(nproc --all) --no-tags --no-clone-bundle --force-sync
rm kernel_platform/common/android/abi_gki_protected_exports_* || echo "No protected exports!"
rm kernel_platform/msm-kernel/android/abi_gki_protected_exports_* || echo "No protected exports!"
# Remove -dirty in kernel version
sed -i 's/ -dirty//g' kernel_platform/common/scripts/setlocalversion
sed -i 's/ -dirty//g' kernel_platform/msm-kernel/scripts/setlocalversion
sed -i 's/ -dirty//g' kernel_platform/external/dtc/scripts/setlocalversion
sed -i '$i res=$(echo "$res" | sed '\''s/-dirty//g'\'')' kernel_platform/common/scripts/setlocalversion
sed -i '$i res=$(echo "$res" | sed '\''s/-dirty//g'\'')' kernel_platform/msm-kernel/scripts/setlocalversion
sed -i '$i res=$(echo "$res" | sed '\''s/-dirty//g'\'')' kernel_platform/external/dtc/scripts/setlocalversion
if [ "${{ github.event.inputs.KERNEL_VERSION }}" != "6.6" ]; then
sed -i '$s|echo "\$res"|echo "-${{ github.event.inputs.ANDROID_VERSION }}-oki-xiaoxiaow"|' kernel_platform/common/scripts/setlocalversion
sed -i '$s|echo "\$res"|echo "-${{ github.event.inputs.ANDROID_VERSION }}-oki-xiaoxiaow"|' kernel_platform/msm-kernel/scripts/setlocalversion
sed -i '$s|echo "\$res"|echo "-${{ github.event.inputs.ANDROID_VERSION }}-oki-xiaoxiaow"|' kernel_platform/external/dtc/scripts/setlocalversion
else
ESCAPED_SUFFIX=$(printf '%s\n' "-${{ github.event.inputs.ANDROID_VERSION }}-oki-xiaoxiaow" | sed 's:[\/&]:\\&:g')
sudo sed -i "s/-4k/$ESCAPED_SUFFIX/g" kernel_platform/common/arch/arm64/configs/gki_defconfig
sed -i 's/${scm_version}//' kernel_platform/common/scripts/setlocalversion
sed -i 's/${scm_version}//' kernel_platform/msm-kernel/scripts/setlocalversion
fi
echo "✅ 内核配置完成"
- name: "⚡ Setup Baseband-guard | 配置 Baseband-guard"
if: ${{ github.event.inputs.bbg == 'On' }}
run: |
set -e
cd kernel_workspace/kernel_platform/common
curl -sSL https://github.com/vc-teahouse/Baseband-guard/raw/main/setup.sh -o setup.sh
bash setup.sh
- name: "🔧 Setup ZRAM | 配置 ZRAM"
run: |
cd kernel_workspace
echo "⬇️ 下载ZRAM补丁..."
git clone https://github.com/Xiaomichael/kernel_patches.git
git clone https://github.com/ShirkNeko/SukiSU_patch.git
cd kernel_platform
echo "📝 复制补丁文件..."
cp ../kernel_patches/zram_patches/001-lz4.patch ./common/
cp ../kernel_patches/zram_patches/lz4armv8.S ./common/lib
cp ../kernel_patches/zram_patches/002-zstd.patch ./common/
if [ "${{ github.event.inputs.UNICODE_BYPASS }}" = "On" ]; then
if [ "${{ github.event.inputs.KERNEL_VERSION }}" = "6.1" ] || [ "${{ github.event.inputs.KERNEL_VERSION }}" = "6.6" ]; then
cp ../kernel_patches/common/unicode_bypass_fix_6.1+.patch ./common/unicode_bypass_fix.patch
elif [ "${{ github.event.inputs.KERNEL_VERSION }}" = "5.15" ] || [ "${{ github.event.inputs.KERNEL_VERSION }}" = "5.10" ]; then
cp ../kernel_patches/common/unicode_bypass_fix_6.1-.patch ./common/unicode_bypass_fix.patch
fi
fi
if [ "${{ github.event.inputs.lz4kd }}" == "On" ]; then
# Copy lz4k from ShirkNeko
cp -r ../SukiSU_patch/other/zram/lz4k/include/linux/* ./common/include/linux
cp -r ../SukiSU_patch/other/zram/lz4k/lib/* ./common/lib
cp -r ../SukiSU_patch/other/zram/lz4k/crypto/* ./common/crypto
cp -r ../SukiSU_patch/other/zram/lz4k_oplus ./common/lib/
fi
echo "🔧 应用补丁..."
cd ./common
if [ "${{ github.event.inputs.UNICODE_BYPASS }}" = "On" ]; then
echo "📦 正在应用Unicode零宽绕过修复补丁..."
patch -p1 < unicode_bypass_fix.patch
fi
if [ "${{ github.event.inputs.lz4kd }}" = "Off" ] && [ "${{ github.event.inputs.KERNEL_VERSION }}" = "6.1" ]; then
echo "📦 应用lz4+zstd补丁..."
git apply -p1 < 001-lz4.patch || true
patch -p1 < 002-zstd.patch || true
fi
if [ "${{ github.event.inputs.lz4kd }}" = "Off" ] && [ "${{ github.event.inputs.KERNEL_VERSION }}" = "6.6" ]; then
echo "📦 应用lz4补丁..."
git apply -p1 < 001-lz4.patch || true
fi
if [ "${{ github.event.inputs.lz4kd }}" == "On" ]; then
echo "🚀 应用lz4kd补丁..."
cp ../../SukiSU_patch/other/zram/zram_patch/${{ github.event.inputs.KERNEL_VERSION }}/lz4kd.patch ./
patch -p1 -F 3 < lz4kd.patch || true
cp ../../SukiSU_patch/other/zram/zram_patch/${{ github.event.inputs.KERNEL_VERSION }}/lz4k_oplus.patch ./
patch -p1 -F 3 < lz4k_oplus.patch || true
fi
echo "✅ 所有补丁应用完成"
- name: "⚙️ Apply SCHED Patch | 应用风驰补丁"
if: ${{ github.event.inputs.KERNEL_VERSION == '6.6' }}
run: |
cd kernel_workspace/kernel_platform/common
echo "⬇️ 正在拉取风驰补丁"
if [ "${{ github.event.inputs.FEIL }}" == "oneplus_ace5_ultra" ] || [ "${{ github.event.inputs.FEIL }}" = "oneplus_ace5_ultra_b" ]; then
git clone https://github.com/Numbersf/SCHED_PATCH.git -b "mt6991"
else
git clone https://github.com/Numbersf/SCHED_PATCH.git -b "sm8750"
fi
cp ./SCHED_PATCH/fengchi_${{ github.event.inputs.FEIL }}.patch ./
if [[ -f "fengchi_${{ github.event.inputs.FEIL }}.patch" ]]; then
echo "⚙️ 开始应用风驰补丁"
dos2unix "fengchi_${{ github.event.inputs.FEIL }}.patch"
patch -p1 -F 3 < "fengchi_${{ github.event.inputs.FEIL }}.patch"
echo "✅ 完美风驰补丁应用完成"
else
sed -i '1iobj-y += hmbird_patch.o' drivers/Makefile
wget https://github.com/Numbersf/Action-Build/raw/SukiSU-Ultra/patches/hmbird_patch.patch
echo "⚙️ 正在打OGKI转换GKI补丁"
patch -p1 -F 3 < hmbird_patch.patch
echo "✅ OGKI转换GKI_patch完成"
fi
- name: "⚙️ Configure Kernel Options | 配置内核选项"
run: |
echo "⚙️ 正在配置内核编译选项..."
cd kernel_workspace/kernel_platform
if [ "${{ github.event.inputs.bbg }}" == "On" ]; then
echo "⚡ 启用BBG中..."
echo 'CONFIG_BBG=y' >> ./common/arch/arm64/configs/gki_defconfig
echo 'CONFIG_LSM="landlock,lockdown,yama,loadpin,safesetid,integrity,selinux,smack,tomoyo,apparmor,bpf,baseband_guard"' >> ./common/arch/arm64/configs/gki_defconfig
fi
# 添加对 Mountify (backslashxx/mountify) 模块的支持
echo "CONFIG_TMPFS_XATTR=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_TMPFS_POSIX_ACL=y" >> ./common/arch/arm64/configs/gki_defconfig
if [ "${{ github.event.inputs.bbr }}" == "On" ]; then
echo "🌐 启用BBR网络算法..."
echo "CONFIG_TCP_CONG_ADVANCED=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_TCP_CONG_BBR=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_NET_SCH_FQ=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_TCP_CONG_BIC=n" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_TCP_CONG_WESTWOOD=n" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_TCP_CONG_HTCP=n" >> ./common/arch/arm64/configs/gki_defconfig
fi
if [ "${{ github.event.inputs.lz4kd }}" == "On" ]; then
echo "📦 启用lz4kd压缩..."
echo "CONFIG_CRYPTO_LZ4KD=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_CRYPTO_LZ4K_OPLUS=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_ZRAM_WRITEBACK=y" >> ./common/arch/arm64/configs/gki_defconfig
fi
if [ "${{ github.event.inputs.KERNEL_VERSION }}" == "6.1" ] || [ "${{ github.event.inputs.KERNEL_VERSION }}" == "6.6" ]; then
# Add O2 config
echo "📦 为6.1&6.6加入O2优化..."
echo "CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE=y" >> ./common/arch/arm64/configs/gki_defconfig
fi
if [ "${{ github.event.inputs.proxy }}" == "On" ]; then
# Add proxy config
echo "📦 加入代理优化..."
echo "CONFIG_BPF_STREAM_PARSER=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_NETFILTER_XT_SET=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_MAX=65534" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_BITMAP_IP=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_BITMAP_IPMAC=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_BITMAP_PORT=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_HASH_IP=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_HASH_IPMARK=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_HASH_IPPORT=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_HASH_IPPORTIP=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_HASH_IPPORTNET=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_HASH_IPMAC=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_HASH_MAC=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_HASH_NETPORTNET=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_HASH_NET=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_HASH_NETNET=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_HASH_NETPORT=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_HASH_NETIFACE=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_LIST_SET=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP6_NF_NAT=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP6_NF_TARGET_MASQUERADE=y" >> ./common/arch/arm64/configs/gki_defconfig
fi
if [ "${{ github.event.inputs.KERNEL_VERSION }}" = "5.10" ] || [ "${{ github.event.inputs.KERNEL_VERSION }}" = "5.15" ]; then
echo "📦 正在为5.10系与5.15系配置lto中..."
DEFCONFIG=./common/arch/arm64/configs/gki_defconfig
sed -i 's/^CONFIG_LTO=n/CONFIG_LTO=y/' "$DEFCONFIG"
sed -i 's/^CONFIG_LTO_CLANG_FULL=y/CONFIG_LTO_CLANG_THIN=y/' "$DEFCONFIG"
sed -i 's/^CONFIG_LTO_CLANG_NONE=y/CONFIG_LTO_CLANG_THIN=y/' "$DEFCONFIG"
grep -q '^CONFIG_LTO_CLANG_THIN=y' "$DEFCONFIG" || echo 'CONFIG_LTO_CLANG_THIN=y' >> "$DEFCONFIG"
fi
#跳过将uapi标准头安装到 usr/include 目录的不必要操作,节省编译时间
echo "CONFIG_HEADERS_INSTALL=n" >> ./common/arch/arm64/configs/gki_defconfig
# Remove check_defconfig
sed -i 's/check_defconfig//' ./common/build.config.gki
echo "✅ 内核配置更新完成"
- name: "🔨 Build Kernel | 编译内核"
run: |
echo "🏗️ 开始内核编译..."
export KBUILD_BUILD_USER="xiaoxiaow"
export KBUILD_BUILD_HOST="xiaoxiaow_build"
if [ "${{ github.event.inputs.KERNEL_VERSION }}" == "6.1" ]; then
export KBUILD_BUILD_TIMESTAMP="Tue Mar 10 03:53:33 UTC 2026"
export KBUILD_BUILD_VERSION=1
export PATH="$GITHUB_WORKSPACE/kernel_workspace/kernel_platform/prebuilts/clang/host/linux-x86/clang-r487747c/bin:$PATH"
export PATH="/usr/lib/ccache:$PATH"
sudo apt install libelf-dev
cd kernel_workspace/kernel_platform/common
make -j$(nproc --all) LLVM=1 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- CC="ccache clang" RUSTC=../../prebuilts/rust/linux-x86/1.73.0b/bin/rustc PAHOLE=../../prebuilts/kernel-build-tools/linux-x86/bin/pahole LD=ld.lld HOSTLD=ld.lld O=out KCFLAGS+=-O2 gki_defconfig all
elif [ "${{ github.event.inputs.KERNEL_VERSION }}" == "6.6" ]; then
export PATH="/usr/lib/ccache:$GITHUB_WORKSPACE/kernel_workspace/kernel_platform/prebuilts/clang/host/linux-x86/clang-r510928/bin:$PATH"
export PATH="/usr/lib/ccache:$PATH"
sudo apt install libelf-dev
cd kernel_workspace/kernel_platform/common
make -j$(nproc --all) LLVM=1 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- CC="ccache clang" RUSTC=../../prebuilts/rust/linux-x86/1.73.0b/bin/rustc PAHOLE=../../prebuilts/kernel-build-tools/linux-x86/bin/pahole LD=ld.lld HOSTLD=ld.lld O=out KCFLAGS+=-O2 gki_defconfig all
elif [ "${{ github.event.inputs.KERNEL_VERSION }}" == "5.15" ]; then
export PATH="$GITHUB_WORKSPACE/kernel_workspace/kernel_platform/prebuilts/clang/host/linux-x86/clang-r450784e/bin:$PATH"
export PATH="/usr/lib/ccache:$PATH"
sudo apt install libelf-dev
cd kernel_workspace/kernel_platform/common
make -j$(nproc --all) LLVM=1 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- CC="ccache clang" RUSTC=../../prebuilts/rust/linux-x86/1.73.0b/bin/rustc PAHOLE=../../prebuilts/kernel-build-tools/linux-x86/bin/pahole LD=ld.lld HOSTLD=ld.lld O=out gki_defconfig all
elif [ "${{ github.event.inputs.KERNEL_VERSION }}" == "5.10" ]; then
export PATH="$GITHUB_WORKSPACE/kernel_workspace/kernel_platform/prebuilts-master/clang/host/linux-x86/clang-r416183b/bin:$PATH"
export PATH="/usr/lib/ccache:$PATH"
sudo apt install libelf-dev
cd kernel_workspace/kernel_platform/common
make -j$(nproc --all) LLVM_IAS=1 LLVM=1 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- CC="ccache clang" RUSTC=../../prebuilts/rust/linux-x86/1.73.0b/bin/rustc PAHOLE=../../prebuilts/kernel-build-tools/linux-x86/bin/pahole LD=ld.lld HOSTLD=ld.lld O=out gki_defconfig all
fi
# 显示ccache统计信息
ccache -s
echo "✅ 内核编译完成"
- name: "📦 Package Kernel | 打包内核"
run: |
echo "📦 准备AnyKernel3打包环境..."
git clone https://github.com/Xiaomichael/AnyKernel3 --depth=1
rm -rf ./AnyKernel3/.git
mkdir -p kernel_workspace/kernel_platform/out/Final-Image-Find/
dir1=""
dir2=""
image_path=$(find "./kernel_workspace/kernel_platform/common/out/" -name "Image" | head -n 1)
if [ -n "$image_path" ]; then
dir1=$(dirname "$image_path")/
echo "✅ 成功找到 Image 文件"
fi
if [ -n "$image_path" ] && [ -f "$image_path" ]; then
echo "Image file finally located at: $image_path"
cp "$image_path" ./AnyKernel3/Image
cp "$image_path" kernel_workspace/kernel_platform/out/Final-Image-Find/Image
fi
- name: "🧠 Set Artifact Name | 设置产物名称"
id: set_name
run: |
if [ "${{ github.event.inputs.lz4kd }}" = "On" ]; then
echo "ARTIFACT_NAME=Anykernel3_${{ github.event.inputs.FEIL }}_lz4kd_Kernel_Only" >> $GITHUB_OUTPUT
elif [ "${{ github.event.inputs.KERNEL_VERSION }}" = "6.1" ]; then
echo "ARTIFACT_NAME=Anykernel3_${{ github.event.inputs.FEIL }}_lz4_zstd_Kernel_Only" >> $GITHUB_OUTPUT
elif [ "${{ github.event.inputs.KERNEL_VERSION }}" = "6.6" ]; then
echo "ARTIFACT_NAME=Anykernel3_${{ github.event.inputs.FEIL }}_lz4_Kernel_Only" >> $GITHUB_OUTPUT
else
echo "ARTIFACT_NAME=Anykernel3_${{ github.event.inputs.FEIL }}_Kernel_Only" >> $GITHUB_OUTPUT
fi
- name: "📤 Upload AnyKernel3 | 上传 AnyKernel3"
uses: actions/upload-artifact@v7
with:
name: ${{ steps.set_name.outputs.ARTIFACT_NAME }}
path: ./AnyKernel3/*
- name: "📝 Find zram.ko & crypto_zstdn.ko | 查找 zram.ko & crypto_zstdn.ko"
# if: ${{ github.event.inputs.lz4kd == 'On' }}
run: |
find -name zram.ko
find -name crypto_zstdn.ko
- name: "📤 Upload zram.ko | 上传 zram.ko"
# if: ${{ github.event.inputs.lz4kd == 'On' }}
uses: actions/upload-artifact@v7
with:
name: ${{ github.event.inputs.FEIL }}_zram.ko
path: ./kernel_workspace/kernel_platform/common/out/drivers/block/zram/zram.ko
================================================
FILE: .github/workflows/Build KernelSU Next.yml
================================================
name: Build KernelSU Next
on:
workflow_dispatch:
inputs:
CPU:
description: "CPU分支"
required: true
type: choice
options:
- 'sm8750'
- 'sm8735'
- 'mt6991'
- 'sm8650'
- 'mt6989'
- 'sm8635'
- 'sm8550'
- 'sm8450'
- 'sm8475'
- 'sm7675'
- 'sm7635'
- 'sm7550'
- 'sm6375'
default: 'sm8650'
FEIL:
description: "手机型号"
required: true
type: choice
options:
- 'oneplus_13_b'
- 'oneplus_13s_b'
- 'oneplus_13t_b'
- 'oneplus_ace5_pro_b'
- 'oneplus_ace_6'
- 'oneplus_pad_2_pro_b'
- 'oneplus_pad_3_b'
- 'oneplus_ace5_ultra_b'
- 'oneplus_turbo_6'
- 'oneplus_12_b'
- 'oneplus_ace3_pro_b'
- 'oneplus_ace5_b'
- 'oneplus_13r_b'
- 'oneplus_pad2_b'
- 'oneplus_pad_pro_b'
- 'oneplus_ace5_race_b'
- 'oneplus_nord_5_b'
- 'oneplus_11_b'
- 'oneplus_12r_b'
- 'oneplus_ace2_pro_b'
- 'oneplus_ace3_b'
- 'oneplus_open_b'
- 'oneplus_10t_v'
- 'oneplus_11r_b'
- 'oneplus_ace2_b'
- 'oneplus_ace_pro_v'
- 'oneplus_10_pro_b'
- 'oneplus_ace_3v_b'
- 'oneplus_turbo_6v'
- 'oneplus_nord_4_b'
- 'oneplus_nord_ce4_lite_5g'
- 'oneplus_nord_ce4_b'
default: 'oneplus_12_b'
ANDROID_VERSION:
description: "内核安卓KMI版本"
required: true
type: choice
options:
- 'android15'
- 'android14'
- 'android13'
- 'android12'
default: 'android14'
KERNEL_VERSION:
description: "内核版本"
required: true
type: choice
options:
- '6.6'
- '6.1'
- '5.15'
- '5.10'
default: '6.1'
SUSFS:
description: "是否启用SUSFS"
required: true
type: choice
options:
- 'On'
- 'Off'
default: 'Off'
lz4kd:
description: "是否启用lz4kd(6.1 关闭时使用 lz4 + zstd; 6.6 关闭时使用 lz4)"
required: true
type: choice
options:
- 'On'
- 'Off'
default: 'Off'
bbg:
description: "是否启用BBG基带保护"
required: true
type: choice
options:
- 'On'
- 'Off'
default: 'On'
bbr:
description: "是否启用BBR算法(对手机日用无太大意义甚至可能负优化)"
required: true
type: choice
options:
- 'On'
- 'Off'
default: 'Off'
proxy:
description: "是否添加代理性能优化(联发科芯片跑的时候请关闭否则出现恶性问题)"
required: true
type: choice
options:
- 'On'
- 'Off'
default: 'On'
UNICODE_BYPASS:
description: "是否添加Unicode零宽绕过修复补丁(高内核版本不推荐开启, 建议使用 https://t.me/real5ec1cff/271 无痛修复)"
required: true
type: choice
options:
- 'On'
- 'Off'
default: 'Off'
jobs:
build:
name: For ${{ github.event.inputs.FEIL }} lz4kd ${{ github.event.inputs.lz4kd }} SUSFS ${{ github.event.inputs.SUSFS }}
runs-on: ubuntu-latest
env:
CCACHE_COMPILERCHECK: "%compiler% -dumpmachine; %compiler% -dumpversion"
CCACHE_NOHASHDIR: "true"
CCACHE_HARDLINK: "true"
CCACHE_MAXSIZE: 8G
steps:
- name: "🚀 Maximize Build Space | 最大化构建空间"
if: ${{ github.event.inputs.KERNEL_VERSION == '5.10' || github.event.inputs.KERNEL_VERSION == '5.15' }}
uses: easimon/maximize-build-space@master
with:
root-reserve-mb: 8192
temp-reserve-mb: 4096
remove-dotnet: 'true'
remove-android: 'true'
remove-haskell: 'true'
remove-codeql: 'true'
- name: "⚙️ Setup Cache Env | 设置缓存环境"
run: |
echo "🔧 正在设置机型隔离缓存目录..."
echo "CCACHE_DIR=$HOME/.ccache_${{ github.event.inputs.FEIL }}_Next" >> $GITHUB_ENV
mkdir -p "$HOME/.ccache_${{ github.event.inputs.FEIL }}_Next"
echo "✅ 缓存目录已设置: $HOME/.ccache_${{ github.event.inputs.FEIL }}_Next"
- name: "🔐 Configure Git | 配置Git账户"
run: |
echo "🔧 正在配置Git用户信息..."
git config --global user.name "build"
git config --global user.email "2210077278@qq.com"
echo "✅ Git配置完成"
- name: "📦 Cache & Install Dependencies | 缓存 & 安装构建依赖"
uses: awalsh128/cache-apt-pkgs-action@latest
with:
packages: python3 git curl ccache libelf-dev build-essential flex bison libssl-dev libncurses-dev liblz4-tool zlib1g-dev libxml2-utils rsync unzip gawk dos2unix
execute_install_scripts: true
- name: "💾 Restore ccache (With SUSFS) | 恢复ccache缓存 (With SUSFS)"
if: ${{ github.event.inputs.SUSFS == 'On' }}
uses: actions/cache@v5
with:
path: ${{ env.CCACHE_DIR }}
key: ccache-${{ runner.os }}-${{ github.ref }}-${{ github.event.inputs.FEIL }}-Next-SUSFS
restore-keys: |
ccache-${{ runner.os }}-${{ github.event.inputs.FEIL }}-Next-SUSFS
ccache-${{ runner.os }}-Next-SUSFS
- name: "💾 Restore ccache (Without SUSFS) | 恢复ccache缓存 (Without SUSFS)"
if: ${{ github.event.inputs.SUSFS == 'Off' }}
uses: actions/cache@v5
with:
path: ${{ env.CCACHE_DIR }}
key: ccache-${{ runner.os }}-${{ github.ref }}-${{ github.event.inputs.FEIL }}-Next-NoSUSFS
restore-keys: |
ccache-${{ runner.os }}-${{ github.event.inputs.FEIL }}-Next-NoSUSFS
ccache-${{ runner.os }}-Next-NoSUSFS
- name: "⚙️ Initialize ccache | 初始化ccache"
run: |
echo "🔧 正在初始化ccache..."
INIT_FLAG="${{ env.CCACHE_DIR }}/.ccache_initialized"
if command -v ccache >/dev/null 2>&1; then
if [ ! -f "$INIT_FLAG" ]; then
mkdir -p "${{ env.CCACHE_DIR }}"
ccache -M ${{ env.CCACHE_MAXSIZE }}
touch "$INIT_FLAG"
echo "🆕 ccache初始化完成"
else
echo "ℹ️ ccache已存在,跳过初始化"
fi
else
echo "⚠️ 未找到ccache命令,跳过初始化"
fi
# 显示缓存统计
ccache -s
echo "✅ ccache初始化流程完成"
- name: "📥 Install Repo Tool | 安装Repo工具"
run: |
echo "⬇️ 正在下载repo工具..."
curl -fsSL https://storage.googleapis.com/git-repo-downloads/repo > ~/repo
chmod a+x ~/repo
sudo mv ~/repo /usr/local/bin/repo
echo "✅ repo工具安装完成"
- name: "⬇️ Clone Kernel Source | 克隆内核源码"
run: |
mkdir kernel_workspace && cd kernel_workspace
echo "🌐 正在初始化内核仓库..."
repo init -u https://github.com/Xiaomichael/kernel_manifest.git -b refs/heads/oneplus/${{ github.event.inputs.CPU }} -m ${{ github.event.inputs.FEIL }}.xml --depth=1
echo "🔄 同步代码库(使用$(nproc --all)线程)..."
repo sync -c -j$(nproc --all) --no-tags --no-clone-bundle --force-sync
rm kernel_platform/common/android/abi_gki_protected_exports_* || echo "No protected exports!"
rm kernel_platform/msm-kernel/android/abi_gki_protected_exports_* || echo "No protected exports!"
# Remove -dirty in kernel version
sed -i 's/ -dirty//g' kernel_platform/common/scripts/setlocalversion
sed -i 's/ -dirty//g' kernel_platform/msm-kernel/scripts/setlocalversion
sed -i 's/ -dirty//g' kernel_platform/external/dtc/scripts/setlocalversion
sed -i '$i res=$(echo "$res" | sed '\''s/-dirty//g'\'')' kernel_platform/common/scripts/setlocalversion
sed -i '$i res=$(echo "$res" | sed '\''s/-dirty//g'\'')' kernel_platform/msm-kernel/scripts/setlocalversion
sed -i '$i res=$(echo "$res" | sed '\''s/-dirty//g'\'')' kernel_platform/external/dtc/scripts/setlocalversion
if [ "${{ github.event.inputs.KERNEL_VERSION }}" != "6.6" ]; then
sed -i '$s|echo "\$res"|echo "-${{ github.event.inputs.ANDROID_VERSION }}-oki-xiaoxiaow"|' kernel_platform/common/scripts/setlocalversion
sed -i '$s|echo "\$res"|echo "-${{ github.event.inputs.ANDROID_VERSION }}-oki-xiaoxiaow"|' kernel_platform/msm-kernel/scripts/setlocalversion
sed -i '$s|echo "\$res"|echo "-${{ github.event.inputs.ANDROID_VERSION }}-oki-xiaoxiaow"|' kernel_platform/external/dtc/scripts/setlocalversion
else
ESCAPED_SUFFIX=$(printf '%s\n' "-${{ github.event.inputs.ANDROID_VERSION }}-oki-xiaoxiaow" | sed 's:[\/&]:\\&:g')
sudo sed -i "s/-4k/$ESCAPED_SUFFIX/g" kernel_platform/common/arch/arm64/configs/gki_defconfig
sed -i 's/${scm_version}//' kernel_platform/common/scripts/setlocalversion
sed -i 's/${scm_version}//' kernel_platform/msm-kernel/scripts/setlocalversion
fi
echo "✅ 内核配置完成"
- name: "⚡ Setup Baseband-guard | 配置 Baseband-guard"
if: ${{ github.event.inputs.bbg == 'On'}}
run: |
set -e
cd kernel_workspace/kernel_platform/common
echo "🛠️ 正在设置BBG..."
curl -sSL https://github.com/vc-teahouse/Baseband-guard/raw/main/setup.sh -o setup.sh
bash setup.sh
- name: "⚡ Setup KernelSU Next | 配置 KernelSU Next"
run: |
cd kernel_workspace/kernel_platform
# 下载并执行设置脚本
echo "🛠️ 正在设置KernelSU Next..."
curl -LSs "https://raw.githubusercontent.com/pershoot/KernelSU-Next/dev-susfs/kernel/setup.sh" | bash -s dev-susfs
cd KernelSU-Next
KSU_VERSION=$(expr $(curl -sI "https://api.github.com/repos/KernelSU-Next/KernelSU-Next/commits?sha=dev&per_page=1" | grep -i "link:" | sed -n 's/.*page=\([0-9]*\)>; rel="last".*/\1/p') "+" 30000)
echo "KSUVER=$KSU_VERSION" >> $GITHUB_ENV
sed -i "s/DKSU_VERSION=11998/DKSU_VERSION=${KSU_VERSION}/" kernel/Makefile
echo "✅ KernelSU Next 配置完成"
- name: "🔧 Setup Patches | 配置补丁"
run: |
cd kernel_workspace
echo "⬇️ 下载所需补丁..."
if [ "${{ github.event.inputs.SUSFS }}" == "On" ]; then
git clone https://github.com/cctv18/susfs4oki.git -b oki-${{ github.event.inputs.ANDROID_VERSION }}-${{ github.event.inputs.KERNEL_VERSION }}
fi
git clone https://github.com/Xiaomichael/kernel_patches.git
git clone https://github.com/ShirkNeko/SukiSU_patch.git
cd kernel_platform
echo "📝 复制补丁文件..."
if [ "${{ github.event.inputs.SUSFS }}" == "On" ]; then
cp ../susfs4oki/kernel_patches/50_add_susfs_in_gki-${{ github.event.inputs.ANDROID_VERSION }}-${{ github.event.inputs.KERNEL_VERSION }}.patch ./common/
cp ../susfs4oki/kernel_patches/fs/* ./common/fs/
cp ../susfs4oki/kernel_patches/include/linux/* ./common/include/linux/
else
cp ../kernel_patches/sukisu/scope_min_manual_hooks_v1.9.patch ./common/
fi
cp ../kernel_patches/zram_patches/001-lz4.patch ./common/
cp ../kernel_patches/zram_patches/lz4armv8.S ./common/lib
cp ../kernel_patches/zram_patches/002-zstd.patch ./common/
if [ "${{ github.event.inputs.UNICODE_BYPASS }}" = "On" ]; then
if [ "${{ github.event.inputs.KERNEL_VERSION }}" = "6.1" ] || [ "${{ github.event.inputs.KERNEL_VERSION }}" = "6.6" ]; then
cp ../kernel_patches/common/unicode_bypass_fix_6.1+.patch ./common/unicode_bypass_fix.patch
elif [ "${{ github.event.inputs.KERNEL_VERSION }}" = "5.15" ] || [ "${{ github.event.inputs.KERNEL_VERSION }}" = "5.10" ]; then
cp ../kernel_patches/common/unicode_bypass_fix_6.1-.patch ./common/unicode_bypass_fix.patch
fi
fi
if [ "${{ github.event.inputs.lz4kd }}" == "On" ]; then
# Copy lz4k from ShirkNeko
cp -r ../SukiSU_patch/other/zram/lz4k/include/linux/* ./common/include/linux
cp -r ../SukiSU_patch/other/zram/lz4k/lib/* ./common/lib
cp -r ../SukiSU_patch/other/zram/lz4k/crypto/* ./common/crypto
cp -r ../SukiSU_patch/other/zram/lz4k_oplus ./common/lib/
fi
echo "🔧 应用补丁..."
cd ./common
if [ "${{ github.event.inputs.UNICODE_BYPASS }}" = "On" ]; then
echo "📦 正在应用Unicode零宽绕过修复补丁..."
patch -p1 < unicode_bypass_fix.patch
fi
if [ "${{ github.event.inputs.lz4kd }}" = "Off" ] && [ "${{ github.event.inputs.KERNEL_VERSION }}" = "6.1" ]; then
echo "📦 应用lz4+zstd补丁..."
git apply -p1 < 001-lz4.patch || true
patch -p1 < 002-zstd.patch || true
fi
if [ "${{ github.event.inputs.lz4kd }}" = "Off" ] && [ "${{ github.event.inputs.KERNEL_VERSION }}" = "6.6" ]; then
echo "📦 应用lz4补丁..."
git apply -p1 < 001-lz4.patch || true
fi
if [ "${{ github.event.inputs.lz4kd }}" == "On" ]; then
echo "🚀 应用lz4kd补丁..."
cp ../../SukiSU_patch/other/zram/zram_patch/${{ github.event.inputs.KERNEL_VERSION }}/lz4kd.patch ./
patch -p1 -F 3 < lz4kd.patch || true
cp ../../SukiSU_patch/other/zram/zram_patch/${{ github.event.inputs.KERNEL_VERSION }}/lz4k_oplus.patch ./
patch -p1 -F 3 < lz4k_oplus.patch || true
fi
if [ "${{ github.event.inputs.SUSFS }}" == "On" ]; then
echo "📦 应用SUSFS补丁..."
patch -p1 < 50_add_susfs_in_gki-${{ github.event.inputs.ANDROID_VERSION }}-${{ github.event.inputs.KERNEL_VERSION }}.patch || true
cp ../../kernel_patches/69_hide_stuff.patch ./
patch -p1 -F 3 < 69_hide_stuff.patch
else
echo "📦 应用MANUAL_HOOK补丁..."
patch -p1 --fuzz=3 < scope_min_manual_hooks_v1.9.patch
fi
echo "✅ 所有补丁应用完成"
- name: "⚙️ Apply SCHED Patch | 应用风驰补丁"
if: ${{ github.event.inputs.KERNEL_VERSION == '6.6' }}
run: |
cd kernel_workspace/kernel_platform/common
echo "⬇️ 正在拉取风驰补丁"
if [ "${{ github.event.inputs.FEIL }}" == "oneplus_ace5_ultra" ] || [ "${{ github.event.inputs.FEIL }}" = "oneplus_ace5_ultra_b" ]; then
git clone https://github.com/Numbersf/SCHED_PATCH.git -b "mt6991"
else
git clone https://github.com/Numbersf/SCHED_PATCH.git -b "sm8750"
fi
cp ./SCHED_PATCH/fengchi_${{ github.event.inputs.FEIL }}.patch ./
if [[ -f "fengchi_${{ github.event.inputs.FEIL }}.patch" ]]; then
echo "⚙️ 开始应用风驰补丁"
dos2unix "fengchi_${{ github.event.inputs.FEIL }}.patch"
patch -p1 -F 3 < "fengchi_${{ github.event.inputs.FEIL }}.patch"
echo "✅ 完美风驰补丁应用完成"
else
sed -i '1iobj-y += hmbird_patch.o' drivers/Makefile
wget https://github.com/Numbersf/Action-Build/raw/SukiSU-Ultra/patches/hmbird_patch.patch
echo "⚙️ 正在打OGKI转换GKI补丁"
patch -p1 -F 3 < hmbird_patch.patch
echo "✅ OGKI转换GKI_patch完成"
fi
- name: "⚙️ Configure Kernel Options | 配置内核选项"
run: |
cd kernel_workspace/kernel_platform
echo "⚙️ 正在配置内核编译选项..."
# Add KSU configuration settings
echo "📦 启用 KSU 支持..."
echo "CONFIG_KSU=y" >> ./common/arch/arm64/configs/gki_defconfig
if [ "${{ github.event.inputs.SUSFS }}" == "On" ]; then
echo "📦 启用 SUSFS 功能..."
echo "CONFIG_KSU_SUSFS=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_KSU_SUSFS_SUS_PATH=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_KSU_SUSFS_SUS_MOUNT=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_KSU_SUSFS_SUS_KSTAT=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_KSU_SUSFS_SPOOF_UNAME=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_KSU_SUSFS_ENABLE_LOG=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_KSU_SUSFS_HIDE_KSU_SUSFS_SYMBOLS=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_KSU_SUSFS_SPOOF_CMDLINE_OR_BOOTCONFIG=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_KSU_SUSFS_OPEN_REDIRECT=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_KSU_SUSFS_SUS_MAP=y" >> ./common/arch/arm64/configs/gki_defconfig
else
echo "📦 启用 MANUAL_HOOK..."
echo "CONFIG_KSU_SUSFS=n" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_KSU_MANUAL_HOOK=y" >> ./common/arch/arm64/configs/gki_defconfig
fi
#添加对 Mountify (backslashxx/mountify) 模块的支持
echo "CONFIG_TMPFS_XATTR=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_TMPFS_POSIX_ACL=y" >> ./common/arch/arm64/configs/gki_defconfig
if [ "${{ github.event.inputs.bbg }}" == "On" ]; then
echo "⚡ 启用BBG中..."
echo 'CONFIG_BBG=y' >> ./common/arch/arm64/configs/gki_defconfig
echo 'CONFIG_LSM="landlock,lockdown,yama,loadpin,safesetid,integrity,selinux,smack,tomoyo,apparmor,bpf,baseband_guard"' >> ./common/arch/arm64/configs/gki_defconfig
fi
if [ "${{ github.event.inputs.bbr }}" == "On" ]; then
echo "🌐 启用BBR网络算法..."
echo "CONFIG_TCP_CONG_ADVANCED=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_TCP_CONG_BBR=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_NET_SCH_FQ=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_TCP_CONG_BIC=n" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_TCP_CONG_WESTWOOD=n" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_TCP_CONG_HTCP=n" >> ./common/arch/arm64/configs/gki_defconfig
fi
if [ "${{ github.event.inputs.lz4kd }}" == "On" ]; then
echo "📦 启用lz4kd压缩..."
echo "CONFIG_CRYPTO_LZ4KD=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_CRYPTO_LZ4K_OPLUS=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_ZRAM_WRITEBACK=y" >> ./common/arch/arm64/configs/gki_defconfig
fi
if [ "${{ github.event.inputs.KERNEL_VERSION }}" == "6.1" ] || [ "${{ github.event.inputs.KERNEL_VERSION }}" == "6.6" ]; then
# Add O2 config
echo "📦 为6.1&6.6加入O2优化..."
echo "CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE=y" >> ./common/arch/arm64/configs/gki_defconfig
fi
if [ "${{ github.event.inputs.proxy }}" == "On" ]; then
# Add proxy config
echo "CONFIG_BPF_STREAM_PARSER=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_NETFILTER_XT_SET=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_MAX=65534" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_BITMAP_IP=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_BITMAP_IPMAC=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_BITMAP_PORT=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_HASH_IP=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_HASH_IPMARK=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_HASH_IPPORT=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_HASH_IPPORTIP=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_HASH_IPPORTNET=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_HASH_IPMAC=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_HASH_MAC=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_HASH_NETPORTNET=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_HASH_NET=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_HASH_NETNET=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_HASH_NETPORT=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_HASH_NETIFACE=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_LIST_SET=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP6_NF_NAT=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP6_NF_TARGET_MASQUERADE=y" >> ./common/arch/arm64/configs/gki_defconfig
fi
if [ "${{ github.event.inputs.KERNEL_VERSION }}" == "5.10" ] || [ "${{ github.event.inputs.KERNEL_VERSION }}" == "5.15" ]; then
echo "📦 正在为5.10系与5.15系配置lto中...."
DEFCONFIG=./common/arch/arm64/configs/gki_defconfig
sed -i 's/^CONFIG_LTO=n/CONFIG_LTO=y/' "$DEFCONFIG"
sed -i 's/^CONFIG_LTO_CLANG_FULL=y/CONFIG_LTO_CLANG_THIN=y/' "$DEFCONFIG"
sed -i 's/^CONFIG_LTO_CLANG_NONE=y/CONFIG_LTO_CLANG_THIN=y/' "$DEFCONFIG"
grep -q '^CONFIG_LTO_CLANG_THIN=y' "$DEFCONFIG" || echo 'CONFIG_LTO_CLANG_THIN=y' >> "$DEFCONFIG"
fi
#跳过将uapi标准头安装到 usr/include 目录的不必要操作,节省编译时间
echo "CONFIG_HEADERS_INSTALL=n" >> ./common/arch/arm64/configs/gki_defconfig
sed -i 's/check_defconfig//' ./common/build.config.gki
echo "✅ 内核配置更新完成"
- name: "🔨 Build Kernel | 编译内核"
run: |
echo "🏗️ 开始内核编译..."
export KBUILD_BUILD_USER="xiaoxiaow"
export KBUILD_BUILD_HOST="xiaoxiaow_build"
if [ "${{ github.event.inputs.KERNEL_VERSION }}" == "6.1" ]; then
export KBUILD_BUILD_TIMESTAMP="Tue Mar 10 03:53:33 UTC 2026"
export KBUILD_BUILD_VERSION=1
export PATH="$GITHUB_WORKSPACE/kernel_workspace/kernel_platform/prebuilts/clang/host/linux-x86/clang-r487747c/bin:$PATH"
export PATH="/usr/lib/ccache:$PATH"
sudo apt install libelf-dev
cd kernel_workspace/kernel_platform/common
make -j$(nproc --all) LLVM=1 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- CC="ccache clang" RUSTC=../../prebuilts/rust/linux-x86/1.73.0b/bin/rustc PAHOLE=../../prebuilts/kernel-build-tools/linux-x86/bin/pahole LD=ld.lld HOSTLD=ld.lld O=out KCFLAGS+=-O2 gki_defconfig all
elif [ "${{ github.event.inputs.KERNEL_VERSION }}" == "6.6" ]; then
export PATH="/usr/lib/ccache:$GITHUB_WORKSPACE/kernel_workspace/kernel_platform/prebuilts/clang/host/linux-x86/clang-r510928/bin:$PATH"
export PATH="/usr/lib/ccache:$PATH"
sudo apt install libelf-dev
cd kernel_workspace/kernel_platform/common
make -j$(nproc --all) LLVM=1 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- CC="ccache clang" RUSTC=../../prebuilts/rust/linux-x86/1.73.0b/bin/rustc PAHOLE=../../prebuilts/kernel-build-tools/linux-x86/bin/pahole LD=ld.lld HOSTLD=ld.lld O=out KCFLAGS+=-O2 gki_defconfig all
elif [ "${{ github.event.inputs.KERNEL_VERSION }}" == "5.15" ]; then
export PATH="$GITHUB_WORKSPACE/kernel_workspace/kernel_platform/prebuilts/clang/host/linux-x86/clang-r450784e/bin:$PATH"
export PATH="/usr/lib/ccache:$PATH"
sudo apt install libelf-dev
cd kernel_workspace/kernel_platform/common
make -j$(nproc --all) LLVM=1 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- CC="ccache clang" RUSTC=../../prebuilts/rust/linux-x86/1.73.0b/bin/rustc PAHOLE=../../prebuilts/kernel-build-tools/linux-x86/bin/pahole LD=ld.lld HOSTLD=ld.lld O=out gki_defconfig all
elif [ "${{ github.event.inputs.KERNEL_VERSION }}" == "5.10" ]; then
export PATH="$GITHUB_WORKSPACE/kernel_workspace/kernel_platform/prebuilts-master/clang/host/linux-x86/clang-r416183b/bin:$PATH"
export PATH="/usr/lib/ccache:$PATH"
sudo apt install libelf-dev
cd kernel_workspace/kernel_platform/common
make -j$(nproc --all) LLVM_IAS=1 LLVM=1 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- CC="ccache clang" RUSTC=../../prebuilts/rust/linux-x86/1.73.0b/bin/rustc PAHOLE=../../prebuilts/kernel-build-tools/linux-x86/bin/pahole LD=ld.lld HOSTLD=ld.lld O=out gki_defconfig all
fi
# 显示ccache统计信息
ccache -s
echo "✅ 内核编译完成"
- name: "📦 Package Kernel | 打包内核"
run: |
echo "📦 准备AnyKernel3打包环境..."
git clone https://github.com/Xiaomichael/AnyKernel3 --depth=1
rm -rf ./AnyKernel3/.git
mkdir -p kernel_workspace/kernel_platform/out/Final-Image-Find/
dir1=""
dir2=""
image_path=$(find "./kernel_workspace/kernel_platform/common/out/" -name "Image" | head -n 1)
if [ -n "$image_path" ]; then
dir1=$(dirname "$image_path")/
echo "✅ 成功找到 Image 文件"
fi
if [ -n "$image_path" ] && [ -f "$image_path" ]; then
echo "Image file finally located at: $image_path"
cp "$image_path" ./AnyKernel3/Image
cp "$image_path" kernel_workspace/kernel_platform/out/Final-Image-Find/Image
fi
- name: "🧠 Set Artifact Name | 设置产物名称"
id: set_name
run: |
if [ "${{ github.event.inputs.lz4kd }}" = "On" ]; then
BASE_NAME="${{ github.event.inputs.FEIL }}_KernelSU_Next_lz4kd_${{ env.KSUVER }}"
elif [ "${{ github.event.inputs.KERNEL_VERSION }}" = "6.1" ]; then
BASE_NAME="${{ github.event.inputs.FEIL }}_KernelSU_Next_lz4_zstd_${{ env.KSUVER }}"
elif [ "${{ github.event.inputs.KERNEL_VERSION }}" = "6.6" ]; then
BASE_NAME="${{ github.event.inputs.FEIL }}_KernelSU_Next_lz4_${{ env.KSUVER }}"
else
BASE_NAME="${{ github.event.inputs.FEIL }}_KernelSU_Next_${{ env.KSUVER }}"
fi
if [ "${{ github.event.inputs.SUSFS }}" = "On" ]; then
FINAL_NAME="${BASE_NAME}_SUSFS"
else
FINAL_NAME="${BASE_NAME}"
fi
echo "ARTIFACT_NAME=${FINAL_NAME}" >> $GITHUB_OUTPUT
- name: "📤 Upload AnyKernel3 | 上传 AnyKernel3"
uses: actions/upload-artifact@v7
with:
name: ${{ steps.set_name.outputs.ARTIFACT_NAME }}
path: ./AnyKernel3/*
- name: "📝 Find zram.ko & crypto_zstdn.ko | 查找 zram.ko & crypto_zstdn.ko"
run: |
find -name zram.ko
find -name crypto_zstdn.ko
- name: "📤 Upload zram.ko | 上传 zram.ko"
uses: actions/upload-artifact@v7
with:
name: ${{ github.event.inputs.FEIL }}_zram.ko
path: ./kernel_workspace/kernel_platform/common/out/drivers/block/zram/zram.ko
# - name: "🤖 Get bot script | 获取 bot 脚本"
# uses: actions/checkout@v6
# with:
# path: bot
# - name: "📤 Upload to telegram | 上传至Telegram群组"
# run: |
# if [ ! -z "${{ secrets.BOT_TOKEN }}" ]; then
# echo "📤 正在上传到Telegram..."
# cd AnyKernel3
# zip -q -r "../${{ steps.set_name.outputs.ARTIFACT_NAME }}.zip" ./*
# cd ..
# pip3 install telethon
# python3 ./bot/script/buildbot.py "./${{ steps.set_name.outputs.ARTIFACT_NAME }}.zip"
# echo "✅ 文件已上传到Telegram"
# fi
# env:
# CHATID: ${{secrets.CHATID}}
# BOT_TOKEN: ${{secrets.BOT_TOKEN}}
# MESSAGE_THREAD_ID: ${{secrets.MESSAGE_THREAD_ID}}
# KernelVer: ${{ github.event.inputs.ANDROID_VERSION}}-${{ github.event.inputs.KERNEL_VERSION }}
# DEVICE: ${{ github.event.inputs.FEIL }}
# KPM: Not Support
# LZ4KD: ${{ github.event.inputs.lz4kd }}
# BBR: ${{ github.event.inputs.bbr }}
# KSU_VAR: "NEXT"
================================================
FILE: .github/workflows/Build KernelSU.yml
================================================
name: Build KernelSU Official
on:
workflow_dispatch:
inputs:
CPU:
description: "CPU分支"
required: true
type: choice
options:
- 'sm8750'
- 'sm8735'
- 'mt6991'
- 'sm8650'
- 'mt6989'
- 'sm8635'
- 'sm8550'
- 'sm8450'
- 'sm8475'
- 'sm7675'
- 'sm7635'
- 'sm7550'
- 'sm6375'
default: 'sm8650'
FEIL:
description: "手机型号"
required: true
type: choice
options:
- 'oneplus_13_b'
- 'oneplus_13s_b'
- 'oneplus_13t_b'
- 'oneplus_ace5_pro_b'
- 'oneplus_ace_6'
- 'oneplus_pad_2_pro_b'
- 'oneplus_pad_3_b'
- 'oneplus_ace5_ultra_b'
- 'oneplus_turbo_6'
- 'oneplus_12_b'
- 'oneplus_ace3_pro_b'
- 'oneplus_ace5_b'
- 'oneplus_13r_b'
- 'oneplus_pad2_b'
- 'oneplus_pad_pro_b'
- 'oneplus_ace5_race_b'
- 'oneplus_nord_5_b'
- 'oneplus_11_b'
- 'oneplus_12r_b'
- 'oneplus_ace2_pro_b'
- 'oneplus_ace3_b'
- 'oneplus_open_b'
- 'oneplus_10t_v'
- 'oneplus_11r_b'
- 'oneplus_ace2_b'
- 'oneplus_ace_pro_v'
- 'oneplus_10_pro_b'
- 'oneplus_ace_3v_b'
- 'oneplus_turbo_6v'
- 'oneplus_nord_4_b'
- 'oneplus_nord_ce4_lite_5g'
- 'oneplus_nord_ce4_b'
default: 'oneplus_12_b'
ANDROID_VERSION:
description: "内核安卓KMI版本"
required: true
type: choice
options:
- 'android15'
- 'android14'
- 'android13'
- 'android12'
default: 'android14'
KERNEL_VERSION:
description: "内核版本"
required: true
type: choice
options:
- '6.6'
- '6.1'
- '5.15'
- '5.10'
default: '6.1'
SUSFS:
description: "是否启用SUSFS"
required: true
type: choice
options:
- 'On'
- 'Off'
default: 'Off'
lz4kd:
description: "是否启用lz4kd(6.1 关闭时使用 lz4 + zstd; 6.6 关闭时使用 lz4)"
required: true
type: choice
options:
- 'On'
- 'Off'
default: 'Off'
bbg:
description: "是否启用BBG基带保护"
required: true
type: choice
options:
- 'On'
- 'Off'
default: 'On'
bbr:
description: "是否启用BBR算法(对手机日用无太大意义甚至可能负优化)"
required: true
type: choice
options:
- 'On'
- 'Off'
default: 'Off'
proxy:
description: "是否添加代理性能优化(联发科芯片跑的时候请关闭否则出现恶性问题)"
required: true
type: choice
options:
- 'On'
- 'Off'
default: 'On'
UNICODE_BYPASS:
description: "是否添加Unicode零宽绕过修复补丁(高内核版本不推荐开启, 建议使用 https://t.me/real5ec1cff/271 无痛修复)"
required: true
type: choice
options:
- 'On'
- 'Off'
default: 'Off'
jobs:
build:
name: For ${{ github.event.inputs.FEIL }} lz4kd ${{ github.event.inputs.lz4kd }} SUSFS ${{ github.event.inputs.SUSFS }}
runs-on: ubuntu-latest
env:
CCACHE_COMPILERCHECK: "%compiler% -dumpmachine; %compiler% -dumpversion"
CCACHE_NOHASHDIR: "true"
CCACHE_HARDLINK: "true"
CCACHE_MAXSIZE: 8G
steps:
- name: "🚀 Maximize Build Space | 最大化构建空间"
if: ${{ github.event.inputs.KERNEL_VERSION == '5.10' || github.event.inputs.KERNEL_VERSION == '5.15' }}
uses: easimon/maximize-build-space@master
with:
root-reserve-mb: 8192
temp-reserve-mb: 4096
remove-dotnet: 'true'
remove-android: 'true'
remove-haskell: 'true'
remove-codeql: 'true'
- name: "⚙️ Setup Cache Env | 设置缓存环境"
run: |
echo "🔧 正在设置机型隔离缓存目录..."
echo "CCACHE_DIR=$HOME/.ccache_${{ github.event.inputs.FEIL }}_Official" >> $GITHUB_ENV
mkdir -p "$HOME/.ccache_${{ github.event.inputs.FEIL }}_Official"
echo "✅ 缓存目录已设置: $HOME/.ccache_${{ github.event.inputs.FEIL }}_Official"
- name: "🔐 Configure Git | 配置Git账户"
run: |
echo "🔧 正在配置Git用户信息..."
git config --global user.name "build"
git config --global user.email "2210077278@qq.com"
echo "✅ Git配置完成"
- name: "📦 Cache & Install Dependencies | 缓存 & 安装构建依赖"
uses: awalsh128/cache-apt-pkgs-action@latest
with:
packages: python3 git curl ccache libelf-dev build-essential flex bison libssl-dev libncurses-dev liblz4-tool zlib1g-dev libxml2-utils rsync unzip gawk dos2unix
execute_install_scripts: true
- name: "💾 Restore ccache (With SUSFS) | 恢复ccache缓存 (With SUSFS)"
if: ${{ github.event.inputs.SUSFS == 'On' }}
uses: actions/cache@v5
with:
path: ${{ env.CCACHE_DIR }}
key: ccache-${{ runner.os }}-${{ github.ref }}-${{ github.event.inputs.FEIL }}-Official-SUSFS
restore-keys: |
ccache-${{ runner.os }}-${{ github.event.inputs.FEIL }}-Official-SUSFS
ccache-${{ runner.os }}-Official-SUSFS
- name: "💾 Restore ccache (Without SUSFS) | 恢复ccache缓存 (Without SUSFS)"
if: ${{ github.event.inputs.SUSFS == 'Off' }}
uses: actions/cache@v5
with:
path: ${{ env.CCACHE_DIR }}
key: ccache-${{ runner.os }}-${{ github.ref }}-${{ github.event.inputs.FEIL }}-Official-NoSUSFS
restore-keys: |
ccache-${{ runner.os }}-${{ github.event.inputs.FEIL }}-Official-NoSUSFS
ccache-${{ runner.os }}-Official-NoSUSFS
- name: "⚙️ Initialize ccache | 初始化ccache"
run: |
echo "🔧 正在初始化ccache..."
INIT_FLAG="${{ env.CCACHE_DIR }}/.ccache_initialized"
if command -v ccache >/dev/null 2>&1; then
if [ ! -f "$INIT_FLAG" ]; then
mkdir -p "${{ env.CCACHE_DIR }}"
ccache -M ${{ env.CCACHE_MAXSIZE }}
touch "$INIT_FLAG"
echo "🆕 ccache初始化完成"
else
echo "ℹ️ ccache已存在,跳过初始化"
fi
else
echo "⚠️ 未找到ccache命令,跳过初始化"
fi
# 显示缓存统计
ccache -s
echo "✅ ccache初始化流程完成"
- name: "📥 Install Repo Tool | 安装Repo工具"
run: |
echo "⬇️ 正在下载repo工具..."
curl -fsSL https://storage.googleapis.com/git-repo-downloads/repo > ~/repo
chmod a+x ~/repo
sudo mv ~/repo /usr/local/bin/repo
echo "✅ repo工具安装完成"
- name: "⬇️ Clone Kernel Source | 克隆内核源码"
run: |
mkdir kernel_workspace && cd kernel_workspace
echo "🌐 正在初始化内核仓库..."
repo init -u https://github.com/Xiaomichael/kernel_manifest.git -b refs/heads/oneplus/${{ github.event.inputs.CPU }} -m ${{ github.event.inputs.FEIL }}.xml --depth=1
echo "🔄 同步代码库(使用$(nproc --all)线程)..."
repo sync -c -j$(nproc --all) --no-tags --no-clone-bundle --force-sync
rm kernel_platform/common/android/abi_gki_protected_exports_* || echo "No protected exports!"
rm kernel_platform/msm-kernel/android/abi_gki_protected_exports_* || echo "No protected exports!"
# Remove -dirty in kernel version
sed -i 's/ -dirty//g' kernel_platform/common/scripts/setlocalversion
sed -i 's/ -dirty//g' kernel_platform/msm-kernel/scripts/setlocalversion
sed -i 's/ -dirty//g' kernel_platform/external/dtc/scripts/setlocalversion
sed -i '$i res=$(echo "$res" | sed '\''s/-dirty//g'\'')' kernel_platform/common/scripts/setlocalversion
sed -i '$i res=$(echo "$res" | sed '\''s/-dirty//g'\'')' kernel_platform/msm-kernel/scripts/setlocalversion
sed -i '$i res=$(echo "$res" | sed '\''s/-dirty//g'\'')' kernel_platform/external/dtc/scripts/setlocalversion
if [ "${{ github.event.inputs.KERNEL_VERSION }}" != "6.6" ]; then
sed -i '$s|echo "\$res"|echo "-${{ github.event.inputs.ANDROID_VERSION }}-oki-xiaoxiaow"|' kernel_platform/common/scripts/setlocalversion
sed -i '$s|echo "\$res"|echo "-${{ github.event.inputs.ANDROID_VERSION }}-oki-xiaoxiaow"|' kernel_platform/msm-kernel/scripts/setlocalversion
sed -i '$s|echo "\$res"|echo "-${{ github.event.inputs.ANDROID_VERSION }}-oki-xiaoxiaow"|' kernel_platform/external/dtc/scripts/setlocalversion
else
ESCAPED_SUFFIX=$(printf '%s\n' "-${{ github.event.inputs.ANDROID_VERSION }}-oki-xiaoxiaow" | sed 's:[\/&]:\\&:g')
sudo sed -i "s/-4k/$ESCAPED_SUFFIX/g" kernel_platform/common/arch/arm64/configs/gki_defconfig
sed -i 's/${scm_version}//' kernel_platform/common/scripts/setlocalversion
sed -i 's/${scm_version}//' kernel_platform/msm-kernel/scripts/setlocalversion
fi
echo "✅ 内核配置完成"
- name: "⚡ Setup Baseband-guard | 配置 Baseband-guard"
if: ${{ github.event.inputs.bbg == 'On'}}
run: |
set -e
cd kernel_workspace/kernel_platform/common
echo "🛠️ 正在设置BBG..."
curl -sSL https://github.com/vc-teahouse/Baseband-guard/raw/main/setup.sh -o setup.sh
bash setup.sh
- name: "⚡ Setup KernelSU | 配置 KernelSU"
run: |
cd kernel_workspace/kernel_platform
echo "🛠️ 正在设置KernelSU..."
curl -LSs "https://raw.githubusercontent.com/tiann/KernelSU/refs/heads/main/kernel/setup.sh" | bash -s main
cd KernelSU
KSU_VERSION=$(expr $(curl -sI "https://api.github.com/repos/tiann/KernelSU/commits?sha=main&per_page=1" | grep -i "link:" | sed -n 's/.*page=\([0-9]*\)>; rel="last".*/\1/p') "+" 30000)
echo "KSUVER=$KSU_VERSION" >> $GITHUB_ENV
sed -i "s/DKSU_VERSION=16/DKSU_VERSION=${KSU_VERSION}/" kernel/Kbuild
echo "✅ KernelSU 配置完成"
- name: "🔧 Setup Patches | 配置补丁"
run: |
cd kernel_workspace
echo "⬇️ 下载所需补丁..."
if [ "${{ github.event.inputs.SUSFS }}" == "On" ]; then
git clone https://github.com/cctv18/susfs4oki.git -b oki-${{ github.event.inputs.ANDROID_VERSION }}-${{ github.event.inputs.KERNEL_VERSION }}
fi
git clone https://github.com/Xiaomichael/kernel_patches.git
git clone https://github.com/ShirkNeko/SukiSU_patch.git
cd kernel_platform
echo "📝 复制补丁文件..."
if [ "${{ github.event.inputs.SUSFS }}" == "On" ]; then
cp ../susfs4oki/kernel_patches/50_add_susfs_in_gki-${{ github.event.inputs.ANDROID_VERSION }}-${{ github.event.inputs.KERNEL_VERSION }}.patch ./common/
cp ../susfs4oki/kernel_patches/fs/* ./common/fs/
cp ../susfs4oki/kernel_patches/include/linux/* ./common/include/linux/
fi
cp ../kernel_patches/zram_patches/001-lz4.patch ./common/
cp ../kernel_patches/zram_patches/lz4armv8.S ./common/lib
cp ../kernel_patches/zram_patches/002-zstd.patch ./common/
if [ "${{ github.event.inputs.UNICODE_BYPASS }}" = "On" ]; then
if [ "${{ github.event.inputs.KERNEL_VERSION }}" = "6.1" ] || [ "${{ github.event.inputs.KERNEL_VERSION }}" = "6.6" ]; then
cp ../kernel_patches/common/unicode_bypass_fix_6.1+.patch ./common/unicode_bypass_fix.patch
elif [ "${{ github.event.inputs.KERNEL_VERSION }}" = "5.15" ] || [ "${{ github.event.inputs.KERNEL_VERSION }}" = "5.10" ]; then
cp ../kernel_patches/common/unicode_bypass_fix_6.1-.patch ./common/unicode_bypass_fix.patch
fi
fi
if [ "${{ github.event.inputs.lz4kd }}" == "On" ]; then
# Copy lz4k from ShirkNeko
cp -r ../SukiSU_patch/other/zram/lz4k/include/linux/* ./common/include/linux
cp -r ../SukiSU_patch/other/zram/lz4k/lib/* ./common/lib
cp -r ../SukiSU_patch/other/zram/lz4k/crypto/* ./common/crypto
cp -r ../SukiSU_patch/other/zram/lz4k_oplus ./common/lib/
fi
echo "🔧 应用补丁..."
if [ "${{ github.event.inputs.SUSFS }}" == "On" ]; then
cd ./KernelSU
patch -p1 < 10_enable_susfs_for_ksu.patch || true
fi
if [ "${{ github.event.inputs.SUSFS }}" == "On" ]; then
cd ../common
elif [ "${{ github.event.inputs.SUSFS }}" == "Off" ]; then
cd ./common
fi
if [ "${{ github.event.inputs.UNICODE_BYPASS }}" = "On" ]; then
echo "📦 正在应用Unicode零宽绕过修复补丁..."
patch -p1 < unicode_bypass_fix.patch
fi
if [ "${{ github.event.inputs.lz4kd }}" = "Off" ] && [ "${{ github.event.inputs.KERNEL_VERSION }}" = "6.1" ]; then
echo "📦 应用lz4+zstd补丁..."
git apply -p1 < 001-lz4.patch || true
patch -p1 < 002-zstd.patch || true
fi
if [ "${{ github.event.inputs.lz4kd }}" = "Off" ] && [ "${{ github.event.inputs.KERNEL_VERSION }}" = "6.6" ]; then
echo "📦 应用lz4补丁..."
git apply -p1 < 001-lz4.patch || true
fi
if [ "${{ github.event.inputs.lz4kd }}" == "On" ]; then
echo "🚀 应用lz4kd补丁..."
cp ../../SukiSU_patch/other/zram/zram_patch/${{ github.event.inputs.KERNEL_VERSION }}/lz4kd.patch ./
patch -p1 -F 3 < lz4kd.patch || true
cp ../../SukiSU_patch/other/zram/zram_patch/${{ github.event.inputs.KERNEL_VERSION }}/lz4k_oplus.patch ./
patch -p1 -F 3 < lz4k_oplus.patch || true
fi
if [ "${{ github.event.inputs.SUSFS }}" == "On" ]; then
patch -p1 < 50_add_susfs_in_gki-${{ github.event.inputs.ANDROID_VERSION }}-${{ github.event.inputs.KERNEL_VERSION }}.patch || true
cp ../../kernel_patches/69_hide_stuff.patch ./
patch -p1 -F 3 < 69_hide_stuff.patch
fi
echo "✅ 所有补丁应用完成"
- name: "⚙️ Apply SCHED Patch | 应用风驰补丁"
if: ${{ github.event.inputs.KERNEL_VERSION == '6.6' }}
run: |
cd kernel_workspace/kernel_platform/common
echo "⬇️ 正在拉取风驰补丁"
if [ "${{ github.event.inputs.FEIL }}" == "oneplus_ace5_ultra" ] || [ "${{ github.event.inputs.FEIL }}" = "oneplus_ace5_ultra_b" ]; then
git clone https://github.com/Numbersf/SCHED_PATCH.git -b "mt6991"
else
git clone https://github.com/Numbersf/SCHED_PATCH.git -b "sm8750"
fi
cp ./SCHED_PATCH/fengchi_${{ github.event.inputs.FEIL }}.patch ./
if [[ -f "fengchi_${{ github.event.inputs.FEIL }}.patch" ]]; then
echo "⚙️ 开始应用风驰补丁"
dos2unix "fengchi_${{ github.event.inputs.FEIL }}.patch"
patch -p1 -F 3 < "fengchi_${{ github.event.inputs.FEIL }}.patch"
echo "✅ 完美风驰补丁应用完成"
else
sed -i '1iobj-y += hmbird_patch.o' drivers/Makefile
wget https://github.com/Numbersf/Action-Build/raw/SukiSU-Ultra/patches/hmbird_patch.patch
echo "⚙️ 正在打OGKI转换GKI补丁"
patch -p1 -F 3 < hmbird_patch.patch
echo "✅ OGKI转换GKI_patch完成"
fi
- name: "⚙️ Configure Kernel Options | 配置内核选项"
run: |
cd kernel_workspace/kernel_platform
echo "⚙️ 正在配置内核编译选项..."
# Add KSU configuration settings
echo "📦 启用 KSU 支持..."
echo "CONFIG_KSU=y" >> ./common/arch/arm64/configs/gki_defconfig
if [ "${{ github.event.inputs.SUSFS }}" == "On" ]; then
# Add SUSFS configuration settings
echo "CONFIG_KSU_SUSFS=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_KSU_SUSFS_SUS_PATH=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_KSU_SUSFS_SUS_MOUNT=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_KSU_SUSFS_SUS_KSTAT=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_KSU_SUSFS_SPOOF_UNAME=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_KSU_SUSFS_ENABLE_LOG=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_KSU_SUSFS_HIDE_KSU_SUSFS_SYMBOLS=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_KSU_SUSFS_SPOOF_CMDLINE_OR_BOOTCONFIG=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_KSU_SUSFS_OPEN_REDIRECT=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_KSU_SUSFS_SUS_MAP=y" >> ./common/arch/arm64/configs/gki_defconfig
fi
#添加对 Mountify (backslashxx/mountify) 模块的支持
echo "CONFIG_TMPFS_XATTR=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_TMPFS_POSIX_ACL=y" >> ./common/arch/arm64/configs/gki_defconfig
if [ "${{ github.event.inputs.bbg }}" == "On" ]; then
echo "⚡ 启用BBG中..."
echo 'CONFIG_BBG=y' >> ./common/arch/arm64/configs/gki_defconfig
echo 'CONFIG_LSM="landlock,lockdown,yama,loadpin,safesetid,integrity,selinux,smack,tomoyo,apparmor,bpf,baseband_guard"' >> ./common/arch/arm64/configs/gki_defconfig
fi
if [ "${{ github.event.inputs.bbr }}" == "On" ]; then
echo "🌐 启用BBR网络算法..."
echo "CONFIG_TCP_CONG_ADVANCED=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_TCP_CONG_BBR=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_NET_SCH_FQ=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_TCP_CONG_BIC=n" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_TCP_CONG_WESTWOOD=n" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_TCP_CONG_HTCP=n" >> ./common/arch/arm64/configs/gki_defconfig
fi
if [ "${{ github.event.inputs.lz4kd }}" == "On" ]; then
echo "📦 启用lz4kd压缩..."
echo "CONFIG_CRYPTO_LZ4KD=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_CRYPTO_LZ4K_OPLUS=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_ZRAM_WRITEBACK=y" >> ./common/arch/arm64/configs/gki_defconfig
fi
if [ "${{ github.event.inputs.KERNEL_VERSION }}" == "6.1" ] || [ "${{ github.event.inputs.KERNEL_VERSION }}" == "6.6" ]; then
# Add O2 config
echo "📦 为6.1&6.6加入O2优化..."
echo "CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE=y" >> ./common/arch/arm64/configs/gki_defconfig
fi
if [ "${{ github.event.inputs.proxy }}" == "On" ]; then
# Add proxy config
echo "CONFIG_BPF_STREAM_PARSER=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_NETFILTER_XT_SET=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_MAX=65534" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_BITMAP_IP=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_BITMAP_IPMAC=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_BITMAP_PORT=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_HASH_IP=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_HASH_IPMARK=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_HASH_IPPORT=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_HASH_IPPORTIP=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_HASH_IPPORTNET=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_HASH_IPMAC=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_HASH_MAC=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_HASH_NETPORTNET=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_HASH_NET=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_HASH_NETNET=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_HASH_NETPORT=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_HASH_NETIFACE=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_LIST_SET=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP6_NF_NAT=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP6_NF_TARGET_MASQUERADE=y" >> ./common/arch/arm64/configs/gki_defconfig
fi
if [ "${{ github.event.inputs.KERNEL_VERSION }}" == "5.10" ] || [ "${{ github.event.inputs.KERNEL_VERSION }}" == "5.15" ]; then
echo "📦 正在为5.10系与5.15系配置lto中...."
DEFCONFIG=./common/arch/arm64/configs/gki_defconfig
sed -i 's/^CONFIG_LTO=n/CONFIG_LTO=y/' "$DEFCONFIG"
sed -i 's/^CONFIG_LTO_CLANG_FULL=y/CONFIG_LTO_CLANG_THIN=y/' "$DEFCONFIG"
sed -i 's/^CONFIG_LTO_CLANG_NONE=y/CONFIG_LTO_CLANG_THIN=y/' "$DEFCONFIG"
grep -q '^CONFIG_LTO_CLANG_THIN=y' "$DEFCONFIG" || echo 'CONFIG_LTO_CLANG_THIN=y' >> "$DEFCONFIG"
fi
#跳过将uapi标准头安装到 usr/include 目录的不必要操作,节省编译时间
echo "CONFIG_HEADERS_INSTALL=n" >> ./common/arch/arm64/configs/gki_defconfig
sed -i 's/check_defconfig//' ./common/build.config.gki
echo "✅ 内核配置更新完成"
- name: "🔨 Build Kernel | 编译内核"
run: |
echo "🏗️ 开始内核编译..."
export KBUILD_BUILD_USER="xiaoxiaow"
export KBUILD_BUILD_HOST="xiaoxiaow_build"
if [ "${{ github.event.inputs.KERNEL_VERSION }}" == "6.1" ]; then
export KBUILD_BUILD_TIMESTAMP="Tue Mar 10 03:53:33 UTC 2026"
export KBUILD_BUILD_VERSION=1
export PATH="$GITHUB_WORKSPACE/kernel_workspace/kernel_platform/prebuilts/clang/host/linux-x86/clang-r487747c/bin:$PATH"
export PATH="/usr/lib/ccache:$PATH"
sudo apt install libelf-dev
cd kernel_workspace/kernel_platform/common
make -j$(nproc --all) LLVM=1 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- CC="ccache clang" RUSTC=../../prebuilts/rust/linux-x86/1.73.0b/bin/rustc PAHOLE=../../prebuilts/kernel-build-tools/linux-x86/bin/pahole LD=ld.lld HOSTLD=ld.lld O=out KCFLAGS+=-O2 gki_defconfig all
elif [ "${{ github.event.inputs.KERNEL_VERSION }}" == "6.6" ]; then
export PATH="/usr/lib/ccache:$GITHUB_WORKSPACE/kernel_workspace/kernel_platform/prebuilts/clang/host/linux-x86/clang-r510928/bin:$PATH"
export PATH="/usr/lib/ccache:$PATH"
sudo apt install libelf-dev
cd kernel_workspace/kernel_platform/common
make -j$(nproc --all) LLVM=1 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- CC="ccache clang" RUSTC=../../prebuilts/rust/linux-x86/1.73.0b/bin/rustc PAHOLE=../../prebuilts/kernel-build-tools/linux-x86/bin/pahole LD=ld.lld HOSTLD=ld.lld O=out KCFLAGS+=-O2 gki_defconfig all
elif [ "${{ github.event.inputs.KERNEL_VERSION }}" == "5.15" ]; then
export PATH="$GITHUB_WORKSPACE/kernel_workspace/kernel_platform/prebuilts/clang/host/linux-x86/clang-r450784e/bin:$PATH"
export PATH="/usr/lib/ccache:$PATH"
sudo apt install libelf-dev
cd kernel_workspace/kernel_platform/common
make -j$(nproc --all) LLVM=1 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- CC="ccache clang" RUSTC=../../prebuilts/rust/linux-x86/1.73.0b/bin/rustc PAHOLE=../../prebuilts/kernel-build-tools/linux-x86/bin/pahole LD=ld.lld HOSTLD=ld.lld O=out gki_defconfig all
elif [ "${{ github.event.inputs.KERNEL_VERSION }}" == "5.10" ]; then
export PATH="$GITHUB_WORKSPACE/kernel_workspace/kernel_platform/prebuilts-master/clang/host/linux-x86/clang-r416183b/bin:$PATH"
export PATH="/usr/lib/ccache:$PATH"
sudo apt install libelf-dev
cd kernel_workspace/kernel_platform/common
make -j$(nproc --all) LLVM_IAS=1 LLVM=1 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- CC="ccache clang" RUSTC=../../prebuilts/rust/linux-x86/1.73.0b/bin/rustc PAHOLE=../../prebuilts/kernel-build-tools/linux-x86/bin/pahole LD=ld.lld HOSTLD=ld.lld O=out gki_defconfig all
fi
# 显示ccache统计信息
ccache -s
echo "✅ 内核编译完成"
- name: "📦 Package Kernel | 打包内核"
run: |
echo "📦 准备AnyKernel3打包环境..."
git clone https://github.com/Xiaomichael/AnyKernel3 --depth=1
rm -rf ./AnyKernel3/.git
mkdir -p kernel_workspace/kernel_platform/out/Final-Image-Find/
dir1=""
dir2=""
image_path=$(find "./kernel_workspace/kernel_platform/common/out/" -name "Image" | head -n 1)
if [ -n "$image_path" ]; then
dir1=$(dirname "$image_path")/
echo "✅ 成功找到 Image 文件"
fi
if [ -n "$image_path" ] && [ -f "$image_path" ]; then
echo "Image file finally located at: $image_path"
cp "$image_path" ./AnyKernel3/Image
cp "$image_path" kernel_workspace/kernel_platform/out/Final-Image-Find/Image
fi
- name: "🧠 Set Artifact Name | 设置产物名称"
id: set_name
run: |
if [ "${{ github.event.inputs.lz4kd }}" = "On" ]; then
BASE_NAME="${{ github.event.inputs.FEIL }}_KernelSU_lz4kd_${{ env.KSUVER }}"
elif [ "${{ github.event.inputs.KERNEL_VERSION }}" = "6.1" ]; then
BASE_NAME="${{ github.event.inputs.FEIL }}_KernelSU_lz4_zstd_${{ env.KSUVER }}"
elif [ "${{ github.event.inputs.KERNEL_VERSION }}" = "6.6" ]; then
BASE_NAME="${{ github.event.inputs.FEIL }}_KernelSU_lz4_${{ env.KSUVER }}"
else
BASE_NAME="${{ github.event.inputs.FEIL }}_KernelSU_${{ env.KSUVER }}"
fi
if [ "${{ github.event.inputs.SUSFS }}" = "On" ]; then
FINAL_NAME="${BASE_NAME}_SUSFS"
else
FINAL_NAME="${BASE_NAME}"
fi
echo "ARTIFACT_NAME=${FINAL_NAME}" >> $GITHUB_OUTPUT
- name: "📤 Upload AnyKernel3 | 上传 AnyKernel3"
uses: actions/upload-artifact@v7
with:
name: ${{ steps.set_name.outputs.ARTIFACT_NAME }}
path: ./AnyKernel3/*
- name: "📝 Find zram.ko & crypto_zstdn.ko | 查找 zram.ko & crypto_zstdn.ko"
# if: ${{ github.event.inputs.lz4kd == 'On' }}
run: |
find -name zram.ko
find -name crypto_zstdn.ko
- name: "📤 Upload zram.ko | 上传 zram.ko"
# if: ${{ github.event.inputs.lz4kd == 'On' }}
uses: actions/upload-artifact@v7
with:
name: ${{ github.event.inputs.FEIL }}_zram.ko
path: ./kernel_workspace/kernel_platform/common/out/drivers/block/zram/zram.ko
================================================
FILE: .github/workflows/Build ReSukiSU.yml
================================================
name: Build ReSukiSU
on:
workflow_dispatch:
inputs:
CPU:
description: "CPU分支"
required: true
type: choice
options:
- 'sm8750'
- 'sm8735'
- 'mt6991'
- 'sm8650'
- 'mt6989'
- 'sm8635'
- 'sm8550'
- 'sm8450'
- 'sm8475'
- 'sm7675'
- 'sm7635'
- 'sm7550'
- 'sm6375'
default: 'sm8650'
FEIL:
description: "手机型号"
required: true
type: choice
options:
- 'oneplus_13_b'
- 'oneplus_13s_b'
- 'oneplus_13t_b'
- 'oneplus_ace5_pro_b'
- 'oneplus_ace_6'
- 'oneplus_pad_2_pro_b'
- 'oneplus_pad_3_b'
- 'oneplus_ace5_ultra_b'
- 'oneplus_turbo_6'
- 'oneplus_12_b'
- 'oneplus_ace3_pro_b'
- 'oneplus_ace5_b'
- 'oneplus_13r_b'
- 'oneplus_pad2_b'
- 'oneplus_pad_pro_b'
- 'oneplus_ace5_race_b'
- 'oneplus_nord_5_b'
- 'oneplus_11_b'
- 'oneplus_12r_b'
- 'oneplus_ace2_pro_b'
- 'oneplus_ace3_b'
- 'oneplus_open_b'
- 'oneplus_10t_v'
- 'oneplus_11r_b'
- 'oneplus_ace2_b'
- 'oneplus_ace_pro_v'
- 'oneplus_10_pro_b'
- 'oneplus_ace_3v_b'
- 'oneplus_turbo_6v'
- 'oneplus_nord_4_b'
- 'oneplus_nord_ce4_lite_5g'
- 'oneplus_nord_ce4_b'
default: 'oneplus_12_b'
ANDROID_VERSION:
description: "内核安卓KMI版本"
required: true
type: choice
options:
- 'android15'
- 'android14'
- 'android13'
- 'android12'
default: 'android14'
KERNEL_VERSION:
description: "内核版本"
required: true
type: choice
options:
- '6.6'
- '6.1'
- '5.15'
- '5.10'
default: '6.1'
SUSFS:
description: "是否启用SUSFS"
required: true
type: choice
options:
- 'On'
- 'Off'
default: 'Off'
KPM:
description: "是否启用KPM"
required: true
type: choice
options:
- 'On'
- 'Off'
default: 'Off'
lz4kd:
description: "是否启用lz4kd(6.1 关闭时使用 lz4 + zstd; 6.6 关闭时使用 lz4)"
required: true
type: choice
options:
- 'On'
- 'Off'
default: 'Off'
bbg:
description: "是否启用BBG基带保护"
required: true
type: choice
options:
- 'On'
- 'Off'
default: 'On'
bbr:
description: "是否启用BBR算法(对手机日用无太大意义甚至可能负优化)"
required: true
type: choice
options:
- 'On'
- 'Off'
default: 'Off'
proxy:
description: "是否添加代理性能优化(联发科芯片跑的时候请关闭否则出现恶性问题)"
required: true
type: choice
options:
- 'On'
- 'Off'
default: 'On'
UNICODE_BYPASS:
description: "是否添加Unicode零宽绕过修复补丁(高内核版本不推荐开启, 建议使用 https://t.me/real5ec1cff/271 无痛修复)"
required: true
type: choice
options:
- 'On'
- 'Off'
default: 'Off'
jobs:
build:
name: For ${{ github.event.inputs.FEIL }} KPM ${{ github.event.inputs.KPM }} lz4kd ${{ github.event.inputs.lz4kd }} SUSFS ${{ github.event.inputs.SUSFS }}
runs-on: ubuntu-latest
env:
CCACHE_COMPILERCHECK: "%compiler% -dumpmachine; %compiler% -dumpversion"
CCACHE_NOHASHDIR: "true"
CCACHE_HARDLINK: "true"
CCACHE_MAXSIZE: 8G
steps:
- name: "🚀 Maximize Build Space | 最大化构建空间"
if: ${{ github.event.inputs.KERNEL_VERSION == '5.10' || github.event.inputs.KERNEL_VERSION == '5.15' }}
uses: easimon/maximize-build-space@master
with:
root-reserve-mb: 8192
temp-reserve-mb: 4096
remove-dotnet: 'true'
remove-android: 'true'
remove-haskell: 'true'
remove-codeql: 'true'
- name: "⚙️ Setup Cache Env | 设置缓存环境"
run: |
echo "🔧 正在设置机型隔离缓存目录..."
echo "CCACHE_DIR=$HOME/.ccache_${{ github.event.inputs.FEIL }}_ReSukiSU" >> $GITHUB_ENV
mkdir -p "$HOME/.ccache_${{ github.event.inputs.FEIL }}_ReSukiSU"
echo "✅ 缓存目录已设置: $HOME/.ccache_${{ github.event.inputs.FEIL }}_ReSukiSU"
- name: "🔐 Configure Git | 配置Git账户"
run: |
echo "🔧 正在配置Git用户信息..."
git config --global user.name "build"
git config --global user.email "2210077278@qq.com"
echo "✅ Git配置完成"
- name: "📦 Cache & Install Dependencies | 缓存 & 安装构建依赖"
uses: awalsh128/cache-apt-pkgs-action@latest
with:
packages: python3 git curl ccache libelf-dev build-essential flex bison libssl-dev libncurses-dev liblz4-tool zlib1g-dev libxml2-utils rsync unzip gawk dos2unix
execute_install_scripts: true
- name: "💾 Restore ccache (With SUSFS) | 恢复ccache缓存 (With SUSFS)"
if: ${{ github.event.inputs.SUSFS == 'On' }}
uses: actions/cache@v5
with:
path: ${{ env.CCACHE_DIR }}
key: ccache-${{ runner.os }}-${{ github.ref }}-${{ github.event.inputs.FEIL }}-ReSukiSU-SUSFS
restore-keys: |
ccache-${{ runner.os }}-${{ github.event.inputs.FEIL }}-ReSukiSU-SUSFS
ccache-${{ runner.os }}-ReSukiSU-SUSFS
- name: "💾 Restore ccache (Without SUSFS) | 恢复ccache缓存 (Without SUSFS)"
if: ${{ github.event.inputs.SUSFS == 'Off' }}
uses: actions/cache@v5
with:
path: ${{ env.CCACHE_DIR }}
key: ccache-${{ runner.os }}-${{ github.ref }}-${{ github.event.inputs.FEIL }}-ReSukiSU-NoSUSFS
restore-keys: |
ccache-${{ runner.os }}-${{ github.event.inputs.FEIL }}-ReSukiSU-NoSUSFS
ccache-${{ runner.os }}-ReSukiSU-NoSUSFS
- name: "⚙️ Initialize ccache | 初始化ccache"
run: |
echo "🔧 正在初始化ccache..."
INIT_FLAG="${{ env.CCACHE_DIR }}/.ccache_initialized"
if command -v ccache >/dev/null 2>&1; then
if [ ! -f "$INIT_FLAG" ]; then
mkdir -p "${{ env.CCACHE_DIR }}"
ccache -M ${{ env.CCACHE_MAXSIZE }}
touch "$INIT_FLAG"
echo "✅ ccache初始化完成"
else
echo "ℹ️ ccache已存在,跳过初始化"
fi
else
echo "⚠️ 未找到ccache命令,跳过初始化"
fi
# 显示缓存统计
ccache -s
echo "✅ ccache初始化流程完成"
- name: "📥 Install Repo Tool | 安装Repo工具"
run: |
echo "⬇️ 正在下载repo工具..."
curl -fsSL https://storage.googleapis.com/git-repo-downloads/repo > ~/repo
chmod a+x ~/repo
sudo mv ~/repo /usr/local/bin/repo
echo "✅ repo工具安装完成"
- name: "⬇️ Clone Kernel Source | 克隆内核源码"
run: |
mkdir kernel_workspace && cd kernel_workspace
echo "🌐 正在初始化内核仓库..."
repo init -u https://github.com/Xiaomichael/kernel_manifest.git -b refs/heads/oneplus/${{ github.event.inputs.CPU }} -m ${{ github.event.inputs.FEIL }}.xml --depth=1
echo "🔄 同步代码库(使用$(nproc --all)线程)..."
repo sync -c -j$(nproc --all) --no-tags --no-clone-bundle --force-sync
echo "✅ 内核源码克隆完成"
rm kernel_platform/common/android/abi_gki_protected_exports_* || echo "No protected exports!"
rm kernel_platform/msm-kernel/android/abi_gki_protected_exports_* || echo "No protected exports!"
echo "🔧 正在配置内核版本信息..."
# Remove -dirty in kernel version
sed -i 's/ -dirty//g' kernel_platform/common/scripts/setlocalversion
sed -i 's/ -dirty//g' kernel_platform/msm-kernel/scripts/setlocalversion
sed -i 's/ -dirty//g' kernel_platform/external/dtc/scripts/setlocalversion
sed -i '$i res=$(echo "$res" | sed '\''s/-dirty//g'\'')' kernel_platform/common/scripts/setlocalversion
sed -i '$i res=$(echo "$res" | sed '\''s/-dirty//g'\'')' kernel_platform/msm-kernel/scripts/setlocalversion
sed -i '$i res=$(echo "$res" | sed '\''s/-dirty//g'\'')' kernel_platform/external/dtc/scripts/setlocalversion
if [ "${{ github.event.inputs.KERNEL_VERSION }}" != "6.6" ]; then
sed -i '$s|echo "\$res"|echo "-${{ github.event.inputs.ANDROID_VERSION }}-oki-xiaoxiaow"|' kernel_platform/common/scripts/setlocalversion
sed -i '$s|echo "\$res"|echo "-${{ github.event.inputs.ANDROID_VERSION }}-oki-xiaoxiaow"|' kernel_platform/msm-kernel/scripts/setlocalversion
sed -i '$s|echo "\$res"|echo "-${{ github.event.inputs.ANDROID_VERSION }}-oki-xiaoxiaow"|' kernel_platform/external/dtc/scripts/setlocalversion
else
ESCAPED_SUFFIX=$(printf '%s\n' "-${{ github.event.inputs.ANDROID_VERSION }}-oki-xiaoxiaow" | sed 's:[\/&]:\\&:g')
sudo sed -i "s/-4k/$ESCAPED_SUFFIX/g" kernel_platform/common/arch/arm64/configs/gki_defconfig
sed -i 's/${scm_version}//' kernel_platform/common/scripts/setlocalversion
sed -i 's/${scm_version}//' kernel_platform/msm-kernel/scripts/setlocalversion
fi
echo "✅ 内核配置完成"
- name: "⚡ Setup Baseband-guard | 配置 Baseband-guard"
if: ${{ github.event.inputs.bbg == 'On' && github.event.inputs.KPM == 'Off' }}
run: |
set -e
cd kernel_workspace/kernel_platform/common
echo "🛠️ 正在设置BBG..."
curl -sSL https://github.com/vc-teahouse/Baseband-guard/raw/main/setup.sh -o setup.sh
bash setup.sh
- name: "⚡ Setup ReSukiSU | 配置 ReSukiSU"
run: |
cd kernel_workspace/kernel_platform
# 下载并执行设置脚本
echo "🛠️ 正在设置ReSukiSU..."
curl -LSs "https://raw.githubusercontent.com/ReSukiSU/ReSukiSU/main/kernel/setup.sh" | bash -s main
cd KernelSU
KSU_VERSION=$(expr $(/usr/bin/git rev-list --count main) "+" 30700)
echo "KSUVER=$KSU_VERSION" >> $GITHUB_ENV
echo "✅ ReSukiSU 配置完成"
- name: "🔧 Setup Patches | 配置补丁"
run: |
cd kernel_workspace
echo "⬇️ 克隆所需补丁..."
if [ "${{ github.event.inputs.SUSFS }}" == "On" ]; then
git clone https://github.com/cctv18/susfs4oki.git -b oki-${{ github.event.inputs.ANDROID_VERSION }}-${{ github.event.inputs.KERNEL_VERSION }}
fi
git clone https://github.com/Xiaomichael/kernel_patches.git
git clone https://github.com/ShirkNeko/SukiSU_patch.git
cd kernel_platform
echo "📝 复制补丁文件..."
if [ "${{ github.event.inputs.SUSFS }}" == "On" ]; then
cp ../susfs4oki/kernel_patches/50_add_susfs_in_gki-${{ github.event.inputs.ANDROID_VERSION }}-${{ github.event.inputs.KERNEL_VERSION }}.patch ./common/
cp ../susfs4oki/kernel_patches/fs/* ./common/fs/
cp ../susfs4oki/kernel_patches/include/linux/* ./common/include/linux/
else
cp ../kernel_patches/sukisu/scope_min_manual_hooks_v1.9.patch ./common/
fi
cp ../kernel_patches/zram_patches/001-lz4.patch ./common/
cp ../kernel_patches/zram_patches/lz4armv8.S ./common/lib
cp ../kernel_patches/zram_patches/002-zstd.patch ./common/
if [ "${{ github.event.inputs.UNICODE_BYPASS }}" = "On" ]; then
if [ "${{ github.event.inputs.KERNEL_VERSION }}" = "6.1" ] || [ "${{ github.event.inputs.KERNEL_VERSION }}" = "6.6" ]; then
cp ../kernel_patches/common/unicode_bypass_fix_6.1+.patch ./common/unicode_bypass_fix.patch
elif [ "${{ github.event.inputs.KERNEL_VERSION }}" = "5.15" ] || [ "${{ github.event.inputs.KERNEL_VERSION }}" = "5.10" ]; then
cp ../kernel_patches/common/unicode_bypass_fix_6.1-.patch ./common/unicode_bypass_fix.patch
fi
fi
if [ "${{ github.event.inputs.lz4kd }}" == "On" ]; then
# Copy lz4k from ShirkNeko
cp -r ../SukiSU_patch/other/zram/lz4k/include/linux/* ./common/include/linux
cp -r ../SukiSU_patch/other/zram/lz4k/lib/* ./common/lib
cp -r ../SukiSU_patch/other/zram/lz4k/crypto/* ./common/crypto
cp -r ../SukiSU_patch/other/zram/lz4k_oplus ./common/lib/
fi
cd ./common
if [ "${{ github.event.inputs.UNICODE_BYPASS }}" = "On" ]; then
echo "📦 正在应用Unicode零宽绕过修复补丁..."
patch -p1 < unicode_bypass_fix.patch
fi
if [ "${{ github.event.inputs.lz4kd }}" = "Off" ] && [ "${{ github.event.inputs.KERNEL_VERSION }}" = "6.1" ]; then
echo "📦 应用lz4+zstd补丁..."
git apply -p1 < 001-lz4.patch || true
patch -p1 < 002-zstd.patch || true
fi
if [ "${{ github.event.inputs.lz4kd }}" = "Off" ] && [ "${{ github.event.inputs.KERNEL_VERSION }}" = "6.6" ]; then
echo "📦 应用lz4补丁..."
git apply -p1 < 001-lz4.patch || true
fi
if [ "${{ github.event.inputs.lz4kd }}" == "On" ]; then
echo "📦 应用lz4kd补丁..."
cp ../../SukiSU_patch/other/zram/zram_patch/${{ github.event.inputs.KERNEL_VERSION }}/lz4kd.patch ./
patch -p1 -F 3 < lz4kd.patch || true
cp ../../SukiSU_patch/other/zram/zram_patch/${{ github.event.inputs.KERNEL_VERSION }}/lz4k_oplus.patch ./
patch -p1 -F 3 < lz4k_oplus.patch || true
fi
if [ "${{ github.event.inputs.SUSFS }}" == "On" ]; then
echo "📦 应用SUSFS补丁..."
patch -p1 < 50_add_susfs_in_gki-${{ github.event.inputs.ANDROID_VERSION }}-${{ github.event.inputs.KERNEL_VERSION }}.patch || true
else
echo "📦 应用MANUAL_HOOK补丁..."
patch -p1 -F 3 < scope_min_manual_hooks_v1.9.patch
fi
echo "✅ 所有补丁应用完成"
- name: "⚙️ Apply SCHED Patch | 应用风驰补丁"
if: ${{ github.event.inputs.KERNEL_VERSION == '6.6' }}
run: |
cd kernel_workspace/kernel_platform/common
echo "⬇️ 正在拉取风驰补丁"
if [ "${{ github.event.inputs.FEIL }}" == "oneplus_ace5_ultra" ] || [ "${{ github.event.inputs.FEIL }}" = "oneplus_ace5_ultra_b" ]; then
echo "⚠️ Ace5 Ultra 需要使用 mt6991 分支的补丁"
git clone https://github.com/Numbersf/SCHED_PATCH.git -b "mt6991"
else
echo "⚙️ 使用 sm8750 分支的补丁"
git clone https://github.com/Numbersf/SCHED_PATCH.git -b "sm8750"
fi
cp ./SCHED_PATCH/fengchi_${{ github.event.inputs.FEIL }}.patch ./
if [[ -f "fengchi_${{ github.event.inputs.FEIL }}.patch" ]]; then
echo "⚙️ 开始应用风驰补丁"
dos2unix "fengchi_${{ github.event.inputs.FEIL }}.patch"
patch -p1 -F 3 < "fengchi_${{ github.event.inputs.FEIL }}.patch"
echo "✅ 完美风驰补丁应用完成"
else
sed -i '1iobj-y += hmbird_patch.o' drivers/Makefile
wget https://github.com/Numbersf/Action-Build/raw/SukiSU-Ultra/patches/hmbird_patch.patch
echo "⚙️ 正在打OGKI转换GKI补丁"
patch -p1 -F 3 < hmbird_patch.patch
echo "✅ OGKI转换GKI_patch完成"
fi
- name: "⚙️ Configure Kernel Options | 配置内核选项"
run: |
cd kernel_workspace/kernel_platform
echo "⚙️ 正在配置内核编译选项..."
echo "📦 启用 KSU 支持..."
curl -L -o resukisu_setup.bin https://github.com/Xiaomichael/OnePlus-Actions/raw/Build/script/resukisu_setup.bin
chmod +x resukisu_setup.bin
./resukisu_setup.bin
rm -rf ./resukisu_setup.bin
if [ "${{ github.event.inputs.KPM }}" == "On" ]; then
echo "📦 启用 KPM..."
echo "CONFIG_KPM=y" >> ./common/arch/arm64/configs/gki_defconfig
fi
if [ "${{ github.event.inputs.SUSFS }}" == "On" ]; then
echo "📦 启用 SUSFS 功能..."
echo "CONFIG_KSU_SUSFS=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_KSU_SUSFS_SUS_PATH=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_KSU_SUSFS_SUS_MOUNT=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_KSU_SUSFS_SUS_KSTAT=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_KSU_SUSFS_SPOOF_UNAME=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_KSU_SUSFS_ENABLE_LOG=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_KSU_SUSFS_HIDE_KSU_SUSFS_SYMBOLS=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_KSU_SUSFS_SPOOF_CMDLINE_OR_BOOTCONFIG=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_KSU_SUSFS_OPEN_REDIRECT=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_KSU_SUSFS_SUS_MAP=y" >> ./common/arch/arm64/configs/gki_defconfig
else
echo "📦 启用 MANUAL_HOOK..."
echo "CONFIG_KSU_SUSFS=n" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_KSU_MANUAL_HOOK=y" >> ./common/arch/arm64/configs/gki_defconfig
fi
echo "📦 添加对 Mountify (backslashxx/mountify) 模块的支持"
echo "CONFIG_TMPFS_XATTR=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_TMPFS_POSIX_ACL=y" >> ./common/arch/arm64/configs/gki_defconfig
if [ "${{ github.event.inputs.bbg }}" == "On" ] && [ "${{ github.event.inputs.KPM }}" == "Off" ]; then
echo "⚡ 配置 BBG 中..."
echo 'CONFIG_BBG=y' >> ./common/arch/arm64/configs/gki_defconfig
echo 'CONFIG_LSM="landlock,lockdown,yama,loadpin,safesetid,integrity,selinux,smack,tomoyo,apparmor,bpf,baseband_guard"' >> ./common/arch/arm64/configs/gki_defconfig
fi
if [ "${{ github.event.inputs.bbr }}" == "On" ]; then
echo "🌐 启用 BBR 网络算法..."
echo "CONFIG_TCP_CONG_ADVANCED=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_TCP_CONG_BBR=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_NET_SCH_FQ=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_TCP_CONG_BIC=n" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_TCP_CONG_WESTWOOD=n" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_TCP_CONG_HTCP=n" >> ./common/arch/arm64/configs/gki_defconfig
fi
if [ "${{ github.event.inputs.lz4kd }}" == "On" ]; then
echo "📦 启用 lz4kd压缩..."
echo "CONFIG_CRYPTO_LZ4KD=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_CRYPTO_LZ4K_OPLUS=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_ZRAM_WRITEBACK=y" >> ./common/arch/arm64/configs/gki_defconfig
fi
if [ "${{ github.event.inputs.KERNEL_VERSION }}" == "6.1" ] || [ "${{ github.event.inputs.KERNEL_VERSION }}" == "6.6" ]; then
# Add O2 config
echo "📦 为6.1 / 6.6加入O2优化..."
echo "CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE=y" >> ./common/arch/arm64/configs/gki_defconfig
fi
if [ "${{ github.event.inputs.proxy }}" == "On" ]; then
# Add proxy config
echo "📦 加入代理优化..."
echo "CONFIG_BPF_STREAM_PARSER=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_NETFILTER_XT_SET=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_MAX=65534" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_BITMAP_IP=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_BITMAP_IPMAC=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_BITMAP_PORT=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_HASH_IP=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_HASH_IPMARK=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_HASH_IPPORT=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_HASH_IPPORTIP=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_HASH_IPPORTNET=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_HASH_IPMAC=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_HASH_MAC=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_HASH_NETPORTNET=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_HASH_NET=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_HASH_NETNET=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_HASH_NETPORT=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_HASH_NETIFACE=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_LIST_SET=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP6_NF_NAT=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP6_NF_TARGET_MASQUERADE=y" >> ./common/arch/arm64/configs/gki_defconfig
fi
if [ "${{ github.event.inputs.KERNEL_VERSION }}" = "5.10" ] || [ "${{ github.event.inputs.KERNEL_VERSION }}" = "5.15" ]; then
echo "📦 正在为5.10 / 5.15系配置lto中..."
DEFCONFIG=./common/arch/arm64/configs/gki_defconfig
sed -i 's/^CONFIG_LTO=n/CONFIG_LTO=y/' "$DEFCONFIG"
sed -i 's/^CONFIG_LTO_CLANG_FULL=y/CONFIG_LTO_CLANG_THIN=y/' "$DEFCONFIG"
sed -i 's/^CONFIG_LTO_CLANG_NONE=y/CONFIG_LTO_CLANG_THIN=y/' "$DEFCONFIG"
grep -q '^CONFIG_LTO_CLANG_THIN=y' "$DEFCONFIG" || echo 'CONFIG_LTO_CLANG_THIN=y' >> "$DEFCONFIG"
fi
#跳过将uapi标准头安装到 usr/include 目录的不必要操作,节省编译时间
echo "CONFIG_HEADERS_INSTALL=n" >> ./common/arch/arm64/configs/gki_defconfig
# Remove check_defconfig
sed -i 's/check_defconfig//' ./common/build.config.gki
echo "✅ 内核配置更新完成"
- name: "🔨 Build Kernel | 编译内核"
run: |
echo "🏗️ 开始内核编译..."
export KBUILD_BUILD_USER="xiaoxiaow"
export KBUILD_BUILD_HOST="xiaoxiaow_build"
if [ "${{ github.event.inputs.KERNEL_VERSION }}" == "6.1" ]; then
export KBUILD_BUILD_TIMESTAMP="Tue Mar 10 03:53:33 UTC 2026"
export KBUILD_BUILD_VERSION=1
export PATH="$GITHUB_WORKSPACE/kernel_workspace/kernel_platform/prebuilts/clang/host/linux-x86/clang-r487747c/bin:$PATH"
export PATH="/usr/lib/ccache:$PATH"
sudo apt install libelf-dev
cd kernel_workspace/kernel_platform/common
make -j$(nproc --all) LLVM=1 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- CC="ccache clang" RUSTC=../../prebuilts/rust/linux-x86/1.73.0b/bin/rustc PAHOLE=../../prebuilts/kernel-build-tools/linux-x86/bin/pahole LD=ld.lld HOSTLD=ld.lld O=out KCFLAGS+=-O2 gki_defconfig all
elif [ "${{ github.event.inputs.KERNEL_VERSION }}" == "6.6" ]; then
export PATH="/usr/lib/ccache:$GITHUB_WORKSPACE/kernel_workspace/kernel_platform/prebuilts/clang/host/linux-x86/clang-r510928/bin:$PATH"
export PATH="/usr/lib/ccache:$PATH"
sudo apt install libelf-dev
cd kernel_workspace/kernel_platform/common
make -j$(nproc --all) LLVM=1 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- CC="ccache clang" RUSTC=../../prebuilts/rust/linux-x86/1.73.0b/bin/rustc PAHOLE=../../prebuilts/kernel-build-tools/linux-x86/bin/pahole LD=ld.lld HOSTLD=ld.lld O=out KCFLAGS+=-O2 gki_defconfig all
elif [ "${{ github.event.inputs.KERNEL_VERSION }}" == "5.15" ]; then
export PATH="$GITHUB_WORKSPACE/kernel_workspace/kernel_platform/prebuilts/clang/host/linux-x86/clang-r450784e/bin:$PATH"
export PATH="/usr/lib/ccache:$PATH"
sudo apt install libelf-dev
cd kernel_workspace/kernel_platform/common
make -j$(nproc --all) LLVM=1 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- CC="ccache clang" RUSTC=../../prebuilts/rust/linux-x86/1.73.0b/bin/rustc PAHOLE=../../prebuilts/kernel-build-tools/linux-x86/bin/pahole LD=ld.lld HOSTLD=ld.lld O=out gki_defconfig all
elif [ "${{ github.event.inputs.KERNEL_VERSION }}" == "5.10" ]; then
export PATH="$GITHUB_WORKSPACE/kernel_workspace/kernel_platform/prebuilts-master/clang/host/linux-x86/clang-r416183b/bin:$PATH"
export PATH="/usr/lib/ccache:$PATH"
sudo apt install libelf-dev
cd kernel_workspace/kernel_platform/common
make -j$(nproc --all) LLVM_IAS=1 LLVM=1 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- CC="ccache clang" RUSTC=../../prebuilts/rust/linux-x86/1.73.0b/bin/rustc PAHOLE=../../prebuilts/kernel-build-tools/linux-x86/bin/pahole LD=ld.lld HOSTLD=ld.lld O=out gki_defconfig all
fi
# 显示ccache统计信息
ccache -s
echo "✅ 内核编译完成"
- name: "📦 Package Kernel | 打包内核"
run: |
echo "📦 准备AnyKernel3打包环境..."
git clone https://github.com/Xiaomichael/AnyKernel3 --depth=1
rm -rf ./AnyKernel3/.git
mkdir -p kernel_workspace/kernel_platform/out/Final-Image-Find/
dir1=""
dir2=""
image_path=$(find "./kernel_workspace/kernel_platform/common/out/" -name "Image" | head -n 1)
if [ -n "$image_path" ]; then
dir1=$(dirname "$image_path")/
echo "✅ 成功找到 Image 文件"
fi
if [ -n "$image_path" ] && [ -f "$image_path" ]; then
echo "Image file finally located at: $image_path"
cp "$image_path" ./AnyKernel3/Image
cp "$image_path" kernel_workspace/kernel_platform/out/Final-Image-Find/Image
fi
- name: "🧩 Patch Kernel Image (KPM) | KPM修补镜像"
if: ${{ github.event.inputs.KPM == 'On' }}
run: |
echo "🔧 正在应用KPM补丁..."
cd kernel_workspace/kernel_platform/out/Final-Image-Find
curl -LO https://github.com/SukiSU-Ultra/SukiSU_KernelPatch_patch/releases/download/0.13.0/patch_linux
chmod +x patch_linux
./patch_linux
rm -f Image
mv oImage Image
cp Image $GITHUB_WORKSPACE/AnyKernel3/Image
echo "✅ KPM补丁应用完成"
- name: "🧠 Set Artifact Name | 设置产物名称"
id: set_name
run: |
if [ "${{ github.event.inputs.lz4kd }}" = "On" ]; then
BASE_NAME="${{ github.event.inputs.FEIL }}_ReSukiSU_lz4kd_${{ env.KSUVER }}"
elif [ "${{ github.event.inputs.KERNEL_VERSION }}" = "6.1" ]; then
BASE_NAME="${{ github.event.inputs.FEIL }}_ReSukiSU_lz4_zstd_${{ env.KSUVER }}"
elif [ "${{ github.event.inputs.KERNEL_VERSION }}" = "6.6" ]; then
BASE_NAME="${{ github.event.inputs.FEIL }}_ReSukiSU_lz4_${{ env.KSUVER }}"
else
BASE_NAME="${{ github.event.inputs.FEIL }}_ReSukiSU_${{ env.KSUVER }}"
fi
if [ "${{ github.event.inputs.SUSFS }}" = "On" ]; then
FINAL_NAME="${BASE_NAME}_SUSFS"
else
FINAL_NAME="${BASE_NAME}"
fi
echo "ARTIFACT_NAME=${FINAL_NAME}" >> $GITHUB_OUTPUT
- name: "📤 Upload AnyKernel3 | 上传 AnyKernel3"
uses: actions/upload-artifact@v7
with:
name: ${{ steps.set_name.outputs.ARTIFACT_NAME }}
path: ./AnyKernel3/*
- name: "📝 Find zram.ko & crypto_zstdn.ko | 查找 zram.ko & crypto_zstdn.ko"
run: |
find -name zram.ko
find -name crypto_zstdn.ko
- name: "📤 Upload zram.ko | 上传 zram.ko"
uses: actions/upload-artifact@v7
with:
name: ${{ github.event.inputs.FEIL }}_zram.ko
path: ./kernel_workspace/kernel_platform/common/out/drivers/block/zram/zram.ko
================================================
FILE: .github/workflows/Build SukiSU Ultra.yml
================================================
name: Build SukiSU Ultra
on:
workflow_dispatch:
inputs:
CPU:
description: "CPU分支"
required: true
type: choice
options:
- 'sm8750'
- 'sm8735'
- 'mt6991'
- 'sm8650'
- 'mt6989'
- 'sm8635'
- 'sm8550'
- 'sm8450'
- 'sm8475'
- 'sm7675'
- 'sm7635'
- 'sm7550'
- 'sm6375'
default: 'sm8650'
FEIL:
description: "手机型号"
required: true
type: choice
options:
- 'oneplus_13_b'
- 'oneplus_13s_b'
- 'oneplus_13t_b'
- 'oneplus_ace5_pro_b'
- 'oneplus_ace_6'
- 'oneplus_pad_2_pro_b'
- 'oneplus_pad_3_b'
- 'oneplus_ace5_ultra_b'
- 'oneplus_turbo_6'
- 'oneplus_12_b'
- 'oneplus_ace3_pro_b'
- 'oneplus_ace5_b'
- 'oneplus_13r_b'
- 'oneplus_pad2_b'
- 'oneplus_pad_pro_b'
- 'oneplus_ace5_race_b'
- 'oneplus_nord_5_b'
- 'oneplus_11_b'
- 'oneplus_12r_b'
- 'oneplus_ace2_pro_b'
- 'oneplus_ace3_b'
- 'oneplus_open_b'
- 'oneplus_10t_v'
- 'oneplus_11r_b'
- 'oneplus_ace2_b'
- 'oneplus_ace_pro_v'
- 'oneplus_10_pro_b'
- 'oneplus_ace_3v_b'
- 'oneplus_turbo_6v'
- 'oneplus_nord_4_b'
- 'oneplus_nord_ce4_lite_5g'
- 'oneplus_nord_ce4_b'
default: 'oneplus_12_b'
ANDROID_VERSION:
description: "内核安卓KMI版本"
required: true
type: choice
options:
- 'android15'
- 'android14'
- 'android13'
- 'android12'
default: 'android14'
KERNEL_VERSION:
description: "内核版本"
required: true
type: choice
options:
- '6.6'
- '6.1'
- '5.15'
- '5.10'
default: '6.1'
SUSFS:
description: "是否启用SUSFS"
required: true
type: choice
options:
- 'On'
- 'Off'
default: 'Off'
KPM:
description: "是否启用KPM"
required: true
type: choice
options:
- 'On'
- 'Off'
default: 'Off'
lz4kd:
description: "是否启用lz4kd(6.1 关闭时使用 lz4 + zstd; 6.6 关闭时使用 lz4)"
required: true
type: choice
options:
- 'On'
- 'Off'
default: 'Off'
bbg:
description: "是否启用BBG基带保护"
required: true
type: choice
options:
- 'On'
- 'Off'
default: 'On'
bbr:
description: "是否启用BBR算法(对手机日用无太大意义甚至可能负优化)"
required: true
type: choice
options:
- 'On'
- 'Off'
default: 'Off'
proxy:
description: "是否添加代理性能优化(联发科芯片跑的时候请关闭否则出现恶性问题)"
required: true
type: choice
options:
- 'On'
- 'Off'
default: 'On'
UNICODE_BYPASS:
description: "是否添加Unicode零宽绕过修复补丁(高内核版本不推荐开启, 建议使用 https://t.me/real5ec1cff/271 无痛修复)"
required: true
type: choice
options:
- 'On'
- 'Off'
default: 'Off'
jobs:
build:
name: For ${{ github.event.inputs.FEIL }} KPM ${{ github.event.inputs.KPM }} lz4kd ${{ github.event.inputs.lz4kd }} SUSFS ${{ github.event.inputs.SUSFS }}
runs-on: ubuntu-latest
env:
CCACHE_COMPILERCHECK: "%compiler% -dumpmachine; %compiler% -dumpversion"
CCACHE_NOHASHDIR: "true"
CCACHE_HARDLINK: "true"
CCACHE_MAXSIZE: 8G
steps:
- name: "🚀 Maximize Build Space | 最大化构建空间"
if: ${{ github.event.inputs.KERNEL_VERSION == '5.10' || github.event.inputs.KERNEL_VERSION == '5.15' }}
uses: easimon/maximize-build-space@master
with:
root-reserve-mb: 8192
temp-reserve-mb: 4096
remove-dotnet: 'true'
remove-android: 'true'
remove-haskell: 'true'
remove-codeql: 'true'
- name: "⚙️ Setup Cache Env | 设置缓存环境"
run: |
echo "🔧 正在设置机型隔离缓存目录..."
echo "CCACHE_DIR=$HOME/.ccache_${{ github.event.inputs.FEIL }}_SukiSU" >> $GITHUB_ENV
mkdir -p "$HOME/.ccache_${{ github.event.inputs.FEIL }}_SukiSU"
echo "✅ 缓存目录已设置: $HOME/.ccache_${{ github.event.inputs.FEIL }}_SukiSU"
- name: "🔐 Configure Git | 配置Git账户"
run: |
echo "🔧 正在配置Git用户信息..."
git config --global user.name "build"
git config --global user.email "2210077278@qq.com"
echo "✅ Git配置完成"
- name: "📦 Cache & Install Dependencies | 缓存 & 安装构建依赖"
uses: awalsh128/cache-apt-pkgs-action@latest
with:
packages: python3 git curl ccache libelf-dev build-essential flex bison libssl-dev libncurses-dev liblz4-tool zlib1g-dev libxml2-utils rsync unzip gawk dos2unix
execute_install_scripts: true
- name: "💾 Restore ccache (With SUSFS) | 恢复ccache缓存 (With SUSFS)"
if: ${{ github.event.inputs.SUSFS == 'On' }}
uses: actions/cache@v5
with:
path: ${{ env.CCACHE_DIR }}
key: ccache-${{ runner.os }}-${{ github.ref }}-${{ github.event.inputs.FEIL }}-SukiSU-SUSFS
restore-keys: |
ccache-${{ runner.os }}-${{ github.event.inputs.FEIL }}-SukiSU-SUSFS
ccache-${{ runner.os }}-SukiSU-SUSFS
- name: "💾 Restore ccache (Without SUSFS) | 恢复ccache缓存 (Without SUSFS)"
if: ${{ github.event.inputs.SUSFS == 'Off' }}
uses: actions/cache@v5
with:
path: ${{ env.CCACHE_DIR }}
key: ccache-${{ runner.os }}-${{ github.ref }}-${{ github.event.inputs.FEIL }}-SukiSU-NoSUSFS
restore-keys: |
ccache-${{ runner.os }}-${{ github.event.inputs.FEIL }}-SukiSU-NoSUSFS
ccache-${{ runner.os }}-SukiSU-NoSUSFS
- name: "⚙️ Initialize ccache | 初始化ccache"
run: |
echo "🔧 正在初始化ccache..."
INIT_FLAG="${{ env.CCACHE_DIR }}/.ccache_initialized"
if command -v ccache >/dev/null 2>&1; then
if [ ! -f "$INIT_FLAG" ]; then
mkdir -p "${{ env.CCACHE_DIR }}"
ccache -M ${{ env.CCACHE_MAXSIZE }}
touch "$INIT_FLAG"
echo "✅ ccache初始化完成"
else
echo "ℹ️ ccache已存在,跳过初始化"
fi
else
echo "⚠️ 未找到ccache命令,跳过初始化"
fi
# 显示缓存统计
ccache -s
echo "✅ ccache初始化流程完成"
- name: "📥 Install Repo Tool | 安装Repo工具"
run: |
echo "⬇️ 正在下载repo工具..."
curl -fsSL https://storage.googleapis.com/git-repo-downloads/repo > ~/repo
chmod a+x ~/repo
sudo mv ~/repo /usr/local/bin/repo
echo "✅ repo工具安装完成"
- name: "⬇️ Clone Kernel Source | 克隆内核源码"
run: |
mkdir kernel_workspace && cd kernel_workspace
echo "🌐 正在初始化内核仓库..."
repo init -u https://github.com/Xiaomichael/kernel_manifest.git -b refs/heads/oneplus/${{ github.event.inputs.CPU }} -m ${{ github.event.inputs.FEIL }}.xml --depth=1
echo "🔄 同步代码库(使用$(nproc --all)线程)..."
repo sync -c -j$(nproc --all) --no-tags --no-clone-bundle --force-sync
echo "✅ 内核源码克隆完成"
rm kernel_platform/common/android/abi_gki_protected_exports_* || echo "No protected exports!"
rm kernel_platform/msm-kernel/android/abi_gki_protected_exports_* || echo "No protected exports!"
echo "🔧 正在配置内核版本信息..."
# Remove -dirty in kernel version
sed -i 's/ -dirty//g' kernel_platform/common/scripts/setlocalversion
sed -i 's/ -dirty//g' kernel_platform/msm-kernel/scripts/setlocalversion
sed -i 's/ -dirty//g' kernel_platform/external/dtc/scripts/setlocalversion
sed -i '$i res=$(echo "$res" | sed '\''s/-dirty//g'\'')' kernel_platform/common/scripts/setlocalversion
sed -i '$i res=$(echo "$res" | sed '\''s/-dirty//g'\'')' kernel_platform/msm-kernel/scripts/setlocalversion
sed -i '$i res=$(echo "$res" | sed '\''s/-dirty//g'\'')' kernel_platform/external/dtc/scripts/setlocalversion
if [ "${{ github.event.inputs.KERNEL_VERSION }}" != "6.6" ]; then
sed -i '$s|echo "\$res"|echo "-${{ github.event.inputs.ANDROID_VERSION }}-oki-xiaoxiaow"|' kernel_platform/common/scripts/setlocalversion
sed -i '$s|echo "\$res"|echo "-${{ github.event.inputs.ANDROID_VERSION }}-oki-xiaoxiaow"|' kernel_platform/msm-kernel/scripts/setlocalversion
sed -i '$s|echo "\$res"|echo "-${{ github.event.inputs.ANDROID_VERSION }}-oki-xiaoxiaow"|' kernel_platform/external/dtc/scripts/setlocalversion
else
ESCAPED_SUFFIX=$(printf '%s\n' "-${{ github.event.inputs.ANDROID_VERSION }}-oki-xiaoxiaow" | sed 's:[\/&]:\\&:g')
sudo sed -i "s/-4k/$ESCAPED_SUFFIX/g" kernel_platform/common/arch/arm64/configs/gki_defconfig
sed -i 's/${scm_version}//' kernel_platform/common/scripts/setlocalversion
sed -i 's/${scm_version}//' kernel_platform/msm-kernel/scripts/setlocalversion
fi
echo "✅ 内核配置完成"
- name: "⚡ Setup Baseband-guard | 配置 Baseband-guard"
if: ${{ github.event.inputs.bbg == 'On' && github.event.inputs.KPM == 'Off' }}
run: |
set -e
cd kernel_workspace/kernel_platform/common
echo "🛠️ 正在设置BBG..."
curl -sSL https://github.com/vc-teahouse/Baseband-guard/raw/main/setup.sh -o setup.sh
bash setup.sh
- name: "⚡ Setup SukiSU Ultra | 配置 SukiSU Ultra"
run: |
cd kernel_workspace/kernel_platform
# 下载并执行设置脚本
echo "🛠️ 正在设置SukiSU Ultra..."
curl -LSs "https://raw.githubusercontent.com/SukiSU-Ultra/SukiSU-Ultra/builtin/kernel/setup.sh" | bash -s builtin
cd KernelSU
echo "⬇️ 下载SukiSU设置工具..."
curl -L -o sukisu_setup.bin https://github.com/Xiaomichael/OnePlus-Actions/raw/Build/script/sukisu_setup.bin
chmod +x sukisu_setup.bin
./sukisu_setup.bin
rm -rf ./sukisu_setup.bin
echo "✅ SukiSU Ultra配置完成"
- name: "🔧 Setup Patches | 配置补丁"
run: |
cd kernel_workspace
echo "⬇️ 克隆所需补丁..."
if [ "${{ github.event.inputs.SUSFS }}" == "On" ]; then
git clone https://github.com/cctv18/susfs4oki.git -b oki-${{ github.event.inputs.ANDROID_VERSION }}-${{ github.event.inputs.KERNEL_VERSION }}
fi
git clone https://github.com/Xiaomichael/kernel_patches.git
git clone https://github.com/ShirkNeko/SukiSU_patch.git
cd kernel_platform
echo "📝 复制补丁文件..."
if [ "${{ github.event.inputs.SUSFS }}" == "On" ]; then
cp ../susfs4oki/kernel_patches/50_add_susfs_in_gki-${{ github.event.inputs.ANDROID_VERSION }}-${{ github.event.inputs.KERNEL_VERSION }}.patch ./common/
cp ../susfs4oki/kernel_patches/fs/* ./common/fs/
cp ../susfs4oki/kernel_patches/include/linux/* ./common/include/linux/
else
cp ../kernel_patches/sukisu/scope_min_manual_hooks_v1.6.patch ./common/
fi
cp ../kernel_patches/zram_patches/001-lz4.patch ./common/
cp ../kernel_patches/zram_patches/lz4armv8.S ./common/lib
cp ../kernel_patches/zram_patches/002-zstd.patch ./common/
if [ "${{ github.event.inputs.UNICODE_BYPASS }}" = "On" ]; then
if [ "${{ github.event.inputs.KERNEL_VERSION }}" = "6.1" ] || [ "${{ github.event.inputs.KERNEL_VERSION }}" = "6.6" ]; then
cp ../kernel_patches/common/unicode_bypass_fix_6.1+.patch ./common/unicode_bypass_fix.patch
elif [ "${{ github.event.inputs.KERNEL_VERSION }}" = "5.15" ] || [ "${{ github.event.inputs.KERNEL_VERSION }}" = "5.10" ]; then
cp ../kernel_patches/common/unicode_bypass_fix_6.1-.patch ./common/unicode_bypass_fix.patch
fi
fi
if [ "${{ github.event.inputs.lz4kd }}" == "On" ]; then
# Copy lz4k from ShirkNeko
cp -r ../SukiSU_patch/other/zram/lz4k/include/linux/* ./common/include/linux
cp -r ../SukiSU_patch/other/zram/lz4k/lib/* ./common/lib
cp -r ../SukiSU_patch/other/zram/lz4k/crypto/* ./common/crypto
cp -r ../SukiSU_patch/other/zram/lz4k_oplus ./common/lib/
fi
cd ./common
if [ "${{ github.event.inputs.UNICODE_BYPASS }}" = "On" ]; then
echo "📦 正在应用Unicode零宽绕过修复补丁..."
patch -p1 < unicode_bypass_fix.patch
fi
if [ "${{ github.event.inputs.lz4kd }}" = "Off" ] && [ "${{ github.event.inputs.KERNEL_VERSION }}" = "6.1" ]; then
echo "📦 应用lz4+zstd补丁..."
git apply -p1 < 001-lz4.patch || true
patch -p1 < 002-zstd.patch || true
fi
if [ "${{ github.event.inputs.lz4kd }}" = "Off" ] && [ "${{ github.event.inputs.KERNEL_VERSION }}" = "6.6" ]; then
echo "📦 应用lz4补丁..."
git apply -p1 < 001-lz4.patch || true
fi
if [ "${{ github.event.inputs.lz4kd }}" == "On" ]; then
echo "📦 应用lz4kd补丁..."
cp ../../SukiSU_patch/other/zram/zram_patch/${{ github.event.inputs.KERNEL_VERSION }}/lz4kd.patch ./
patch -p1 -F 3 < lz4kd.patch || true
cp ../../SukiSU_patch/other/zram/zram_patch/${{ github.event.inputs.KERNEL_VERSION }}/lz4k_oplus.patch ./
patch -p1 -F 3 < lz4k_oplus.patch || true
fi
if [ "${{ github.event.inputs.SUSFS }}" == "On" ]; then
echo "📦 应用SUSFS补丁..."
patch -p1 < 50_add_susfs_in_gki-${{ github.event.inputs.ANDROID_VERSION }}-${{ github.event.inputs.KERNEL_VERSION }}.patch || true
else
echo "📦 应用MANUAL_HOOK补丁..."
patch -p1 -F 3 < scope_min_manual_hooks_v1.6.patch
fi
echo "✅ 所有补丁应用完成"
- name: "⚙️ Apply SCHED Patch | 应用风驰补丁"
if: ${{ github.event.inputs.KERNEL_VERSION == '6.6' }}
run: |
cd kernel_workspace/kernel_platform/common
echo "⬇️ 正在拉取风驰补丁"
if [ "${{ github.event.inputs.FEIL }}" == "oneplus_ace5_ultra" ] || [ "${{ github.event.inputs.FEIL }}" = "oneplus_ace5_ultra_b" ]; then
echo "⚠️ Ace5 Ultra 需要使用 mt6991 分支的补丁"
git clone https://github.com/Numbersf/SCHED_PATCH.git -b "mt6991"
else
echo "⚙️ 使用 sm8750 分支的补丁"
git clone https://github.com/Numbersf/SCHED_PATCH.git -b "sm8750"
fi
cp ./SCHED_PATCH/fengchi_${{ github.event.inputs.FEIL }}.patch ./
if [[ -f "fengchi_${{ github.event.inputs.FEIL }}.patch" ]]; then
echo "⚙️ 开始应用风驰补丁"
dos2unix "fengchi_${{ github.event.inputs.FEIL }}.patch"
patch -p1 -F 3 < "fengchi_${{ github.event.inputs.FEIL }}.patch"
echo "✅ 完美风驰补丁应用完成"
else
sed -i '1iobj-y += hmbird_patch.o' drivers/Makefile
wget https://github.com/Numbersf/Action-Build/raw/SukiSU-Ultra/patches/hmbird_patch.patch
echo "⚙️ 正在打OGKI转换GKI补丁"
patch -p1 -F 3 < hmbird_patch.patch
echo "✅ OGKI转换GKI_patch完成"
fi
- name: "⚙️ Configure Kernel Options | 配置内核选项"
run: |
cd kernel_workspace/kernel_platform
echo "⚙️ 正在配置内核编译选项..."
echo "📦 启用 KSU 支持..."
echo "CONFIG_KSU=y" >> ./common/arch/arm64/configs/gki_defconfig
if [ "${{ github.event.inputs.KPM }}" == "On" ]; then
echo "📦 启用 KPM..."
echo "CONFIG_KPM=y" >> ./common/arch/arm64/configs/gki_defconfig
fi
if [ "${{ github.event.inputs.SUSFS }}" == "On" ]; then
echo "📦 启用 SUSFS 功能..."
echo "CONFIG_KSU_SUSFS=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_KSU_SUSFS_SUS_PATH=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_KSU_SUSFS_SUS_MOUNT=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_KSU_SUSFS_SUS_KSTAT=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_KSU_SUSFS_SPOOF_UNAME=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_KSU_SUSFS_ENABLE_LOG=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_KSU_SUSFS_HIDE_KSU_SUSFS_SYMBOLS=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_KSU_SUSFS_SPOOF_CMDLINE_OR_BOOTCONFIG=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_KSU_SUSFS_OPEN_REDIRECT=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_KSU_SUSFS_SUS_MAP=y" >> ./common/arch/arm64/configs/gki_defconfig
else
echo "📦 启用 MANUAL_HOOK..."
echo "CONFIG_KSU_SUSFS=n" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_KSU_MANUAL_HOOK=y" >> ./common/arch/arm64/configs/gki_defconfig
fi
echo "📦 添加对 Mountify (backslashxx/mountify) 模块的支持"
echo "CONFIG_TMPFS_XATTR=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_TMPFS_POSIX_ACL=y" >> ./common/arch/arm64/configs/gki_defconfig
if [ "${{ github.event.inputs.bbg }}" == "On" ] && [ "${{ github.event.inputs.KPM }}" == "Off" ]; then
echo "⚡ 配置 BBG 中..."
echo 'CONFIG_BBG=y' >> ./common/arch/arm64/configs/gki_defconfig
echo 'CONFIG_LSM="landlock,lockdown,yama,loadpin,safesetid,integrity,selinux,smack,tomoyo,apparmor,bpf,baseband_guard"' >> ./common/arch/arm64/configs/gki_defconfig
fi
if [ "${{ github.event.inputs.bbr }}" == "On" ]; then
echo "🌐 启用 BBR 网络算法..."
echo "CONFIG_TCP_CONG_ADVANCED=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_TCP_CONG_BBR=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_NET_SCH_FQ=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_TCP_CONG_BIC=n" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_TCP_CONG_WESTWOOD=n" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_TCP_CONG_HTCP=n" >> ./common/arch/arm64/configs/gki_defconfig
fi
if [ "${{ github.event.inputs.lz4kd }}" == "On" ]; then
echo "📦 启用 lz4kd压缩..."
echo "CONFIG_CRYPTO_LZ4KD=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_CRYPTO_LZ4K_OPLUS=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_ZRAM_WRITEBACK=y" >> ./common/arch/arm64/configs/gki_defconfig
fi
if [ "${{ github.event.inputs.KERNEL_VERSION }}" == "6.1" ] || [ "${{ github.event.inputs.KERNEL_VERSION }}" == "6.6" ]; then
# Add O2 config
echo "📦 为6.1 / 6.6加入O2优化..."
echo "CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE=y" >> ./common/arch/arm64/configs/gki_defconfig
fi
if [ "${{ github.event.inputs.proxy }}" == "On" ]; then
# Add proxy config
echo "📦 加入代理优化..."
echo "CONFIG_BPF_STREAM_PARSER=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_NETFILTER_XT_SET=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_MAX=65534" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_BITMAP_IP=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_BITMAP_IPMAC=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_BITMAP_PORT=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_HASH_IP=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_HASH_IPMARK=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_HASH_IPPORT=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_HASH_IPPORTIP=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_HASH_IPPORTNET=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_HASH_IPMAC=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_HASH_MAC=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_HASH_NETPORTNET=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_HASH_NET=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_HASH_NETNET=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_HASH_NETPORT=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_HASH_NETIFACE=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_LIST_SET=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP6_NF_NAT=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP6_NF_TARGET_MASQUERADE=y" >> ./common/arch/arm64/configs/gki_defconfig
fi
if [ "${{ github.event.inputs.KERNEL_VERSION }}" = "5.10" ] || [ "${{ github.event.inputs.KERNEL_VERSION }}" = "5.15" ]; then
echo "📦 正在为5.10 / 5.15系配置lto中..."
DEFCONFIG=./common/arch/arm64/configs/gki_defconfig
sed -i 's/^CONFIG_LTO=n/CONFIG_LTO=y/' "$DEFCONFIG"
sed -i 's/^CONFIG_LTO_CLANG_FULL=y/CONFIG_LTO_CLANG_THIN=y/' "$DEFCONFIG"
sed -i 's/^CONFIG_LTO_CLANG_NONE=y/CONFIG_LTO_CLANG_THIN=y/' "$DEFCONFIG"
grep -q '^CONFIG_LTO_CLANG_THIN=y' "$DEFCONFIG" || echo 'CONFIG_LTO_CLANG_THIN=y' >> "$DEFCONFIG"
fi
#跳过将uapi标准头安装到 usr/include 目录的不必要操作,节省编译时间
echo "CONFIG_HEADERS_INSTALL=n" >> ./common/arch/arm64/configs/gki_defconfig
# Remove check_defconfig
sed -i 's/check_defconfig//' ./common/build.config.gki
echo "✅ 内核配置更新完成"
- name: "🔨 Build Kernel | 编译内核"
run: |
echo "🏗️ 开始内核编译..."
export KBUILD_BUILD_USER="xiaoxiaow"
export KBUILD_BUILD_HOST="xiaoxiaow_build"
if [ "${{ github.event.inputs.KERNEL_VERSION }}" == "6.1" ]; then
export KBUILD_BUILD_TIMESTAMP="Tue Mar 10 03:53:33 UTC 2026"
export KBUILD_BUILD_VERSION=1
export PATH="$GITHUB_WORKSPACE/kernel_workspace/kernel_platform/prebuilts/clang/host/linux-x86/clang-r487747c/bin:$PATH"
export PATH="/usr/lib/ccache:$PATH"
sudo apt install libelf-dev
cd kernel_workspace/kernel_platform/common
make -j$(nproc --all) LLVM=1 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- CC="ccache clang" RUSTC=../../prebuilts/rust/linux-x86/1.73.0b/bin/rustc PAHOLE=../../prebuilts/kernel-build-tools/linux-x86/bin/pahole LD=ld.lld HOSTLD=ld.lld O=out KCFLAGS+=-O2 gki_defconfig all
elif [ "${{ github.event.inputs.KERNEL_VERSION }}" == "6.6" ]; then
export PATH="/usr/lib/ccache:$GITHUB_WORKSPACE/kernel_workspace/kernel_platform/prebuilts/clang/host/linux-x86/clang-r510928/bin:$PATH"
export PATH="/usr/lib/ccache:$PATH"
sudo apt install libelf-dev
cd kernel_workspace/kernel_platform/common
make -j$(nproc --all) LLVM=1 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- CC="ccache clang" RUSTC=../../prebuilts/rust/linux-x86/1.73.0b/bin/rustc PAHOLE=../../prebuilts/kernel-build-tools/linux-x86/bin/pahole LD=ld.lld HOSTLD=ld.lld O=out KCFLAGS+=-O2 gki_defconfig all
elif [ "${{ github.event.inputs.KERNEL_VERSION }}" == "5.15" ]; then
export PATH="$GITHUB_WORKSPACE/kernel_workspace/kernel_platform/prebuilts/clang/host/linux-x86/clang-r450784e/bin:$PATH"
export PATH="/usr/lib/ccache:$PATH"
sudo apt install libelf-dev
cd kernel_workspace/kernel_platform/common
make -j$(nproc --all) LLVM=1 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- CC="ccache clang" RUSTC=../../prebuilts/rust/linux-x86/1.73.0b/bin/rustc PAHOLE=../../prebuilts/kernel-build-tools/linux-x86/bin/pahole LD=ld.lld HOSTLD=ld.lld O=out gki_defconfig all
elif [ "${{ github.event.inputs.KERNEL_VERSION }}" == "5.10" ]; then
export PATH="$GITHUB_WORKSPACE/kernel_workspace/kernel_platform/prebuilts-master/clang/host/linux-x86/clang-r416183b/bin:$PATH"
export PATH="/usr/lib/ccache:$PATH"
sudo apt install libelf-dev
cd kernel_workspace/kernel_platform/common
make -j$(nproc --all) LLVM_IAS=1 LLVM=1 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- CC="ccache clang" RUSTC=../../prebuilts/rust/linux-x86/1.73.0b/bin/rustc PAHOLE=../../prebuilts/kernel-build-tools/linux-x86/bin/pahole LD=ld.lld HOSTLD=ld.lld O=out gki_defconfig all
fi
# 显示ccache统计信息
ccache -s
echo "✅ 内核编译完成"
- name: "📦 Package Kernel | 打包内核"
run: |
echo "📦 准备AnyKernel3打包环境..."
git clone https://github.com/Xiaomichael/AnyKernel3 --depth=1
rm -rf ./AnyKernel3/.git
mkdir -p kernel_workspace/kernel_platform/out/Final-Image-Find/
dir1=""
dir2=""
image_path=$(find "./kernel_workspace/kernel_platform/common/out/" -name "Image" | head -n 1)
if [ -n "$image_path" ]; then
dir1=$(dirname "$image_path")/
echo "✅ 成功找到 Image 文件"
fi
if [ -n "$image_path" ] && [ -f "$image_path" ]; then
echo "Image file finally located at: $image_path"
cp "$image_path" ./AnyKernel3/Image
cp "$image_path" kernel_workspace/kernel_platform/out/Final-Image-Find/Image
fi
- name: "🧩 Patch Kernel Image (KPM) | KPM修补镜像"
if: ${{ github.event.inputs.KPM == 'On' }}
run: |
echo "🔧 正在应用KPM补丁..."
cd kernel_workspace/kernel_platform/out/Final-Image-Find
curl -LO https://github.com/SukiSU-Ultra/SukiSU_KernelPatch_patch/releases/download/0.13.0/patch_linux
chmod +x patch_linux
./patch_linux
rm -f Image
mv oImage Image
cp Image $GITHUB_WORKSPACE/AnyKernel3/Image
echo "✅ KPM补丁应用完成"
- name: "🧠 Set Artifact Name | 设置产物名称"
id: set_name
run: |
if [ "${{ github.event.inputs.lz4kd }}" = "On" ]; then
BASE_NAME="${{ github.event.inputs.FEIL }}_SukiSU_Ultra_lz4kd_${{ env.KSUVER }}"
elif [ "${{ github.event.inputs.KERNEL_VERSION }}" = "6.1" ]; then
BASE_NAME="${{ github.event.inputs.FEIL }}_SukiSU_Ultra_lz4_zstd_${{ env.KSUVER }}"
elif [ "${{ github.event.inputs.KERNEL_VERSION }}" = "6.6" ]; then
BASE_NAME="${{ github.event.inputs.FEIL }}_SukiSU_Ultra_lz4_${{ env.KSUVER }}"
else
BASE_NAME="${{ github.event.inputs.FEIL }}_SukiSU_Ultra_${{ env.KSUVER }}"
fi
if [ "${{ github.event.inputs.SUSFS }}" = "On" ]; then
FINAL_NAME="${BASE_NAME}_SUSFS"
else
FINAL_NAME="${BASE_NAME}"
fi
echo "ARTIFACT_NAME=${FINAL_NAME}" >> $GITHUB_OUTPUT
- name: "📤 Upload AnyKernel3 | 上传 AnyKernel3"
uses: actions/upload-artifact@v7
with:
name: ${{ steps.set_name.outputs.ARTIFACT_NAME }}
path: ./AnyKernel3/*
- name: "📝 Find zram.ko & crypto_zstdn.ko | 查找 zram.ko & crypto_zstdn.ko"
run: |
find -name zram.ko
find -name crypto_zstdn.ko
- name: "📤 Upload zram.ko | 上传 zram.ko"
uses: actions/upload-artifact@v7
with:
name: ${{ github.event.inputs.FEIL }}_zram.ko
path: ./kernel_workspace/kernel_platform/common/out/drivers/block/zram/zram.ko
# - name: "🤖 Get bot script | 获取 bot 脚本"
# uses: actions/checkout@v6
# with:
# path: bot
# - name: "📤 Upload to telegram | 上传至Telegram群组"
# run: |
# if [ ! -z "${{ secrets.BOT_TOKEN }}" ]; then
# echo "📤 正在上传到Telegram..."
# cd AnyKernel3
# zip -q -r "../${{ steps.set_name.outputs.ARTIFACT_NAME }}.zip" ./*
# cd ..
# pip3 install telethon
# python3 ./bot/script/buildbot.py "./${{ steps.set_name.outputs.ARTIFACT_NAME }}.zip"
# echo "✅ 文件已上传到Telegram"
# fi
# env:
# CHATID: ${{secrets.CHATID}}
# BOT_TOKEN: ${{secrets.BOT_TOKEN}}
# MESSAGE_THREAD_ID: ${{secrets.MESSAGE_THREAD_ID}}
# KernelVer: ${{ github.event.inputs.ANDROID_VERSION}}-${{ github.event.inputs.KERNEL_VERSION }}
# DEVICE: ${{ github.event.inputs.FEIL }}
# KPM: ${{ github.event.inputs.KPM }}
# LZ4KD: ${{ github.event.inputs.lz4kd }}
# BBR: ${{ github.event.inputs.bbr }}
# KSU_VAR: "SukiSU"
================================================
FILE: .github/workflows/Clean_ccache.yml
================================================
name: Clean Caches
on:
workflow_dispatch:
jobs:
clean-caches:
runs-on: ubuntu-latest
permissions:
actions: write
steps:
- name: 获取并删除所有缓存
uses: actions/github-script@v6
with:
script: |
const { owner, repo } = context.repo;
let totalDeleted = 0;
// 获取所有缓存
const caches = await github.rest.actions.getActionsCacheList({
owner,
repo,
per_page: 100
});
// 删除匹配的缓存
for (const cache of caches.data.actions_caches) {
if (cache.key.startsWith('ccache-')) {
console.log(`删除缓存: ${cache.key}`);
await github.rest.actions.deleteActionsCacheById({
owner,
repo,
cache_id: cache.id
});
totalDeleted++;
}
}
return `成功删除 ${totalDeleted} 个缓存`;
- name: 重置环境
run: |
rm -rf $HOME/.ccache/*
sudo apt clean
sudo journalctl --vacuum-time=1s
sudo rm -rf /var/log/*
docker system prune -af || true
sudo rm -rf /tmp/*
echo "容器环境已重置!"
echo "清理后空间:"
df -h
================================================
FILE: .github/workflows/Clean_workflows.yml
================================================
name: Clean Workflows
on:
workflow_dispatch:
inputs:
workflow_name:
type: choice
description: '清理的工作流名称'
required: true
default: 'Build SukiSU Ultra'
options:
- Build SukiSU Ultra
- Build KernelSU Next
- Build Kernel Only
- Build KernelSU Official
- Build SukiSU Ultra (40129)
- Build ReSukiSU
count:
description: '最多清理的运行次数'
required: false
default: '20'
delete_failed:
description: '是否删除失败的运行记录'
required: false
type: boolean
default: true
delete_success:
description: '是否删除成功的运行记录'
required: false
type: boolean
default: false
delete_cancelled:
description: '是否删除已取消的运行记录'
required: false
type: boolean
default: true
reverse_order:
description: '是否从旧到新开始清理'
required: false
type: boolean
default: true
permissions:
actions: write
jobs:
cleanup:
runs-on: ubuntu-latest
steps:
- name: 安装 GitHub CLI 和 jq
run: |
sudo apt-get update
sudo apt-get install -y gh jq
- name: 认证 GitHub CLI
run: echo "${{ secrets.GITHUB_TOKEN }}" | gh auth login --with-token
- name: 清理指定工作流及本工作流运行记录
env:
REPO: ${{ github.repository }}
COUNT: ${{ inputs.count }}
DELETE_FAILED: ${{ inputs.delete_failed }}
DELETE_SUCCESS: ${{ inputs.delete_success }}
DELETE_CANCELLED: ${{ inputs.delete_cancelled }}
REVERSE_ORDER: ${{ inputs.reverse_order }}
WORKFLOW_NAME: ${{ inputs.workflow_name }}
CURRENT_RUN_ID: ${{ github.run_id }}
run: |
set -e
echo "当前仓库:$REPO"
echo "查找工作流 \"$WORKFLOW_NAME\" 的 ID..."
WORKFLOW_ID=$(gh api repos/$REPO/actions/workflows | jq -r ".workflows[] | select(.name == \"$WORKFLOW_NAME\") | .id")
if [ -z "$WORKFLOW_ID" ]; then
echo "未找到工作流 \"$WORKFLOW_NAME\",退出。"
exit 1
fi
echo "开始分页获取所有运行记录..."
PER_PAGE=100
PAGE=1
MATCHED_RUNS="[]"
while true; do
RESP=$(gh api "repos/$REPO/actions/workflows/$WORKFLOW_ID/runs?per_page=$PER_PAGE&page=$PAGE")
RUNS=$(echo "$RESP" | jq '.workflow_runs')
COUNT_THIS_PAGE=$(echo "$RUNS" | jq 'length')
if [ "$COUNT_THIS_PAGE" -eq 0 ]; then
break
fi
MATCHED_RUNS=$(jq -s 'add' <(echo "$MATCHED_RUNS") <(echo "$RUNS"))
PAGE=$((PAGE + 1))
done
echo "共获取到 $(echo "$MATCHED_RUNS" | jq 'length') 条运行记录。"
# 排序顺序:旧到新 or 新到旧
if [[ "$REVERSE_ORDER" == "true" ]]; then
SORTED_RUNS=$(echo "$MATCHED_RUNS" | jq 'sort_by(.run_started_at)')
else
SORTED_RUNS=$(echo "$MATCHED_RUNS" | jq 'sort_by(.run_started_at) | reverse')
fi
# 仅保留前 N 条
TO_DELETE_RUNS=$(echo "$SORTED_RUNS" | jq ".[0:${COUNT}]")
echo "$TO_DELETE_RUNS" | jq -c '.[]' | while read run; do
ID=$(echo "$run" | jq -r '.id')
STATUS=$(echo "$run" | jq -r '.conclusion')
STATE=$(echo "$run" | jq -r '.status')
if [[ "$STATE" == "in_progress" || "$STATE" == "queued" ]]; then
echo "跳过运行 ID: $ID(状态为 $STATE)"
continue
fi
if [[ "$STATUS" == "failure" && "$DELETE_FAILED" != "true" ]]; then continue; fi
if [[ "$STATUS" == "success" && "$DELETE_SUCCESS" != "true" ]]; then continue; fi
if [[ "$STATUS" == "cancelled" && "$DELETE_CANCELLED" != "true" ]]; then continue; fi
echo "删除运行记录 ID: $ID (状态: $STATUS)"
gh api -X DELETE "repos/$REPO/actions/runs/$ID" || echo "删除失败"
done
echo "清理本工作流运行记录..."
SELF_WORKFLOW_ID=$(gh api repos/$REPO/actions/workflows | jq -r '.workflows[] | select(.name == "清理工作流运行记录") | .id')
if [ -n "$SELF_WORKFLOW_ID" ]; then
SELF_RUNS=$(gh api "repos/$REPO/actions/workflows/$SELF_WORKFLOW_ID/runs?per_page=50" | jq -c '.workflow_runs[]')
echo "$SELF_RUNS" | while read run; do
ID=$(echo "$run" | jq -r '.id')
if [[ "$ID" == "$CURRENT_RUN_ID" ]]; then
echo "跳过当前运行 ID: $ID"
continue
fi
echo "删除本工作流运行记录 ID: $ID"
gh api -X DELETE "repos/$REPO/actions/runs/$ID" || echo "删除失败"
done
fi
================================================
FILE: README.md
================================================
# ⭐⭐⭐ Star This Project ⭐⭐⭐
如果您觉得这个项目对您有帮助,请给我一个 ``Star`` 或 ``进行赞助``!您的支持是我持续改进的动力。❤❤❤
如果遇到问题欢迎提交``issue``!也随时欢迎``Pull Requests``!
[](https://t.me/gki_kernels_xiaoxiaow) [](https://www.coolapk.com/u/24701380)
## OnePlus 开源地址
[](https://github.com/Xiaomichael/kernel_manifest)
## 设备支持
支持欧加真内核版本 `5.10-6.6` 的设备,只要跑出来内核版本号一样(或大于的可以尝试一下)就可以用
内核版本为 `6.12` 的可以去这个 [专用仓库](https://github.com/Xiaomichael/oppo_oplus_realme_sm8850)
## KernelSU管理器支持
支持 ``ReSukiSU`` ``SukiSU Ultra`` ``KernelSU Next`` ``KernelSU Official``, 当然你也可以编译仅加入优化的 ``无 Root`` 内核
## 使用指南
### ① 分支选择
1. 点击 `Branches` 切换处理器分支
2. 选择适合您设备的配置 (Tips: 如果实在找不到代号名称去网上搜搜)
### ② 配置文件说明
- `_b` 后缀:ColorOS/OxygenOS 16
- `_v` 后缀:ColorOS/OxygenOS 15
- `_u` 后缀:ColorOS/OxygenOS 14
- `_t` 后缀:ColorOS/OxygenOS 13
### ③ 配置开关建议
- **SUSFS选项**:SUSFS在编译时已经改为可选,看你的需求进行开关。近期上游在拉💩💩💩, 建议关闭
- **KPM选项**:仅在 ``SukiSU Ultra`` ``ReSukiSU`` 支持开启,建议禁用以减少电量消耗,挂🐕去④
- **lz4kd**:
- ``6.1系``内核:建议关闭该选项以获得更好的 `lz4 + zstd` 压缩方式
- ``6.6系``内核:建议关闭该选项以获得更好的 `lz4` 压缩方式
- ``5.10 - 5.15系``内核:建议保持开启
- **BBR算法**:对手机日用无太大意义甚至可能``负优化``,推荐关闭
- **BBG基带守护**: 推荐开启,看名字就知道是干啥的
- **⚠️代理优化**: 骁龙芯片可以开,联发科芯片 `千万不要开` ,否则出现恶性Bug!
- **是否添加Unicode零宽绕过修复补丁**: 仅推荐内核KMI版本为``android12-5.10``开启, ``5.15 - 6.12``可以使用 [这个 LSPosed 模块](https://t.me/real5ec1cff/271) 无痛修复
================================================
FILE: local/Build_KernelSU.sh
================================================
#!/bin/bash
#export all_proxy=socks5://192.168.x.x:x/
set -e
clear
echo "================================================"
echo " KernelSU OnePlus Kernel Build Configuration "
echo "================================================"
echo " 按回车键可直接使用 [方括号] 中的默认值"
echo ""
ask() {
local prompt default reply
prompt="$1"
default="$2"
read -p "$prompt [$default]: " reply
echo "${reply:-$default}"
}
CPU=$(ask "请输入 CPU 分支 (例如: sm8750, sm8650, sm8550, sm8475)" "sm8650")
FEIL=$(ask "请输入手机型号 (例如: oneplus_13_b, oneplus_12_b, oneplus_11_b)" "oneplus_12_b")
ANDROID_VERSION=$(ask "请输入内核安卓 KMI 版本 (android15, android14, android13, android12)" "android14")
KERNEL_VERSION=$(ask "请输入内核版本 (6.6, 6.1, 5.15, 5.10)" "6.1")
SUSFS=$(ask "是否启用 SUSFS? (On/Off)" "Off")
lz4kd=$(ask "是否启用 lz4kd? (6.1 关闭时使用 lz4 + zstd; 6.6 关闭时使用 lz4) (On/Off)" "Off")
bbr=$(ask "是否启用 BBR 拥塞控制算法? (On/Off)" "Off")
bbg=$(ask "是否启用 Baseband-Guard 基带防护? (On/Off)" "On")
proxy=$(ask "是否添加代理性能优化? (如为联发科 CPU 必须选择 Off) (On/Off)" "On")
UNICODE_BYPASS=$(ask "是否添加Unicode零宽绕过修复补丁(高内核版本不推荐开启, 建议使用 https://t.me/real5ec1cff/271 无痛修复) (On/Off)" "Off")
clear
echo ""
echo "================================================="
echo " 配置摘要"
echo "================================================="
echo "手机型号 : $FEIL"
echo "CPU 分支 : $CPU"
echo "安卓 KMI 版本 : $ANDROID_VERSION"
echo "内核版本 : $KERNEL_VERSION"
echo "是否启用 SUSFS : $SUSFS"
echo "是否启用 lz4kd : $lz4kd"
echo "是否启用 BBR : $bbr"
echo "是否启用 Baseband-Guard : $bbg"
echo "是否启用代理优化 : $proxy"
echo "是否启用 Unicode 绕过修复 : $UNICODE_BYPASS"
echo "================================================="
read -p "按回车键开始构建流程..."
clear
echo "📦 正在准备构建工作空间..."
WORKSPACE=$PWD/build_workspace
sudo rm -rf "$WORKSPACE"
mkdir -p "$WORKSPACE"
cd "$WORKSPACE"
echo "📦 正在安装构建依赖..."
sudo apt-get update
sudo DEBIAN_FRONTEND=noninteractive apt-get install -yq --no-install-recommends \
python3 git curl ccache libelf-dev \
build-essential flex bison libssl-dev \
libncurses-dev liblz4-tool zlib1g-dev \
libxml2-utils rsync unzip python3-pip gawk dos2unix
clear
echo "✅ 必要构建依赖安装完成"
echo "⚙️ 正在配置 ccache 缓存..."
if [ "$SUSFS" == "On" ]; then
export CCACHE_DIR="$HOME/.ccache_${FEIL}_Official_SUSFS"
else
export CCACHE_DIR="$HOME/.ccache_${FEIL}_Official_NoSUSFS"
fi
export CCACHE_COMPILERCHECK="%compiler% -dumpmachine; %compiler% -dumpversion"
export CCACHE_NOHASHDIR="true"
export CCACHE_HARDLINK="true"
export CCACHE_MAXSIZE="20G"
export PATH="/usr/lib/ccache:$PATH"
mkdir -p "$CCACHE_DIR"
echo "✅ ccache 缓存目录: $CCACHE_DIR"
ccache -M "$CCACHE_MAXSIZE"
ccache -z
echo "🔐 正在配置 Git 用户信息..."
git config --global user.name "Local Builder"
git config --global user.email "builder@localhost"
echo "✅ Git 用户信息配置完成"
if ! command -v repo &> /dev/null; then
echo "📥 未检测到 repo 工具,正在安装..."
curl -fsSL https://storage.googleapis.com/git-repo-downloads/repo > ~/repo
chmod a+x ~/repo
sudo mv ~/repo /usr/local/bin/repo
echo "✅ repo 工具安装完成"
else
echo "ℹ️ 已检测到 repo 工具,跳过安装"
fi
echo "⬇️ 正在准备内核源码目录..."
sudo rm -rf kernel_workspace
mkdir -p kernel_workspace && cd kernel_workspace
echo "🌐 正在初始化 oneplus/${CPU} 分支、机型 ${FEIL} 的 manifest..."
repo init -u https://github.com/Xiaomichael/kernel_manifest.git -b refs/heads/oneplus/${CPU} -m ${FEIL}.xml --depth=1
echo "🔄 正在同步内核源码仓库 (使用 $(nproc --all) 线程)..."
repo sync -c -j$(nproc --all) --no-tags --no-clone-bundle --force-sync
echo "✅ 内核源码同步完成"
export adv=$ANDROID_VERSION
echo "🔧 正在清理并修改版本字符串..."
rm -f kernel_platform/common/android/abi_gki_protected_exports_* || echo "common 目录下无受保护导出表,无需删除"
rm -f kernel_platform/msm-kernel/android/abi_gki_protected_exports_* || echo "msm-kernel 目录下无受保护导出表,无需删除"
sed -i 's/ -dirty//g' kernel_platform/common/scripts/setlocalversion
sed -i 's/ -dirty//g' kernel_platform/msm-kernel/scripts/setlocalversion
sed -i 's/ -dirty//g' kernel_platform/external/dtc/scripts/setlocalversion
sed -i '$i res=$(echo "$res" | sed '\''s/-dirty//g'\'')' kernel_platform/common/scripts/setlocalversion
sed -i '$i res=$(echo "$res" | sed '\''s/-dirty//g'\'')' kernel_platform/msm-kernel/scripts/setlocalversion
sed -i '$i res=$(echo "$res" | sed '\''s/-dirty//g'\'')' kernel_platform/external/dtc/scripts/setlocalversion
if [ "$KERNEL_VERSION" != "6.6" ]; then
sed -i '$s|echo "\$res"|echo "-'"$adv"'-oki-xiaoxiaow"|' kernel_platform/common/scripts/setlocalversion
sed -i '$s|echo "\$res"|echo "-'"$adv"'-oki-xiaoxiaow"|' kernel_platform/msm-kernel/scripts/setlocalversion
sed -i '$s|echo "\$res"|echo "-'"$adv"'-oki-xiaoxiaow"|' kernel_platform/external/dtc/scripts/setlocalversion
else
ESCAPED_SUFFIX=$(printf '%s\n' "-${ANDROID_VERSION}-oki-xiaoxiaow" | sed 's:[\/&]:\\&:g')
sed -i "s/-4k/${ESCAPED_SUFFIX}/g" kernel_platform/common/arch/arm64/configs/gki_defconfig
sed -i 's/\${scm_version}//' kernel_platform/common/scripts/setlocalversion
sed -i 's/\${scm_version}//' kernel_platform/msm-kernel/scripts/setlocalversion
fi
echo "✅ 内核仓库准备完毕并完成版本号清理"
if [ "$bbg" = "On" ]; then
set -e
cd kernel_platform/common
echo "🛡️ 正在配置 Baseband-Guard 基带防护..."
curl -sSL https://github.com/vc-teahouse/Baseband-guard/raw/main/setup.sh -o setup.sh
bash setup.sh
cd ../..
echo "✅ Baseband-Guard 配置完成"
fi
echo "⚡ 正在配置 KernelSU..."
cd kernel_platform
curl -LSs "https://raw.githubusercontent.com/tiann/KernelSU/refs/heads/main/kernel/setup.sh" | bash -s main
cd KernelSU
KSU_VERSION=$(expr $(curl -sI "https://api.github.com/repos/tiann/KernelSU/commits?sha=main&per_page=1" | grep -i "link:" | sed -n 's/.*page=\([0-9]*\)>; rel="last".*/\1/p') "+" 30000)
echo "KSUVER=$KSU_VERSION" >> $GITHUB_ENV
sed -i "s/DKSU_VERSION=16/DKSU_VERSION=${KSU_VERSION}/" kernel/Kbuild
echo "✅ KernelSU 版本信息配置完成"
cd ../..
echo "🔧 正在克隆所需补丁..."
if [ "$SUSFS" == "On" ]; then
git clone https://github.com/cctv18/susfs4oki.git -b oki-${ANDROID_VERSION}-${KERNEL_VERSION}
fi
git clone https://github.com/Xiaomichael/kernel_patches.git
git clone https://github.com/ShirkNeko/SukiSU_patch.git
cd kernel_platform
echo "📝 正在复制补丁文件..."
cp ../susfs4oki/kernel_patches/50_add_susfs_in_gki-${ANDROID_VERSION}-${KERNEL_VERSION}.patch ./common/
cp ../susfs4oki/kernel_patches/fs/* ./common/fs/
cp ../susfs4oki/kernel_patches/include/linux/* ./common/include/linux/
fi
cp ../kernel_patches/zram_patches/001-lz4.patch ./common/
cp ../kernel_patches/zram_patches/lz4armv8.S ./common/lib
cp ../kernel_patches/zram_patches/002-zstd.patch ./common/
if [ "$UNICODE_BYPASS" = "On" ]; then
if [ "$KERNEL_VERSION" = "6.1" ] || [ "$KERNEL_VERSION" = "6.6" ]; then
cp ../kernel_patches/common/unicode_bypass_fix_6.1+.patch ./common/unicode_bypass_fix.patch
elif [ "$KERNEL_VERSION" = "5.15" ] || [ "$KERNEL_VERSION" = "5.10" ]; then
cp ../kernel_patches/common/unicode_bypass_fix_6.1-.patch ./common/unicode_bypass_fix.patch
fi
fi
if [ "$lz4kd" = "On" ]; then
echo "🚀 正在复制 lz4kd 相关补丁..."
cp -r ../SukiSU_patch/other/zram/lz4k/include/linux/* ./common/include/linux
cp -r ../SukiSU_patch/other/zram/lz4k/lib/* ./common/lib
cp -r ../SukiSU_patch/other/zram/lz4k/crypto/* ./common/crypto
cp -r ../SukiSU_patch/other/zram/lz4k_oplus ./common/lib/
fi
echo "🔧 正在应用补丁..."
if [ "$SUSFS" == "On" ]; then
cd ./KernelSU
patch -p1 < 10_enable_susfs_for_ksu.patch || true
fi
if [ "$SUSFS" == "On" ]; then
cd ../common
patch -p1 < 50_add_susfs_in_gki-${ANDROID_VERSION}-${KERNEL_VERSION}.patch || true
cp ../../kernel_patches/69_hide_stuff.patch ./
patch -p1 -F 3 < 69_hide_stuff.patch
elif [ "$SUSFS" == "Off" ]; then
cd ./common
fi
if [ "$UNICODE_BYPASS" = "On" ]; then
echo "📦 正在应用Unicode零宽绕过修复补丁..."
patch -p1 < unicode_bypass_fix.patch
fi
if [ "$lz4kd" = "Off" ] && [ "$KERNEL_VERSION" = "6.1" ]; then
echo "📦 正在为 6.1 应用 lz4 + zstd 补丁..."
git apply -p1 < 001-lz4.patch || true
patch -p1 < 002-zstd.patch || true
fi
if [ "$lz4kd" = "Off" ] && [ "$KERNEL_VERSION" = "6.6" ]; then
echo "📦 正在为 6.6 应用 lz4 补丁..."
git apply -p1 < 001-lz4.patch || true
fi
if [ "$lz4kd" = "On" ]; then
echo "📦 正在应用 lz4kd / lz4k_oplus 补丁..."
cp ../../SukiSU_patch/other/zram/zram_patch/${KERNEL_VERSION}/lz4kd.patch ./
patch -p1 -F 3 < lz4kd.patch || true
cp ../../SukiSU_patch/other/zram/zram_patch/${KERNEL_VERSION}/lz4k_oplus.patch ./
patch -p1 -F 3 < lz4k_oplus.patch || true
fi
echo "✅ 所有补丁应用完成"
cd ../..
if [ "$KERNEL_VERSION" = "6.6" ]; then
cd kernel_platform/common
echo "⬇️ 正在拉取风驰补丁"
if [ "$FEIL" = "oneplus_ace5_ultra" ] || [ "$FEIL" = "oneplus_ace5_ultra_b" ]; then
echo "⚠️ Ace5 Ultra 需要使用 mt6991 分支的补丁"
git clone https://github.com/Numbersf/SCHED_PATCH.git -b "mt6991"
else
echo "⚙️ 使用 sm8750 分支的补丁"
git clone https://github.com/Numbersf/SCHED_PATCH.git -b "sm8750"
fi
cp ./SCHED_PATCH/fengchi_$FEIL.patch ./
if [[ -f "fengchi_$FEIL.patch" ]]; then
echo "⚙️ 开始应用风驰补丁"
dos2unix "fengchi_$FEIL.patch"
patch -p1 -F 3 < "fengchi_$FEIL.patch"
echo "✅ 完美风驰补丁应用完成"
else
echo "⚠️ 该6.6机型暂不支持风驰补丁, 正在应用OGKI转GKI补丁"
sed -i '1iobj-y += hmbird_patch.o' drivers/Makefile
wget https://github.com/Numbersf/Action-Build/raw/SukiSU-Ultra/patches/hmbird_patch.patch
echo "⚙️ 正在打OGKI转换GKI补丁"
patch -p1 -F 3 < hmbird_patch.patch
echo "✅ OGKI转换GKI_patch完成"
fi
cd ../..
fi
echo "⚙️ 正在配置内核编译选项..."
DEFCONFIG_PATH="$WORKSPACE/kernel_workspace/kernel_platform/common/arch/arm64/configs/gki_defconfig"
echo "CONFIG_KSU=y" >> "$DEFCONFIG_PATH"
#添加对 Mountify (backslashxx/mountify) 模块的支持
echo "CONFIG_TMPFS_XATTR=y" >> "$DEFCONFIG_PATH"
echo "CONFIG_TMPFS_POSIX_ACL=y" >> "$DEFCONFIG_PATH"
if [ "$SUSFS" == "On" ]; then
echo "⚡ 配置 SUSFS 中..."
cat <> "$DEFCONFIG_PATH"
CONFIG_KSU_SUSFS=y
CONFIG_KSU_SUSFS_SUS_PATH=y
CONFIG_KSU_SUSFS_SUS_MOUNT=y
CONFIG_KSU_SUSFS_SUS_KSTAT=y
CONFIG_KSU_SUSFS_SPOOF_UNAME=y
CONFIG_KSU_SUSFS_ENABLE_LOG=y
CONFIG_KSU_SUSFS_HIDE_KSU_SUSFS_SYMBOLS=y
CONFIG_KSU_SUSFS_SPOOF_CMDLINE_OR_BOOTCONFIG=y
CONFIG_KSU_SUSFS_OPEN_REDIRECT=y
CONFIG_KSU_SUSFS_SUS_MAP=y
EOT
else
echo "CONFIG_KSU_SUSFS=n" >> "$DEFCONFIG_PATH"
fi
if [ "$bbg" = "On" ]; then
echo "⚡ 配置 BBG 中..."
cat <> "$DEFCONFIG_PATH"
CONFIG_BBG=y
CONFIG_LSM="landlock,lockdown,yama,loadpin,safesetid,integrity,selinux,smack,tomoyo,apparmor,bpf,baseband_guard"
EOT
fi
if [ "$bbr" = "On" ]; then
echo "🌐 启用 BBR 网络算法..."
cat <> "$DEFCONFIG_PATH"
CONFIG_TCP_CONG_ADVANCED=y
CONFIG_TCP_CONG_BBR=y
CONFIG_NET_SCH_FQ=y
CONFIG_TCP_CONG_BIC=n
CONFIG_TCP_CONG_WESTWOOD=n
CONFIG_TCP_CONG_HTCP=n
EOT
fi
if [ "$lz4kd" = "On" ]; then
echo "📦 启用 lz4kd 与 写回支持..."
cat <> "$DEFCONFIG_PATH"
CONFIG_CRYPTO_LZ4KD=y
CONFIG_CRYPTO_LZ4K_OPLUS=y
CONFIG_ZRAM_WRITEBACK=y
EOT
fi
if [ "$KERNEL_VERSION" = "6.1" ] || [ "$KERNEL_VERSION" = "6.6" ]; then
echo "CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE=y" >> "$DEFCONFIG_PATH"
fi
if [ "$proxy" = "On" ]; then
echo "📦 添加代理相关网络优化选项..."
cat <> "$DEFCONFIG_PATH"
CONFIG_BPF_STREAM_PARSER=y
CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=y
CONFIG_NETFILTER_XT_SET=y
CONFIG_IP_SET=y
CONFIG_IP_SET_MAX=65534
CONFIG_IP_SET_BITMAP_IP=y
CONFIG_IP_SET_BITMAP_IPMAC=y
CONFIG_IP_SET_BITMAP_PORT=y
CONFIG_IP_SET_HASH_IP=y
CONFIG_IP_SET_HASH_IPMARK=y
CONFIG_IP_SET_HASH_IPPORT=y
CONFIG_IP_SET_HASH_IPPORTIP=y
CONFIG_IP_SET_HASH_IPPORTNET=y
CONFIG_IP_SET_HASH_IPMAC=y
CONFIG_IP_SET_HASH_MAC=y
CONFIG_IP_SET_HASH_NETPORTNET=y
CONFIG_IP_SET_HASH_NET=y
CONFIG_IP_SET_HASH_NETNET=y
CONFIG_IP_SET_HASH_NETPORT=y
CONFIG_IP_SET_HASH_NETIFACE=y
CONFIG_IP_SET_LIST_SET=y
CONFIG_IP6_NF_NAT=y
CONFIG_IP6_NF_TARGET_MASQUERADE=y
EOT
fi
if [ "$KERNEL_VERSION" = "5.10" ] || [ "$KERNEL_VERSION" = "5.15" ]; then
echo "📦 正在为 5.10 / 5.15 系配置 LTO..."
sed -i 's/^CONFIG_LTO=n/CONFIG_LTO=y/' "$DEFCONFIG_PATH"
sed -i 's/^CONFIG_LTO_CLANG_FULL=y/CONFIG_LTO_CLANG_THIN=y/' "$DEFCONFIG_PATH"
sed -i 's/^CONFIG_LTO_CLANG_NONE=y/CONFIG_LTO_CLANG_THIN=y/' "$DEFCONFIG_PATH"
grep -q '^CONFIG_LTO_CLANG_THIN=y' "$DEFCONFIG_PATH" || echo 'CONFIG_LTO_CLANG_THIN=y' >> "$DEFCONFIG_PATH"
fi
echo "CONFIG_HEADERS_INSTALL=n" >> "$DEFCONFIG_PATH"
sed -i 's/check_defconfig//' "$WORKSPACE/kernel_workspace/kernel_platform/common/build.config.gki"
echo "✅ defconfig 配置更新完成"
cd ../..
echo "🔨 开始内核编译..."
cd "$WORKSPACE/kernel_workspace/kernel_platform/common"
MAKE_CMD_COMMON="make -j$(nproc --all) LLVM=1 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- CC=\"ccache clang\" RUSTC=../../prebuilts/rust/linux-x86/1.73.0b/bin/rustc PAHOLE=../../prebuilts/kernel-build-tools/linux-x86/bin/pahole LD=ld.lld HOSTLD=ld.lld O=out gki_defconfig all"
export KBUILD_BUILD_USER="xiaoxiaow"
export KBUILD_BUILD_HOST="xiaoxiaow_build"
if [ "$KERNEL_VERSION" = "6.1" ]; then
export KBUILD_BUILD_TIMESTAMP="Tue Mar 10 03:53:33 UTC 2026"
export KBUILD_BUILD_VERSION=1
export PATH="$WORKSPACE/kernel_workspace/kernel_platform/prebuilts/clang/host/linux-x86/clang-r487747c/bin:$PATH"
eval "$MAKE_CMD_COMMON KCFLAGS+=-O2"
elif [ "$KERNEL_VERSION" = "6.6" ]; then
export KBUILD_BUILD_VERSION=1
export PATH="$WORKSPACE/kernel_workspace/kernel_platform/prebuilts/clang/host/linux-x86/clang-r510928/bin:$PATH"
eval "$MAKE_CMD_COMMON KCFLAGS+=-O2"
elif [ "$KERNEL_VERSION" = "5.15" ]; then
export PATH="$WORKSPACE/kernel_workspace/kernel_platform/prebuilts/clang/host/linux-x86/clang-r450784e/bin:$PATH"
eval "$MAKE_CMD_COMMON"
elif [ "$KERNEL_VERSION" = "5.10" ]; then
export PATH="$WORKSPACE/kernel_workspace/kernel_platform/prebuilts-master/clang/host/linux-x86/clang-r416183b/bin:$PATH"
eval "make -j$(nproc --all) LLVM_IAS=1 LLVM=1 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- CC=\"ccache clang\" RUSTC=../../prebuilts/rust/linux-x86/1.73.0b/bin/rustc PAHOLE=../../prebuilts/kernel-build-tools/linux-x86/bin/pahole LD=ld.lld HOSTLD=ld.lld O=out gki_defconfig all"
else
echo "❌ 不支持的内核版本: $KERNEL_VERSION" && exit 1
fi
echo "📊 当前 ccache 统计信息如下:"
ccache -s
echo "✅ 内核编译完成"
cd "$WORKSPACE"
echo "📦 正在获取 AnyKernel3 并准备打包..."
git clone https://github.com/Xiaomichael/AnyKernel3 --depth=1
rm -rf ./AnyKernel3/.git
IMAGE_PATH=$(find "$WORKSPACE/kernel_workspace/kernel_platform/common/out/" -name "Image" | head -n 1)
if [ -z "$IMAGE_PATH" ]; then echo "❌ 严重错误:编译完成后未找到 Kernel Image!" && exit 1; fi
echo "✅ 已找到 Kernel Image: $IMAGE_PATH"
cp "$IMAGE_PATH" ./AnyKernel3/Image
if [ "$lz4kd" = "On" ]; then
ARTIFACT_NAME="${FEIL}_KernelSU_lz4kd_${KSUVER}"
elif [ "$KERNEL_VERSION" = "6.1" ]; then
ARTIFACT_NAME="${FEIL}_KernelSU_lz4_zstd_${KSUVER}"
elif [ "$KERNEL_VERSION" = "6.6" ]; then
ARTIFACT_NAME="${FEIL}_KernelSU_lz4_${KSUVER}"
else
ARTIFACT_NAME="${FEIL}_KernelSU_${KSUVER}"
fi
if [ "$SUSFS" = "On" ]; then
ARTIFACT_NAME="${ARTIFACT_NAME}_SUSFS"
fi
FINAL_ZIP_NAME="${ARTIFACT_NAME}.zip"
echo "📦 正在创建最终可刷入压缩包: ${FINAL_ZIP_NAME}..."
cd AnyKernel3 && zip -q -r9 "../${FINAL_ZIP_NAME}" ./* && cd ..
echo ""
echo "================================================="
echo " 构建完成!"
echo "================================================="
echo "-> 可刷入内核压缩包路径: $WORKSPACE/${FINAL_ZIP_NAME}"
ZRAM_KO_PATH=$(find "$WORKSPACE/kernel_workspace/kernel_platform/common/out/" -name "zram.ko" | head -n 1)
if [ -n "$ZRAM_KO_PATH" ]; then
cp "$ZRAM_KO_PATH" "$WORKSPACE/"
echo "-> zram.ko 模块路径: $WORKSPACE/zram.ko"
fi
echo "================================================="
echo ""
================================================
FILE: local/Build_Next.sh
================================================
#!/bin/bash
#export all_proxy=socks5://192.168.x.x:x/
set -e
clear
echo "===================================================="
echo " KernelSU Next OnePlus Kernel Build Configuration "
echo "===================================================="
echo " 按回车键可直接使用 [方括号] 中的默认值"
echo ""
ask() {
local prompt default reply
prompt="$1"
default="$2"
read -p "$prompt [$default]: " reply
echo "${reply:-$default}"
}
CPU=$(ask "请输入 CPU 分支 (例如: sm8750, sm8650, sm8550, sm8475)" "sm8650")
FEIL=$(ask "请输入手机型号 (例如: oneplus_13_b, oneplus_12_b, oneplus_11_b)" "oneplus_12_b")
ANDROID_VERSION=$(ask "请输入内核安卓 KMI 版本 (android15, android14, android13, android12)" "android14")
KERNEL_VERSION=$(ask "请输入内核版本 (6.6, 6.1, 5.15, 5.10)" "6.1")
SUSFS=$(ask "是否启用 SUSFS? (On/Off)" "Off")
lz4kd=$(ask "是否启用 lz4kd? (6.1 关闭时使用 lz4 + zstd; 6.6 关闭时使用 lz4) (On/Off)" "Off")
bbr=$(ask "是否启用 BBR 拥塞控制算法? (On/Off)" "Off")
bbg=$(ask "是否启用 Baseband-Guard 基带防护? (On/Off)" "On")
proxy=$(ask "是否添加代理性能优化? (如为联发科 CPU 必须选择 Off) (On/Off)" "On")
UNICODE_BYPASS=$(ask "是否添加Unicode零宽绕过修复补丁(高内核版本不推荐开启, 建议使用 https://t.me/real5ec1cff/271 无痛修复) (On/Off)" "Off")
clear
echo ""
echo "================================================="
echo " 配置摘要"
echo "================================================="
echo "手机型号 : $FEIL"
echo "CPU 分支 : $CPU"
echo "安卓 KMI 版本 : $ANDROID_VERSION"
echo "内核版本 : $KERNEL_VERSION"
echo "是否启用 SUSFS : $SUSFS"
echo "是否启用 lz4kd : $lz4kd"
echo "是否启用 BBR : $bbr"
echo "是否启用 Baseband-Guard : $bbg"
echo "是否启用代理优化 : $proxy"
echo "是否启用 Unicode 绕过修复 : $UNICODE_BYPASS"
echo "================================================="
read -p "按回车键开始构建流程..."
clear
echo "📦 正在准备构建工作空间..."
WORKSPACE=$PWD/build_workspace
sudo rm -rf "$WORKSPACE"
mkdir -p "$WORKSPACE"
cd "$WORKSPACE"
echo "📦 正在安装构建依赖..."
sudo apt-get update
sudo DEBIAN_FRONTEND=noninteractive apt-get install -yq --no-install-recommends \
python3 git curl ccache libelf-dev \
build-essential flex bison libssl-dev \
libncurses-dev liblz4-tool zlib1g-dev \
libxml2-utils rsync unzip python3-pip gawk dos2unix
clear
echo "✅ 必要构建依赖安装完成"
echo "⚙️ 正在配置 ccache 缓存..."
if [ "$SUSFS" == "On" ]; then
export CCACHE_DIR="$HOME/.ccache_${FEIL}_Next_SUSFS"
else
export CCACHE_DIR="$HOME/.ccache_${FEIL}_Next_NoSUSFS"
fi
export CCACHE_COMPILERCHECK="%compiler% -dumpmachine; %compiler% -dumpversion"
export CCACHE_NOHASHDIR="true"
export CCACHE_HARDLINK="true"
export CCACHE_MAXSIZE="20G"
export PATH="/usr/lib/ccache:$PATH"
mkdir -p "$CCACHE_DIR"
echo "✅ ccache 缓存目录: $CCACHE_DIR"
ccache -M "$CCACHE_MAXSIZE"
ccache -z
echo "🔐 正在配置 Git 用户信息..."
git config --global user.name "Local Builder"
git config --global user.email "builder@localhost"
echo "✅ Git 用户信息配置完成"
if ! command -v repo &> /dev/null; then
echo "📥 未检测到 repo 工具,正在安装..."
curl -fsSL https://storage.googleapis.com/git-repo-downloads/repo > ~/repo
chmod a+x ~/repo
sudo mv ~/repo /usr/local/bin/repo
echo "✅ repo 工具安装完成"
else
echo "ℹ️ 已检测到 repo 工具,跳过安装"
fi
echo "⬇️ 正在准备内核源码目录..."
sudo rm -rf kernel_workspace
mkdir -p kernel_workspace && cd kernel_workspace
echo "🌐 正在初始化 oneplus/${CPU} 分支、机型 ${FEIL} 的 manifest..."
repo init -u https://github.com/Xiaomichael/kernel_manifest.git -b refs/heads/oneplus/${CPU} -m ${FEIL}.xml --depth=1
echo "🔄 正在同步内核源码仓库 (使用 $(nproc --all) 线程)..."
repo sync -c -j$(nproc --all) --no-tags --no-clone-bundle --force-sync
echo "✅ 内核源码同步完成"
export adv=$ANDROID_VERSION
echo "🔧 正在清理并修改版本字符串..."
rm -f kernel_platform/common/android/abi_gki_protected_exports_* || echo "common 目录下无受保护导出表,无需删除"
rm -f kernel_platform/msm-kernel/android/abi_gki_protected_exports_* || echo "msm-kernel 目录下无受保护导出表,无需删除"
sed -i 's/ -dirty//g' kernel_platform/common/scripts/setlocalversion
sed -i 's/ -dirty//g' kernel_platform/msm-kernel/scripts/setlocalversion
sed -i 's/ -dirty//g' kernel_platform/external/dtc/scripts/setlocalversion
sed -i '$i res=$(echo "$res" | sed '\''s/-dirty//g'\'')' kernel_platform/common/scripts/setlocalversion
sed -i '$i res=$(echo "$res" | sed '\''s/-dirty//g'\'')' kernel_platform/msm-kernel/scripts/setlocalversion
sed -i '$i res=$(echo "$res" | sed '\''s/-dirty//g'\'')' kernel_platform/external/dtc/scripts/setlocalversion
if [ "$KERNEL_VERSION" != "6.6" ]; then
sed -i '$s|echo "\$res"|echo "-'"$adv"'-oki-xiaoxiaow"|' kernel_platform/common/scripts/setlocalversion
sed -i '$s|echo "\$res"|echo "-'"$adv"'-oki-xiaoxiaow"|' kernel_platform/msm-kernel/scripts/setlocalversion
sed -i '$s|echo "\$res"|echo "-'"$adv"'-oki-xiaoxiaow"|' kernel_platform/external/dtc/scripts/setlocalversion
else
ESCAPED_SUFFIX=$(printf '%s\n' "-${ANDROID_VERSION}-oki-xiaoxiaow" | sed 's:[\/&]:\\&:g')
sed -i "s/-4k/${ESCAPED_SUFFIX}/g" kernel_platform/common/arch/arm64/configs/gki_defconfig
sed -i 's/\${scm_version}//' kernel_platform/common/scripts/setlocalversion
sed -i 's/\${scm_version}//' kernel_platform/msm-kernel/scripts/setlocalversion
fi
echo "✅ 内核仓库准备完毕并完成版本号清理"
if [ "$bbg" = "On" ]; then
set -e
cd kernel_platform/common
echo "🛡️ 正在配置 Baseband-Guard 基带防护..."
curl -sSL https://github.com/vc-teahouse/Baseband-guard/raw/main/setup.sh -o setup.sh
bash setup.sh
cd ../..
echo "✅ Baseband-Guard 配置完成"
fi
echo "⚡ 正在配置 KernelSU Next..."
cd kernel_platform
curl -LSs "https://raw.githubusercontent.com/pershoot/KernelSU-Next/dev-susfs/kernel/setup.sh" | bash -s dev-susfs
cd KernelSU-Next
KSU_VERSION=$(expr $(curl -sI "https://api.github.com/repos/KernelSU-Next/KernelSU-Next/commits?sha=dev&per_page=1" | grep -i "link:" | sed -n 's/.*page=\([0-9]*\)>; rel="last".*/\1/p') "+" 30000)
export KSUVER=$(expr $KSU_VERSION)
sed -i "s/DKSU_VERSION=11998/DKSU_VERSION=${KSU_VERSION}/" kernel/Makefile
echo "✅ KernelSU Next 版本信息配置完成."
cd ../..
echo "🔧 正在克隆所需补丁..."
if [ "$SUSFS" == "On" ]; then
git clone https://github.com/cctv18/susfs4oki.git -b oki-${ANDROID_VERSION}-${KERNEL_VERSION}
fi
git clone https://github.com/Xiaomichael/kernel_patches.git
git clone https://github.com/ShirkNeko/SukiSU_patch.git
cd kernel_platform
echo "📝 正在复制补丁文件..."
if [ "$SUSFS" == "On" ]; then
cp ../susfs4oki/kernel_patches/50_add_susfs_in_gki-${ANDROID_VERSION}-${KERNEL_VERSION}.patch ./common/
cp ../susfs4oki/kernel_patches/fs/* ./common/fs/
cp ../susfs4oki/kernel_patches/include/linux/* ./common/include/linux/
else
cp ../kernel_patches/sukisu/scope_min_manual_hooks_v1.9.patch ./common/
fi
cp ../kernel_patches/zram_patches/001-lz4.patch ./common/
cp ../kernel_patches/zram_patches/lz4armv8.S ./common/lib
cp ../kernel_patches/zram_patches/002-zstd.patch ./common/
if [ "$UNICODE_BYPASS" = "On" ]; then
if [ "$KERNEL_VERSION" = "6.1" ] || [ "$KERNEL_VERSION" = "6.6" ]; then
cp ../kernel_patches/common/unicode_bypass_fix_6.1+.patch ./common/unicode_bypass_fix.patch
elif [ "$KERNEL_VERSION" = "5.15" ] || [ "$KERNEL_VERSION" = "5.10" ]; then
cp ../kernel_patches/common/unicode_bypass_fix_6.1-.patch ./common/unicode_bypass_fix.patch
fi
fi
if [ "$lz4kd" = "On" ]; then
echo "🚀 正在复制 lz4kd 相关补丁..."
cp -r ../SukiSU_patch/other/zram/lz4k/include/linux/* ./common/include/linux
cp -r ../SukiSU_patch/other/zram/lz4k/lib/* ./common/lib
cp -r ../SukiSU_patch/other/zram/lz4k/crypto/* ./common/crypto
cp -r ../SukiSU_patch/other/zram/lz4k_oplus ./common/lib/
fi
echo "🔧 正在应用补丁..."
cd ./common
if [ "$UNICODE_BYPASS" = "On" ]; then
echo "📦 正在应用Unicode零宽绕过修复补丁..."
patch -p1 < unicode_bypass_fix.patch
fi
if [ "$lz4kd" = "Off" ] && [ "$KERNEL_VERSION" = "6.1" ]; then
echo "📦 正在为 6.1 应用 lz4 + zstd 补丁..."
git apply -p1 < 001-lz4.patch || true
patch -p1 < 002-zstd.patch || true
fi
if [ "$lz4kd" = "Off" ] && [ "$KERNEL_VERSION" = "6.6" ]; then
echo "📦 正在为 6.6 应用 lz4 补丁..."
git apply -p1 < 001-lz4.patch || true
fi
if [ "$lz4kd" = "On" ]; then
echo "📦 正在应用 lz4kd / lz4k_oplus 补丁..."
cp ../../SukiSU_patch/other/zram/zram_patch/${KERNEL_VERSION}/lz4kd.patch ./
patch -p1 -F 3 < lz4kd.patch || true
cp ../../SukiSU_patch/other/zram/zram_patch/${KERNEL_VERSION}/lz4k_oplus.patch ./
patch -p1 -F 3 < lz4k_oplus.patch || true
fi
if [ "$SUSFS" == "On" ]; then
patch -p1 < 50_add_susfs_in_gki-${ANDROID_VERSION}-${KERNEL_VERSION}.patch || true
cp ../../kernel_patches/69_hide_stuff.patch ./
patch -p1 -F 3 < 69_hide_stuff.patch || true
else
echo "📦 应用 MANUAL_HOOK 补丁..."
patch -p1 --fuzz=3 < scope_min_manual_hooks_v1.9.patch
fi
echo "✅ 所有补丁应用完成"
cd ../..
if [ "$KERNEL_VERSION" = "6.6" ]; then
cd kernel_platform/common
echo "⬇️ 正在拉取风驰补丁"
if [ "$FEIL" = "oneplus_ace5_ultra" ] || [ "$FEIL" = "oneplus_ace5_ultra_b" ]; then
echo "⚠️ Ace5 Ultra 需要使用 mt6991 分支的补丁"
git clone https://github.com/Numbersf/SCHED_PATCH.git -b "mt6991"
else
echo "⚙️ 使用 sm8750 分支的补丁"
git clone https://github.com/Numbersf/SCHED_PATCH.git -b "sm8750"
fi
cp ./SCHED_PATCH/fengchi_$FEIL.patch ./
if [[ -f "fengchi_$FEIL.patch" ]]; then
echo "⚙️ 开始应用风驰补丁"
dos2unix "fengchi_$FEIL.patch"
patch -p1 -F 3 < "fengchi_$FEIL.patch"
echo "✅ 完美风驰补丁应用完成"
else
echo "⚠️ 该6.6机型暂不支持风驰补丁, 正在应用OGKI转GKI补丁"
sed -i '1iobj-y += hmbird_patch.o' drivers/Makefile
wget https://github.com/Numbersf/Action-Build/raw/SukiSU-Ultra/patches/hmbird_patch.patch
echo "⚙️ 正在打OGKI转换GKI补丁"
patch -p1 -F 3 < hmbird_patch.patch
echo "✅ OGKI转换GKI_patch完成"
fi
cd ../..
fi
echo "⚙️ 正在配置内核编译选项..."
DEFCONFIG_PATH="$WORKSPACE/kernel_workspace/kernel_platform/common/arch/arm64/configs/gki_defconfig"
echo "CONFIG_KSU=y" >> "$DEFCONFIG_PATH"
if [ "$SUSFS" = "On" ]; then
echo "📦 启用 SUSFS 功能..."
cat <> "$DEFCONFIG_PATH"
CONFIG_KSU_SUSFS=y
CONFIG_KSU_SUSFS_SUS_PATH=y
CONFIG_KSU_SUSFS_SUS_MOUNT=y
CONFIG_KSU_SUSFS_SUS_KSTAT=y
CONFIG_KSU_SUSFS_SPOOF_UNAME=y
CONFIG_KSU_SUSFS_ENABLE_LOG=y
CONFIG_KSU_SUSFS_HIDE_KSU_SUSFS_SYMBOLS=y
CONFIG_KSU_SUSFS_SPOOF_CMDLINE_OR_BOOTCONFIG=y
CONFIG_KSU_SUSFS_OPEN_REDIRECT=y
CONFIG_KSU_SUSFS_SUS_MAP=y
EOT
else
echo "📦 启用 MANUAL_HOOK..."
cat <> "$DEFCONFIG_PATH"
CONFIG_KSU_SUSFS=n
CONFIG_KSU_MANUAL_HOOK=y
EOT
fi
#添加对 Mountify (backslashxx/mountify) 模块的支持
echo "CONFIG_TMPFS_XATTR=y" >> "$DEFCONFIG_PATH"
echo "CONFIG_TMPFS_POSIX_ACL=y" >> "$DEFCONFIG_PATH"
if [ "$bbg" = "On" ]; then
echo "⚡ 配置 BBG 中..."
cat <> "$DEFCONFIG_PATH"
CONFIG_BBG=y
CONFIG_LSM="landlock,lockdown,yama,loadpin,safesetid,integrity,selinux,smack,tomoyo,apparmor,bpf,baseband_guard"
EOT
fi
if [ "$bbr" = "On" ]; then
echo "🌐 启用 BBR 网络算法..."
cat <> "$DEFCONFIG_PATH"
CONFIG_TCP_CONG_ADVANCED=y
CONFIG_TCP_CONG_BBR=y
CONFIG_NET_SCH_FQ=y
CONFIG_TCP_CONG_BIC=n
CONFIG_TCP_CONG_WESTWOOD=n
CONFIG_TCP_CONG_HTCP=n
EOT
fi
if [ "$lz4kd" = "On" ]; then
echo "📦 启用 lz4kd 与 写回支持..."
cat <> "$DEFCONFIG_PATH"
CONFIG_CRYPTO_LZ4KD=y
CONFIG_CRYPTO_LZ4K_OPLUS=y
CONFIG_ZRAM_WRITEBACK=y
EOT
fi
if [ "$KERNEL_VERSION" = "6.1" ] || [ "$KERNEL_VERSION" = "6.6" ]; then
echo "CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE=y" >> "$DEFCONFIG_PATH"
fi
if [ "$proxy" = "On" ]; then
echo "📦 添加代理相关网络优化选项..."
cat <> "$DEFCONFIG_PATH"
CONFIG_BPF_STREAM_PARSER=y
CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=y
CONFIG_NETFILTER_XT_SET=y
CONFIG_IP_SET=y
CONFIG_IP_SET_MAX=65534
CONFIG_IP_SET_BITMAP_IP=y
CONFIG_IP_SET_BITMAP_IPMAC=y
CONFIG_IP_SET_BITMAP_PORT=y
CONFIG_IP_SET_HASH_IP=y
CONFIG_IP_SET_HASH_IPMARK=y
CONFIG_IP_SET_HASH_IPPORT=y
CONFIG_IP_SET_HASH_IPPORTIP=y
CONFIG_IP_SET_HASH_IPPORTNET=y
CONFIG_IP_SET_HASH_IPMAC=y
CONFIG_IP_SET_HASH_MAC=y
CONFIG_IP_SET_HASH_NETPORTNET=y
CONFIG_IP_SET_HASH_NET=y
CONFIG_IP_SET_HASH_NETNET=y
CONFIG_IP_SET_HASH_NETPORT=y
CONFIG_IP_SET_HASH_NETIFACE=y
CONFIG_IP_SET_LIST_SET=y
CONFIG_IP6_NF_NAT=y
CONFIG_IP6_NF_TARGET_MASQUERADE=y
EOT
fi
if [ "$KERNEL_VERSION" = "5.10" ] || [ "$KERNEL_VERSION" = "5.15" ]; then
echo "📦 正在为 5.10 / 5.15 系配置 LTO..."
sed -i 's/^CONFIG_LTO=n/CONFIG_LTO=y/' "$DEFCONFIG_PATH"
sed -i 's/^CONFIG_LTO_CLANG_FULL=y/CONFIG_LTO_CLANG_THIN=y/' "$DEFCONFIG_PATH"
sed -i 's/^CONFIG_LTO_CLANG_NONE=y/CONFIG_LTO_CLANG_THIN=y/' "$DEFCONFIG_PATH"
grep -q '^CONFIG_LTO_CLANG_THIN=y' "$DEFCONFIG_PATH" || echo 'CONFIG_LTO_CLANG_THIN=y' >> "$DEFCONFIG_PATH"
fi
echo "CONFIG_HEADERS_INSTALL=n" >> "$DEFCONFIG_PATH"
sed -i 's/check_defconfig//' "$WORKSPACE/kernel_workspace/kernel_platform/common/build.config.gki"
echo "✅ defconfig 配置更新完成"
cd ../..
echo "🔨 开始内核编译..."
cd "$WORKSPACE/kernel_workspace/kernel_platform/common"
MAKE_CMD_COMMON="make -j$(nproc --all) LLVM=1 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- CC=\"ccache clang\" RUSTC=../../prebuilts/rust/linux-x86/1.73.0b/bin/rustc PAHOLE=../../prebuilts/kernel-build-tools/linux-x86/bin/pahole LD=ld.lld HOSTLD=ld.lld O=out gki_defconfig all"
export KBUILD_BUILD_USER="xiaoxiaow"
export KBUILD_BUILD_HOST="xiaoxiaow_build"
if [ "$KERNEL_VERSION" = "6.1" ]; then
export KBUILD_BUILD_TIMESTAMP="Tue Mar 10 03:53:33 UTC 2026"
export KBUILD_BUILD_VERSION=1
export PATH="$WORKSPACE/kernel_workspace/kernel_platform/prebuilts/clang/host/linux-x86/clang-r487747c/bin:$PATH"
eval "$MAKE_CMD_COMMON KCFLAGS+=-O2"
elif [ "$KERNEL_VERSION" = "6.6" ]; then
export KBUILD_BUILD_VERSION=1
export PATH="$WORKSPACE/kernel_workspace/kernel_platform/prebuilts/clang/host/linux-x86/clang-r510928/bin:$PATH"
eval "$MAKE_CMD_COMMON KCFLAGS+=-O2"
elif [ "$KERNEL_VERSION" = "5.15" ]; then
export PATH="$WORKSPACE/kernel_workspace/kernel_platform/prebuilts/clang/host/linux-x86/clang-r450784e/bin:$PATH"
eval "$MAKE_CMD_COMMON"
elif [ "$KERNEL_VERSION" = "5.10" ]; then
export PATH="$WORKSPACE/kernel_workspace/kernel_platform/prebuilts-master/clang/host/linux-x86/clang-r416183b/bin:$PATH"
eval "make -j$(nproc --all) LLVM_IAS=1 LLVM=1 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- CC=\"ccache clang\" RUSTC=../../prebuilts/rust/linux-x86/1.73.0b/bin/rustc PAHOLE=../../prebuilts/kernel-build-tools/linux-x86/bin/pahole LD=ld.lld HOSTLD=ld.lld O=out gki_defconfig all"
else
echo "❌ 不支持的内核版本: $KERNEL_VERSION" && exit 1
fi
echo "📊 当前 ccache 统计信息如下:"
ccache -s
echo "✅ 内核编译完成"
cd "$WORKSPACE"
echo "📦 正在获取 AnyKernel3 并准备打包..."
git clone https://github.com/Xiaomichael/AnyKernel3 --depth=1
rm -rf ./AnyKernel3/.git
IMAGE_PATH=$(find "$WORKSPACE/kernel_workspace/kernel_platform/common/out/" -name "Image" | head -n 1)
if [ -z "$IMAGE_PATH" ]; then echo "❌ 严重错误:编译完成后未找到 Kernel Image!" && exit 1; fi
echo "✅ 已找到 Kernel Image: $IMAGE_PATH"
cp "$IMAGE_PATH" ./AnyKernel3/Image
if [ "$lz4kd" = "On" ]; then
ARTIFACT_NAME="${FEIL}_KernelSU_Next_lz4kd_${KSUVER}"
elif [ "$KERNEL_VERSION" = "6.1" ]; then
ARTIFACT_NAME="${FEIL}_KernelSU_Next_lz4_zstd_${KSUVER}"
elif [ "$KERNEL_VERSION" = "6.6" ]; then
ARTIFACT_NAME="${FEIL}_KernelSU_Next_lz4_${KSUVER}"
else
ARTIFACT_NAME="${FEIL}_KernelSU_Next_${KSUVER}"
fi
if [ "$SUSFS" = "On" ]; then
ARTIFACT_NAME="${ARTIFACT_NAME}_SUSFS"
fi
FINAL_ZIP_NAME="${ARTIFACT_NAME}.zip"
echo "📦 正在创建最终可刷入压缩包: ${FINAL_ZIP_NAME}..."
cd AnyKernel3 && zip -q -r9 "../${FINAL_ZIP_NAME}" ./* && cd ..
echo ""
echo "================================================="
echo " 构建完成!"
echo "================================================="
echo "-> 可刷入内核压缩包路径: $WORKSPACE/${FINAL_ZIP_NAME}"
ZRAM_KO_PATH=$(find "$WORKSPACE/kernel_workspace/kernel_platform/common/out/" -name "zram.ko" | head -n 1)
if [ -n "$ZRAM_KO_PATH" ]; then
cp "$ZRAM_KO_PATH" "$WORKSPACE/"
echo "-> zram.ko 模块路径: $WORKSPACE/zram.ko"
fi
echo "================================================="
echo ""
================================================
FILE: local/Build_Only.sh
================================================
#!/bin/bash
#export all_proxy=socks5://192.168.x.x:x/
set -e
clear
echo "============================================="
echo " OnePlus Kernel Build Configuration "
echo "============================================="
echo " 按回车键可直接使用 [方括号] 中的默认值"
echo ""
ask() {
local prompt default reply
prompt="$1"
default="$2"
read -p "$prompt [$default]: " reply
echo "${reply:-$default}"
}
CPU=$(ask "请输入 CPU 分支 (例如: sm8750, sm8650, sm8550, sm8475)" "sm8650")
FEIL=$(ask "请输入手机型号 (例如: oneplus_13_b, oneplus_12_b, oneplus_11_b)" "oneplus_12_b")
ANDROID_VERSION=$(ask "请输入内核安卓 KMI 版本 (android15, android14, android13, android12)" "android14")
KERNEL_VERSION=$(ask "请输入内核版本 (6.6, 6.1, 5.15, 5.10)" "6.1")
lz4kd=$(ask "是否启用 lz4kd? (6.1 关闭时使用 lz4 + zstd; 6.6 关闭时使用 lz4) (On/Off)" "Off")
bbr=$(ask "是否启用 BBR 拥塞控制算法? (On/Off)" "Off")
bbg=$(ask "是否启用 Baseband-Guard 基带防护? (On/Off)" "On")
proxy=$(ask "是否添加代理性能优化? (如为联发科 CPU 必须选择 Off) (On/Off)" "On")
UNICODE_BYPASS=$(ask "是否添加Unicode零宽绕过修复补丁(高内核版本不推荐开启, 建议使用 https://t.me/real5ec1cff/271 无痛修复) (On/Off)" "Off")
clear
echo ""
echo "================================================="
echo " 配置摘要"
echo "================================================="
echo "手机型号 : $FEIL"
echo "CPU 分支 : $CPU"
echo "安卓 KMI 版本 : $ANDROID_VERSION"
echo "内核版本 : $KERNEL_VERSION"
echo "是否启用 lz4kd : $lz4kd"
echo "是否启用 BBR : $bbr"
echo "是否启用 Baseband-Guard : $bbg"
echo "是否启用代理优化 : $proxy"
echo "是否启用 Unicode 绕过修复 : $UNICODE_BYPASS"
echo "================================================="
read -p "按回车键开始构建流程..."
clear
echo "📦 正在准备构建工作空间..."
WORKSPACE=$PWD/build_workspace
sudo rm -rf "$WORKSPACE"
mkdir -p "$WORKSPACE"
cd "$WORKSPACE"
echo "📦 正在安装构建依赖..."
sudo apt-get update
sudo DEBIAN_FRONTEND=noninteractive apt-get install -yq --no-install-recommends \
python3 git curl ccache libelf-dev \
build-essential flex bison libssl-dev \
libncurses-dev liblz4-tool zlib1g-dev \
libxml2-utils rsync unzip python3-pip gawk dos2unix
clear
echo "✅ 必要构建依赖安装完成"
echo "⚙️ 正在配置 ccache 缓存..."
export CCACHE_DIR="$HOME/.ccache_${FEIL}_Kernel"
export CCACHE_COMPILERCHECK="%compiler% -dumpmachine; %compiler% -dumpversion"
export CCACHE_NOHASHDIR="true"
export CCACHE_HARDLINK="true"
export CCACHE_MAXSIZE="20G"
export PATH="/usr/lib/ccache:$PATH"
mkdir -p "$CCACHE_DIR"
echo "✅ ccache 缓存目录: $CCACHE_DIR"
ccache -M "$CCACHE_MAXSIZE"
ccache -z
echo "🔐 正在配置 Git 用户信息..."
git config --global user.name "Local Builder"
git config --global user.email "builder@localhost"
echo "✅ Git 用户信息配置完成"
if ! command -v repo &> /dev/null; then
echo "📥 未检测到 repo 工具,正在安装..."
curl -fsSL https://storage.googleapis.com/git-repo-downloads/repo > ~/repo
chmod a+x ~/repo
sudo mv ~/repo /usr/local/bin/repo
echo "✅ repo 工具安装完成"
else
echo "ℹ️ 已检测到 repo 工具,跳过安装"
fi
echo "⬇️ 正在准备内核源码目录..."
sudo rm -rf kernel_workspace
mkdir -p kernel_workspace && cd kernel_workspace
echo "🌐 正在初始化 oneplus/${CPU} 分支、机型 ${FEIL} 的 manifest..."
repo init -u https://github.com/Xiaomichael/kernel_manifest.git -b refs/heads/oneplus/${CPU} -m ${FEIL}.xml --depth=1
echo "🔄 正在同步内核源码仓库 (使用 $(nproc --all) 线程)..."
repo sync -c -j$(nproc --all) --no-tags --no-clone-bundle --force-sync
echo "✅ 内核源码同步完成"
export adv=$ANDROID_VERSION
echo "🔧 正在清理并修改版本字符串..."
rm -f kernel_platform/common/android/abi_gki_protected_exports_* || echo "common 目录下无受保护导出表,无需删除"
rm -f kernel_platform/msm-kernel/android/abi_gki_protected_exports_* || echo "msm-kernel 目录下无受保护导出表,无需删除"
sed -i 's/ -dirty//g' kernel_platform/common/scripts/setlocalversion
sed -i 's/ -dirty//g' kernel_platform/msm-kernel/scripts/setlocalversion
sed -i 's/ -dirty//g' kernel_platform/external/dtc/scripts/setlocalversion
sed -i '$i res=$(echo "$res" | sed '\''s/-dirty//g'\'')' kernel_platform/common/scripts/setlocalversion
sed -i '$i res=$(echo "$res" | sed '\''s/-dirty//g'\'')' kernel_platform/msm-kernel/scripts/setlocalversion
sed -i '$i res=$(echo "$res" | sed '\''s/-dirty//g'\'')' kernel_platform/external/dtc/scripts/setlocalversion
if [ "$KERNEL_VERSION" != "6.6" ]; then
sed -i '$s|echo "\$res"|echo "-'"$adv"'-oki-xiaoxiaow"|' kernel_platform/common/scripts/setlocalversion
sed -i '$s|echo "\$res"|echo "-'"$adv"'-oki-xiaoxiaow"|' kernel_platform/msm-kernel/scripts/setlocalversion
sed -i '$s|echo "\$res"|echo "-'"$adv"'-oki-xiaoxiaow"|' kernel_platform/external/dtc/scripts/setlocalversion
else
ESCAPED_SUFFIX=$(printf '%s\n' "-${ANDROID_VERSION}-oki-xiaoxiaow" | sed 's:[\/&]:\\&:g')
sed -i "s/-4k/${ESCAPED_SUFFIX}/g" kernel_platform/common/arch/arm64/configs/gki_defconfig
sed -i 's/\${scm_version}//' kernel_platform/common/scripts/setlocalversion
sed -i 's/\${scm_version}//' kernel_platform/msm-kernel/scripts/setlocalversion
fi
echo "✅ 内核仓库准备完毕并完成版本号清理"
if [ "$bbg" = "On" ]; then
set -e
cd kernel_platform/common
echo "🛡️ 正在配置 Baseband-Guard 基带防护..."
curl -sSL https://github.com/vc-teahouse/Baseband-guard/raw/main/setup.sh -o setup.sh
bash setup.sh
cd ../..
echo "✅ Baseband-Guard 配置完成"
fi
echo "📝 正在复制补丁文件..."
git clone https://github.com/Xiaomichael/kernel_patches.git
git clone https://github.com/ShirkNeko/SukiSU_patch.git
cd kernel_platform
cp ../kernel_patches/zram_patches/001-lz4.patch ./common/
cp ../kernel_patches/zram_patches/lz4armv8.S ./common/lib
cp ../kernel_patches/zram_patches/002-zstd.patch ./common/
if [ "$UNICODE_BYPASS" = "On" ]; then
if [ "$KERNEL_VERSION" = "6.1" ] || [ "$KERNEL_VERSION" = "6.6" ]; then
cp ../kernel_patches/common/unicode_bypass_fix_6.1+.patch ./common/unicode_bypass_fix.patch
elif [ "$KERNEL_VERSION" = "5.15" ] || [ "$KERNEL_VERSION" = "5.10" ]; then
cp ../kernel_patches/common/unicode_bypass_fix_6.1-.patch ./common/unicode_bypass_fix.patch
fi
fi
if [ "$lz4kd" = "On" ]; then
echo "🚀 正在复制 lz4kd 相关补丁..."
cp -r ../SukiSU_patch/other/zram/lz4k/include/linux/* ./common/include/linux
cp -r ../SukiSU_patch/other/zram/lz4k/lib/* ./common/lib
cp -r ../SukiSU_patch/other/zram/lz4k/crypto/* ./common/crypto
cp -r ../SukiSU_patch/other/zram/lz4k_oplus ./common/lib/
fi
echo "🔧 正在应用补丁..."
cd ./common
if [ "$UNICODE_BYPASS" = "On" ]; then
echo "📦 正在应用Unicode零宽绕过修复补丁..."
patch -p1 < unicode_bypass_fix.patch
fi
if [ "$lz4kd" = "Off" ] && [ "$KERNEL_VERSION" = "6.1" ]; then
echo "📦 正在为 6.1 应用 lz4 + zstd 补丁..."
git apply -p1 < 001-lz4.patch || true
patch -p1 < 002-zstd.patch || true
fi
if [ "$lz4kd" = "Off" ] && [ "$KERNEL_VERSION" = "6.6" ]; then
echo "📦 正在为 6.6 应用 lz4 补丁..."
git apply -p1 < 001-lz4.patch || true
fi
if [ "$lz4kd" = "On" ]; then
echo "📦 正在应用 lz4kd / lz4k_oplus 补丁..."
cp ../../SukiSU_patch/other/zram/zram_patch/${KERNEL_VERSION}/lz4kd.patch ./
patch -p1 -F 3 < lz4kd.patch || true
cp ../../SukiSU_patch/other/zram/zram_patch/${KERNEL_VERSION}/lz4k_oplus.patch ./
patch -p1 -F 3 < lz4k_oplus.patch || true
fi
echo "✅ 所有补丁应用完成"
cd ../..
if [ "$KERNEL_VERSION" = "6.6" ]; then
cd kernel_platform/common
echo "⬇️ 正在拉取风驰补丁"
if [ "$FEIL" = "oneplus_ace5_ultra" ] || [ "$FEIL" = "oneplus_ace5_ultra_b" ]; then
echo "⚠️ Ace5 Ultra 需要使用 mt6991 分支的补丁"
git clone https://github.com/Numbersf/SCHED_PATCH.git -b "mt6991"
else
echo "⚙️ 使用 sm8750 分支的补丁"
git clone https://github.com/Numbersf/SCHED_PATCH.git -b "sm8750"
fi
cp ./SCHED_PATCH/fengchi_$FEIL.patch ./
if [[ -f "fengchi_$FEIL.patch" ]]; then
echo "⚙️ 开始应用风驰补丁"
dos2unix "fengchi_$FEIL.patch"
patch -p1 -F 3 < "fengchi_$FEIL.patch"
echo "✅ 完美风驰补丁应用完成"
else
echo "⚠️ 该6.6机型暂不支持风驰补丁, 正在应用OGKI转GKI补丁"
sed -i '1iobj-y += hmbird_patch.o' drivers/Makefile
wget https://github.com/Numbersf/Action-Build/raw/SukiSU-Ultra/patches/hmbird_patch.patch
echo "⚙️ 正在打OGKI转换GKI补丁"
patch -p1 -F 3 < hmbird_patch.patch
echo "✅ OGKI转换GKI_patch完成"
fi
cd ../..
fi
echo "⚙️ 正在配置内核编译选项..."
DEFCONFIG_PATH="$WORKSPACE/kernel_workspace/kernel_platform/common/arch/arm64/configs/gki_defconfig"
if [ "$bbg" = "On" ]; then
echo "⚡ 配置 BBG 中..."
cat <> "$DEFCONFIG_PATH"
CONFIG_BBG=y
CONFIG_LSM="landlock,lockdown,yama,loadpin,safesetid,integrity,selinux,smack,tomoyo,apparmor,bpf,baseband_guard"
EOT
fi
# 为 Mountify (backslashxx/mountify) 模块开启必要选项
echo "CONFIG_TMPFS_XATTR=y" >> "$DEFCONFIG_PATH"
echo "CONFIG_TMPFS_POSIX_ACL=y" >> "$DEFCONFIG_PATH"
if [ "$bbr" = "On" ]; then
echo "🌐 启用 BBR 网络算法..."
cat <> "$DEFCONFIG_PATH"
CONFIG_TCP_CONG_ADVANCED=y
CONFIG_TCP_CONG_BBR=y
CONFIG_NET_SCH_FQ=y
CONFIG_TCP_CONG_BIC=n
CONFIG_TCP_CONG_WESTWOOD=n
CONFIG_TCP_CONG_HTCP=n
EOT
fi
if [ "$lz4kd" = "On" ]; then
echo "📦 启用 lz4kd 与 写回支持..."
cat <> "$DEFCONFIG_PATH"
CONFIG_CRYPTO_LZ4KD=y
CONFIG_CRYPTO_LZ4K_OPLUS=y
CONFIG_ZRAM_WRITEBACK=y
EOT
fi
if [ "$KERNEL_VERSION" = "6.1" ] || [ "$KERNEL_VERSION" = "6.6" ]; then
echo "CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE=y" >> "$DEFCONFIG_PATH"
fi
if [ "$proxy" = "On" ]; then
echo "📦 添加代理相关网络优化选项..."
cat <> "$DEFCONFIG_PATH"
CONFIG_BPF_STREAM_PARSER=y
CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=y
CONFIG_NETFILTER_XT_SET=y
CONFIG_IP_SET=y
CONFIG_IP_SET_MAX=65534
CONFIG_IP_SET_BITMAP_IP=y
CONFIG_IP_SET_BITMAP_IPMAC=y
CONFIG_IP_SET_BITMAP_PORT=y
CONFIG_IP_SET_HASH_IP=y
CONFIG_IP_SET_HASH_IPMARK=y
CONFIG_IP_SET_HASH_IPPORT=y
CONFIG_IP_SET_HASH_IPPORTIP=y
CONFIG_IP_SET_HASH_IPPORTNET=y
CONFIG_IP_SET_HASH_IPMAC=y
CONFIG_IP_SET_HASH_MAC=y
CONFIG_IP_SET_HASH_NETPORTNET=y
CONFIG_IP_SET_HASH_NET=y
CONFIG_IP_SET_HASH_NETNET=y
CONFIG_IP_SET_HASH_NETPORT=y
CONFIG_IP_SET_HASH_NETIFACE=y
CONFIG_IP_SET_LIST_SET=y
CONFIG_IP6_NF_NAT=y
CONFIG_IP6_NF_TARGET_MASQUERADE=y
EOT
fi
if [ "$KERNEL_VERSION" = "5.10" ] || [ "$KERNEL_VERSION" = "5.15" ]; then
echo "📦 正在为 5.10 / 5.15 系配置 LTO..."
sed -i 's/^CONFIG_LTO=n/CONFIG_LTO=y/' "$DEFCONFIG_PATH"
sed -i 's/^CONFIG_LTO_CLANG_FULL=y/CONFIG_LTO_CLANG_THIN=y/' "$DEFCONFIG_PATH"
sed -i 's/^CONFIG_LTO_CLANG_NONE=y/CONFIG_LTO_CLANG_THIN=y/' "$DEFCONFIG_PATH"
grep -q '^CONFIG_LTO_CLANG_THIN=y' "$DEFCONFIG_PATH" || echo 'CONFIG_LTO_CLANG_THIN=y' >> "$DEFCONFIG_PATH"
fi
echo "CONFIG_HEADERS_INSTALL=n" >> "$DEFCONFIG_PATH"
sed -i 's/check_defconfig//' "$WORKSPACE/kernel_workspace/kernel_platform/common/build.config.gki"
echo "✅ defconfig 配置更新完成"
cd ../..
echo "🔨 开始内核编译..."
cd "$WORKSPACE/kernel_workspace/kernel_platform/common"
MAKE_CMD_COMMON="make -j$(nproc --all) LLVM=1 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- CC=\"ccache clang\" RUSTC=../../prebuilts/rust/linux-x86/1.73.0b/bin/rustc PAHOLE=../../prebuilts/kernel-build-tools/linux-x86/bin/pahole LD=ld.lld HOSTLD=ld.lld O=out gki_defconfig all"
export KBUILD_BUILD_USER="xiaoxiaow"
export KBUILD_BUILD_HOST="xiaoxiaow_build"
if [ "$KERNEL_VERSION" = "6.1" ]; then
export KBUILD_BUILD_TIMESTAMP="Tue Mar 10 03:53:33 UTC 2026"
export KBUILD_BUILD_VERSION=1
export PATH="$WORKSPACE/kernel_workspace/kernel_platform/prebuilts/clang/host/linux-x86/clang-r487747c/bin:$PATH"
eval "$MAKE_CMD_COMMON KCFLAGS+=-O2"
elif [ "$KERNEL_VERSION" = "6.6" ]; then
export KBUILD_BUILD_VERSION=1
export PATH="$WORKSPACE/kernel_workspace/kernel_platform/prebuilts/clang/host/linux-x86/clang-r510928/bin:$PATH"
eval "$MAKE_CMD_COMMON KCFLAGS+=-O2"
elif [ "$KERNEL_VERSION" = "5.15" ]; then
export PATH="$WORKSPACE/kernel_workspace/kernel_platform/prebuilts/clang/host/linux-x86/clang-r450784e/bin:$PATH"
eval "$MAKE_CMD_COMMON"
elif [ "$KERNEL_VERSION" = "5.10" ]; then
export PATH="$WORKSPACE/kernel_workspace/kernel_platform/prebuilts-master/clang/host/linux-x86/clang-r416183b/bin:$PATH"
eval "make -j$(nproc --all) LLVM_IAS=1 LLVM=1 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- CC=\"ccache clang\" RUSTC=../../prebuilts/rust/linux-x86/1.73.0b/bin/rustc PAHOLE=../../prebuilts/kernel-build-tools/linux-x86/bin/pahole LD=ld.lld HOSTLD=ld.lld O=out gki_defconfig all"
else
echo "❌ 不支持的内核版本: $KERNEL_VERSION" && exit 1
fi
echo "📊 当前 ccache 统计信息如下:"
ccache -s
echo "✅ 内核编译完成"
cd "$WORKSPACE"
echo "📦 正在获取 AnyKernel3 并准备打包..."
git clone https://github.com/Xiaomichael/AnyKernel3 --depth=1
rm -rf ./AnyKernel3/.git
IMAGE_PATH=$(find "$WORKSPACE/kernel_workspace/kernel_platform/common/out/" -name "Image" | head -n 1)
if [ -z "$IMAGE_PATH" ]; then echo "❌ 严重错误:编译完成后未找到 Kernel Image!" && exit 1; fi
echo "✅ 已找到 Kernel Image: $IMAGE_PATH"
cp "$IMAGE_PATH" ./AnyKernel3/Image
if [ "$lz4kd" = "On" ]; then
ARTIFACT_NAME="Anykernel3_${FEIL}_lz4kd_Kernel_Only"
elif [ "$KERNEL_VERSION" = "6.1" ]; then
ARTIFACT_NAME="Anykernel3_${FEIL}_lz4_zstd_Kernel_Only"
elif [ "$KERNEL_VERSION" = "6.6" ]; then
ARTIFACT_NAME="Anykernel3_${FEIL}_lz4_Kernel_Only"
else
ARTIFACT_NAME="Anykernel3_${FEIL}_Kernel_Only"
fi
FINAL_ZIP_NAME="${ARTIFACT_NAME}.zip"
echo "📦 正在创建最终可刷入压缩包: ${FINAL_ZIP_NAME}..."
cd AnyKernel3 && zip -q -r9 "../${FINAL_ZIP_NAME}" ./* && cd ..
echo ""
echo "================================================="
echo " 构建完成!"
echo "================================================="
echo "-> 可刷入内核压缩包路径: $WORKSPACE/${FINAL_ZIP_NAME}"
ZRAM_KO_PATH=$(find "$WORKSPACE/kernel_workspace/kernel_platform/common/out/" -name "zram.ko" | head -n 1)
if [ -n "$ZRAM_KO_PATH" ]; then
cp "$ZRAM_KO_PATH" "$WORKSPACE/"
echo "-> zram.ko 模块路径: $WORKSPACE/zram.ko"
fi
echo "================================================="
echo ""
================================================
FILE: local/Build_ReSukiSU.sh
================================================
#!/bin/bash
#export all_proxy=socks5://192.168.x.x:x/
set -e
clear
echo "==============================================="
echo " ReSukiSU OnePlus Kernel Build Configuration "
echo "==============================================="
echo " 按回车键可直接使用 [方括号] 中的默认值"
echo ""
ask() {
local prompt default reply
prompt="$1"
default="$2"
read -p "$prompt [$default]: " reply
echo "${reply:-$default}"
}
CPU=$(ask "请输入 CPU 分支 (例如: sm8750, sm8650, sm8550, sm8475)" "sm8650")
FEIL=$(ask "请输入手机型号 (例如: oneplus_13_b, oneplus_12_b, oneplus_11_b)" "oneplus_12_b")
ANDROID_VERSION=$(ask "请输入内核安卓 KMI 版本 (android15, android14, android13, android12)" "android14")
KERNEL_VERSION=$(ask "请输入内核版本 (6.6, 6.1, 5.15, 5.10)" "6.1")
SUSFS=$(ask "是否启用 SUSFS? (On/Off)" "Off")
KPM=$(ask "是否启用 KPM (Kernel Patch Manager)? (On/Off)" "Off")
lz4kd=$(ask "是否启用 lz4kd? (6.1 关闭时使用 lz4 + zstd; 6.6 关闭时使用 lz4) (On/Off)" "Off")
bbr=$(ask "是否启用 BBR 拥塞控制算法? (On/Off)" "Off")
bbg=$(ask "是否启用 Baseband-Guard 基带防护? (On/Off)" "On")
proxy=$(ask "是否添加代理性能优化? (如为联发科 CPU 必须选择 Off) (On/Off)" "On")
UNICODE_BYPASS=$(ask "是否添加Unicode零宽绕过修复补丁(高内核版本不推荐开启, 建议使用 https://t.me/real5ec1cff/271 无痛修复) (On/Off)" "Off")
clear
echo ""
echo "================================================="
echo " 配置摘要"
echo "================================================="
echo "手机型号 : $FEIL"
echo "CPU 分支 : $CPU"
echo "安卓 KMI 版本 : $ANDROID_VERSION"
echo "内核版本 : $KERNEL_VERSION"
echo "是否启用 SUSFS : $SUSFS"
echo "是否启用 KPM : $KPM"
echo "是否启用 lz4kd : $lz4kd"
echo "是否启用 BBR : $bbr"
echo "是否启用 Baseband-Guard : $bbg"
echo "是否启用代理优化 : $proxy"
echo "是否启用 Unicode 绕过修复 : $UNICODE_BYPASS"
echo "================================================="
read -p "按回车键开始构建流程..."
clear
echo "📦 正在准备构建工作空间..."
WORKSPACE=$PWD/build_workspace
sudo rm -rf "$WORKSPACE"
mkdir -p "$WORKSPACE"
cd "$WORKSPACE"
echo "📦 正在安装构建依赖..."
sudo apt-get update
sudo DEBIAN_FRONTEND=noninteractive apt-get install -yq --no-install-recommends \
python3 git curl ccache libelf-dev \
build-essential flex bison libssl-dev \
libncurses-dev liblz4-tool zlib1g-dev \
libxml2-utils rsync unzip python3-pip gawk dos2unix
clear
echo "✅ 必要构建依赖安装完成"
echo "⚙️ 正在配置 ccache 缓存..."
if [ "$SUSFS" == "On" ]; then
export CCACHE_DIR="$HOME/.ccache_${FEIL}_ReSukiSU_SUSFS"
else
export CCACHE_DIR="$HOME/.ccache_${FEIL}_ReSukiSU_NoSUSFS"
fi
export CCACHE_COMPILERCHECK="%compiler% -dumpmachine; %compiler% -dumpversion"
export CCACHE_NOHASHDIR="true"
export CCACHE_HARDLINK="true"
export CCACHE_MAXSIZE="20G"
export PATH="/usr/lib/ccache:$PATH"
mkdir -p "$CCACHE_DIR"
echo "✅ ccache 缓存目录: $CCACHE_DIR"
ccache -M "$CCACHE_MAXSIZE"
ccache -z
echo "🔐 正在配置 Git 用户信息..."
git config --global user.name "Local Builder"
git config --global user.email "builder@localhost"
echo "✅ Git 用户信息配置完成"
if ! command -v repo &> /dev/null; then
echo "📥 未检测到 repo 工具,正在安装..."
curl -fsSL https://storage.googleapis.com/git-repo-downloads/repo > ~/repo
chmod a+x ~/repo
sudo mv ~/repo /usr/local/bin/repo
echo "✅ repo 工具安装完成"
else
echo "ℹ️ 已检测到 repo 工具,跳过安装"
fi
echo "⬇️ 正在准备内核源码目录..."
sudo rm -rf kernel_workspace
mkdir -p kernel_workspace && cd kernel_workspace
echo "🌐 正在初始化 oneplus/${CPU} 分支、机型 ${FEIL} 的 manifest..."
repo init -u https://github.com/Xiaomichael/kernel_manifest.git -b refs/heads/oneplus/${CPU} -m ${FEIL}.xml --depth=1
echo "🔄 正在同步内核源码仓库 (使用 $(nproc --all) 线程)..."
repo sync -c -j$(nproc --all) --no-tags --no-clone-bundle --force-sync
echo "✅ 内核源码同步完成"
export adv=$ANDROID_VERSION
echo "🔧 正在清理并修改版本字符串..."
rm -f kernel_platform/common/android/abi_gki_protected_exports_* || echo "common 目录下无受保护导出表,无需删除"
rm -f kernel_platform/msm-kernel/android/abi_gki_protected_exports_* || echo "msm-kernel 目录下无受保护导出表,无需删除"
sed -i 's/ -dirty//g' kernel_platform/common/scripts/setlocalversion
sed -i 's/ -dirty//g' kernel_platform/msm-kernel/scripts/setlocalversion
sed -i 's/ -dirty//g' kernel_platform/external/dtc/scripts/setlocalversion
sed -i '$i res=$(echo "$res" | sed '\''s/-dirty//g'\'')' kernel_platform/common/scripts/setlocalversion
sed -i '$i res=$(echo "$res" | sed '\''s/-dirty//g'\'')' kernel_platform/msm-kernel/scripts/setlocalversion
sed -i '$i res=$(echo "$res" | sed '\''s/-dirty//g'\'')' kernel_platform/external/dtc/scripts/setlocalversion
if [ "$KERNEL_VERSION" != "6.6" ]; then
sed -i '$s|echo "\$res"|echo "-'"$adv"'-oki-xiaoxiaow"|' kernel_platform/common/scripts/setlocalversion
sed -i '$s|echo "\$res"|echo "-'"$adv"'-oki-xiaoxiaow"|' kernel_platform/msm-kernel/scripts/setlocalversion
sed -i '$s|echo "\$res"|echo "-'"$adv"'-oki-xiaoxiaow"|' kernel_platform/external/dtc/scripts/setlocalversion
else
ESCAPED_SUFFIX=$(printf '%s\n' "-${ANDROID_VERSION}-oki-xiaoxiaow" | sed 's:[\/&]:\\&:g')
sed -i "s/-4k/${ESCAPED_SUFFIX}/g" kernel_platform/common/arch/arm64/configs/gki_defconfig
sed -i 's/\${scm_version}//' kernel_platform/common/scripts/setlocalversion
sed -i 's/\${scm_version}//' kernel_platform/msm-kernel/scripts/setlocalversion
fi
echo "✅ 内核仓库准备完毕并完成版本号清理"
if [ "$bbg" = "On" ] && [ "$KPM" = "Off" ]; then
set -e
cd kernel_platform/common
echo "🛡️ 正在配置 Baseband-Guard 基带防护..."
curl -sSL https://github.com/vc-teahouse/Baseband-guard/raw/main/setup.sh -o setup.sh
bash setup.sh
cd ../..
echo "✅ Baseband-Guard 配置完成"
fi
echo "⚡ 正在配置 ReSukiSU..."
cd kernel_platform
curl -LSs "https://raw.githubusercontent.com/ReSukiSU/ReSukiSU/main/kernel/setup.sh" | bash -s main
cd KernelSU
KSU_VERSION_COUNT=$(git rev-list --count main)
export KSUVER=$(expr $KSU_VERSION_COUNT + 30700)
echo "✅ ReSukiSU 配置完成"
cd ../..
echo "🔧 正在克隆所需补丁..."
if [ "$SUSFS" = "On" ]; then
git clone https://github.com/cctv18/susfs4oki.git -b oki-${ANDROID_VERSION}-${KERNEL_VERSION}
fi
git clone https://github.com/Xiaomichael/kernel_patches.git
git clone https://github.com/ShirkNeko/SukiSU_patch.git
cd kernel_platform
echo "📝 正在复制补丁文件..."
if [ "$SUSFS" = "On" ]; then
cp ../susfs4oki/kernel_patches/50_add_susfs_in_gki-${ANDROID_VERSION}-${KERNEL_VERSION}.patch ./common/
cp ../susfs4oki/kernel_patches/fs/* ./common/fs/
cp ../susfs4oki/kernel_patches/include/linux/* ./common/include/linux/
else
cp ../kernel_patches/sukisu/scope_min_manual_hooks_v1.9.patch ./common/
fi
cp ../kernel_patches/zram_patches/001-lz4.patch ./common/
cp ../kernel_patches/zram_patches/lz4armv8.S ./common/lib
cp ../kernel_patches/zram_patches/002-zstd.patch ./common/
if [ "$UNICODE_BYPASS" = "On" ]; then
if [ "$KERNEL_VERSION" = "6.1" ] || [ "$KERNEL_VERSION" = "6.6" ]; then
cp ../kernel_patches/common/unicode_bypass_fix_6.1+.patch ./common/unicode_bypass_fix.patch
elif [ "$KERNEL_VERSION" = "5.15" ] || [ "$KERNEL_VERSION" = "5.10" ]; then
cp ../kernel_patches/common/unicode_bypass_fix_6.1-.patch ./common/unicode_bypass_fix.patch
fi
fi
if [ "$lz4kd" = "On" ]; then
echo "🚀 正在复制 lz4kd 相关补丁..."
cp -r ../SukiSU_patch/other/zram/lz4k/include/linux/* ./common/include/linux
cp -r ../SukiSU_patch/other/zram/lz4k/lib/* ./common/lib
cp -r ../SukiSU_patch/other/zram/lz4k/crypto/* ./common/crypto
cp -r ../SukiSU_patch/other/zram/lz4k_oplus ./common/lib/
fi
echo "🔧 正在应用补丁..."
cd ./common
if [ "$UNICODE_BYPASS" = "On" ]; then
echo "📦 正在应用Unicode零宽绕过修复补丁..."
patch -p1 < unicode_bypass_fix.patch
fi
if [ "$SUSFS" = "On" ]; then
patch -p1 < 50_add_susfs_in_gki-${ANDROID_VERSION}-${KERNEL_VERSION}.patch || true
else
echo "📦 应用 MANUAL_HOOK 补丁..."
patch -p1 -F 3 < scope_min_manual_hooks_v1.9.patch
fi
if [ "$lz4kd" = "Off" ] && [ "$KERNEL_VERSION" = "6.1" ]; then
echo "📦 正在为 6.1 应用 lz4 + zstd 补丁..."
git apply -p1 < 001-lz4.patch || true
patch -p1 < 002-zstd.patch || true
fi
if [ "$lz4kd" = "Off" ] && [ "$KERNEL_VERSION" = "6.6" ]; then
echo "📦 正在为 6.6 应用 lz4 补丁..."
git apply -p1 < 001-lz4.patch || true
fi
if [ "$lz4kd" = "On" ]; then
echo "📦 正在应用 lz4kd / lz4k_oplus 补丁..."
cp ../../SukiSU_patch/other/zram/zram_patch/${KERNEL_VERSION}/lz4kd.patch ./
patch -p1 -F 3 < lz4kd.patch || true
cp ../../SukiSU_patch/other/zram/zram_patch/${KERNEL_VERSION}/lz4k_oplus.patch ./
patch -p1 -F 3 < lz4k_oplus.patch || true
fi
echo "✅ 所有补丁应用完成"
cd ../..
if [ "$KERNEL_VERSION" = "6.6" ]; then
cd kernel_platform/common
echo "⬇️ 正在拉取风驰补丁"
if [ "$FEIL" = "oneplus_ace5_ultra" ] || [ "$FEIL" = "oneplus_ace5_ultra_b" ]; then
echo "⚠️ Ace5 Ultra 需要使用 mt6991 分支的补丁"
git clone https://github.com/Numbersf/SCHED_PATCH.git -b "mt6991"
else
echo "⚙️ 使用 sm8750 分支的补丁"
git clone https://github.com/Numbersf/SCHED_PATCH.git -b "sm8750"
fi
cp ./SCHED_PATCH/fengchi_$FEIL.patch ./
if [[ -f "fengchi_$FEIL.patch" ]]; then
echo "⚙️ 开始应用风驰补丁"
dos2unix "fengchi_$FEIL.patch"
patch -p1 -F 3 < "fengchi_$FEIL.patch"
echo "✅ 完美风驰补丁应用完成"
else
echo "⚠️ 该6.6机型暂不支持风驰补丁, 正在应用OGKI转GKI补丁"
sed -i '1iobj-y += hmbird_patch.o' drivers/Makefile
wget https://github.com/Numbersf/Action-Build/raw/SukiSU-Ultra/patches/hmbird_patch.patch
echo "⚙️ 正在打OGKI转换GKI补丁"
patch -p1 -F 3 < hmbird_patch.patch
echo "✅ OGKI转换GKI_patch完成"
fi
cd ../..
fi
echo "⚙️ 正在配置内核编译选项..."
DEFCONFIG_PATH="$WORKSPACE/kernel_workspace/kernel_platform/common/arch/arm64/configs/gki_defconfig"
echo "CONFIG_KSU=y" >> "$DEFCONFIG_PATH"
echo "CONFIG_KSU_FULL_NAME_FORMAT=\"%TAG_NAME%-%COMMIT_SHA%-xiaoxiaow@ReSukiSU\"" >> "$DEFCONFIG_PATH"
echo "CONFIG_KSU_MULTI_MANAGER_SUPPORT=y" >> "$DEFCONFIG_PATH"
if [ "$SUSFS" = "On" ]; then
echo "📦 启用 SUSFS 功能..."
cat <> "$DEFCONFIG_PATH"
CONFIG_KSU_SUSFS=y
CONFIG_KSU_SUSFS_SUS_PATH=y
CONFIG_KSU_SUSFS_SUS_MOUNT=y
CONFIG_KSU_SUSFS_SUS_KSTAT=y
CONFIG_KSU_SUSFS_SPOOF_UNAME=y
CONFIG_KSU_SUSFS_ENABLE_LOG=y
CONFIG_KSU_SUSFS_HIDE_KSU_SUSFS_SYMBOLS=y
CONFIG_KSU_SUSFS_SPOOF_CMDLINE_OR_BOOTCONFIG=y
CONFIG_KSU_SUSFS_OPEN_REDIRECT=y
CONFIG_KSU_SUSFS_SUS_MAP=y
EOT
else
echo "📦 启用 MANUAL_HOOK..."
cat <> "$DEFCONFIG_PATH"
CONFIG_KSU_SUSFS=n
CONFIG_KSU_MANUAL_HOOK=y
EOT
fi
#添加对 Mountify (backslashxx/mountify) 模块的支持
echo "CONFIG_TMPFS_XATTR=y" >> "$DEFCONFIG_PATH"
echo "CONFIG_TMPFS_POSIX_ACL=y" >> "$DEFCONFIG_PATH"
if [ "$KPM" = "On" ]; then echo "CONFIG_KPM=y" >> "$DEFCONFIG_PATH"; fi
if [ "$bbg" = "On" ] && [ "$KPM" = "Off" ]; then
echo "⚡ 配置 BBG 中..."
cat <> "$DEFCONFIG_PATH"
CONFIG_BBG=y
CONFIG_LSM="landlock,lockdown,yama,loadpin,safesetid,integrity,selinux,smack,tomoyo,apparmor,bpf,baseband_guard"
EOT
fi
if [ "$bbr" = "On" ]; then
echo "🌐 启用 BBR 网络算法..."
cat <> "$DEFCONFIG_PATH"
CONFIG_TCP_CONG_ADVANCED=y
CONFIG_TCP_CONG_BBR=y
CONFIG_NET_SCH_FQ=y
CONFIG_TCP_CONG_BIC=n
CONFIG_TCP_CONG_WESTWOOD=n
CONFIG_TCP_CONG_HTCP=n
EOT
fi
if [ "$lz4kd" = "On" ]; then
echo "📦 启用 lz4kd 与 写回支持..."
cat <> "$DEFCONFIG_PATH"
CONFIG_CRYPTO_LZ4KD=y
CONFIG_CRYPTO_LZ4K_OPLUS=y
CONFIG_ZRAM_WRITEBACK=y
EOT
fi
if [ "$KERNEL_VERSION" = "6.1" ] || [ "$KERNEL_VERSION" = "6.6" ]; then
echo "CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE=y" >> "$DEFCONFIG_PATH"
fi
if [ "$proxy" = "On" ]; then
echo "📦 添加代理相关网络优化选项..."
cat <> "$DEFCONFIG_PATH"
CONFIG_BPF_STREAM_PARSER=y
CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=y
CONFIG_NETFILTER_XT_SET=y
CONFIG_IP_SET=y
CONFIG_IP_SET_MAX=65534
CONFIG_IP_SET_BITMAP_IP=y
CONFIG_IP_SET_BITMAP_IPMAC=y
CONFIG_IP_SET_BITMAP_PORT=y
CONFIG_IP_SET_HASH_IP=y
CONFIG_IP_SET_HASH_IPMARK=y
CONFIG_IP_SET_HASH_IPPORT=y
CONFIG_IP_SET_HASH_IPPORTIP=y
CONFIG_IP_SET_HASH_IPPORTNET=y
CONFIG_IP_SET_HASH_IPMAC=y
CONFIG_IP_SET_HASH_MAC=y
CONFIG_IP_SET_HASH_NETPORTNET=y
CONFIG_IP_SET_HASH_NET=y
CONFIG_IP_SET_HASH_NETNET=y
CONFIG_IP_SET_HASH_NETPORT=y
CONFIG_IP_SET_HASH_NETIFACE=y
CONFIG_IP_SET_LIST_SET=y
CONFIG_IP6_NF_NAT=y
CONFIG_IP6_NF_TARGET_MASQUERADE=y
EOT
fi
if [ "$KERNEL_VERSION" = "5.10" ] || [ "$KERNEL_VERSION" = "5.15" ]; then
echo "📦 正在为 5.10 / 5.15 系配置 LTO..."
sed -i 's/^CONFIG_LTO=n/CONFIG_LTO=y/' "$DEFCONFIG_PATH"
sed -i 's/^CONFIG_LTO_CLANG_FULL=y/CONFIG_LTO_CLANG_THIN=y/' "$DEFCONFIG_PATH"
sed -i 's/^CONFIG_LTO_CLANG_NONE=y/CONFIG_LTO_CLANG_THIN=y/' "$DEFCONFIG_PATH"
grep -q '^CONFIG_LTO_CLANG_THIN=y' "$DEFCONFIG_PATH" || echo 'CONFIG_LTO_CLANG_THIN=y' >> "$DEFCONFIG_PATH"
fi
echo "CONFIG_HEADERS_INSTALL=n" >> "$DEFCONFIG_PATH"
sed -i 's/check_defconfig//' "$WORKSPACE/kernel_workspace/kernel_platform/common/build.config.gki"
echo "✅ defconfig 配置更新完成"
cd ../..
echo "🔨 开始内核编译..."
cd "$WORKSPACE/kernel_workspace/kernel_platform/common"
MAKE_CMD_COMMON="make -j$(nproc --all) LLVM=1 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- CC=\"ccache clang\" RUSTC=../../prebuilts/rust/linux-x86/1.73.0b/bin/rustc PAHOLE=../../prebuilts/kernel-build-tools/linux-x86/bin/pahole LD=ld.lld HOSTLD=ld.lld O=out gki_defconfig all"
export KBUILD_BUILD_USER="xiaoxiaow"
export KBUILD_BUILD_HOST="xiaoxiaow_build"
if [ "$KERNEL_VERSION" = "6.1" ]; then
export KBUILD_BUILD_TIMESTAMP="Tue Mar 10 03:53:33 UTC 2026"
export KBUILD_BUILD_VERSION=1
export PATH="$WORKSPACE/kernel_workspace/kernel_platform/prebuilts/clang/host/linux-x86/clang-r487747c/bin:$PATH"
eval "$MAKE_CMD_COMMON KCFLAGS+=-O2"
elif [ "$KERNEL_VERSION" = "6.6" ]; then
export KBUILD_BUILD_VERSION=1
export PATH="$WORKSPACE/kernel_workspace/kernel_platform/prebuilts/clang/host/linux-x86/clang-r510928/bin:$PATH"
eval "$MAKE_CMD_COMMON KCFLAGS+=-O2"
elif [ "$KERNEL_VERSION" = "5.15" ]; then
export PATH="$WORKSPACE/kernel_workspace/kernel_platform/prebuilts/clang/host/linux-x86/clang-r450784e/bin:$PATH"
eval "$MAKE_CMD_COMMON"
elif [ "$KERNEL_VERSION" = "5.10" ]; then
export PATH="$WORKSPACE/kernel_workspace/kernel_platform/prebuilts-master/clang/host/linux-x86/clang-r416183b/bin:$PATH"
eval "make -j$(nproc --all) LLVM_IAS=1 LLVM=1 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- CC=\"ccache clang\" RUSTC=../../prebuilts/rust/linux-x86/1.73.0b/bin/rustc PAHOLE=../../prebuilts/kernel-build-tools/linux-x86/bin/pahole LD=ld.lld HOSTLD=ld.lld O=out gki_defconfig all"
else
echo "❌ 不支持的内核版本: $KERNEL_VERSION" && exit 1
fi
echo "📊 当前 ccache 统计信息如下:"
ccache -s
echo "✅ 内核编译完成"
cd "$WORKSPACE"
echo "📦 正在获取 AnyKernel3 并准备打包..."
git clone https://github.com/Xiaomichael/AnyKernel3 --depth=1
rm -rf ./AnyKernel3/.git
IMAGE_PATH=$(find "$WORKSPACE/kernel_workspace/kernel_platform/common/out/" -name "Image" | head -n 1)
if [ -z "$IMAGE_PATH" ]; then echo "❌ 严重错误:编译完成后未找到 Kernel Image!" && exit 1; fi
echo "✅ 已找到 Kernel Image: $IMAGE_PATH"
cp "$IMAGE_PATH" ./AnyKernel3/Image
if [ "$KPM" = 'On' ]; then
echo "🧩 正在对内核 Image 应用 KPM 补丁..."
mkdir -p kpm_patch_temp && cd kpm_patch_temp
curl -LO https://github.com/SukiSU-Ultra/SukiSU_KernelPatch_patch/releases/download/0.13.0/patch_linux
chmod +x patch_linux
cp "$WORKSPACE/AnyKernel3/Image" ./Image
./patch_linux
mv oImage "$WORKSPACE/AnyKernel3/Image"
cd .. && rm -rf kpm_patch_temp
echo "✅ KPM 补丁应用完成"
fi
if [ "$lz4kd" = "On" ]; then
ARTIFACT_NAME="${FEIL}_ReSukiSU_lz4kd_${KSUVER}"
elif [ "$KERNEL_VERSION" = "6.1" ]; then
ARTIFACT_NAME="${FEIL}_ReSukiSU_lz4_zstd_${KSUVER}"
elif [ "$KERNEL_VERSION" = "6.6" ]; then
ARTIFACT_NAME="${FEIL}_ReSukiSU_lz4_${KSUVER}"
else
ARTIFACT_NAME="${FEIL}_ReSukiSU_${KSUVER}"
fi
if [ "$SUSFS" = "On" ]; then
ARTIFACT_NAME="${ARTIFACT_NAME}_SUSFS"
fi
FINAL_ZIP_NAME="${ARTIFACT_NAME}.zip"
echo "📦 正在创建最终可刷入压缩包: ${FINAL_ZIP_NAME}..."
cd AnyKernel3 && zip -q -r9 "../${FINAL_ZIP_NAME}" ./* && cd ..
echo ""
echo "================================================="
echo " 构建完成!"
echo "================================================="
echo "-> 可刷入内核压缩包路径: $WORKSPACE/${FINAL_ZIP_NAME}"
ZRAM_KO_PATH=$(find "$WORKSPACE/kernel_workspace/kernel_platform/common/out/" -name "zram.ko" | head -n 1)
if [ -n "$ZRAM_KO_PATH" ]; then
cp "$ZRAM_KO_PATH" "$WORKSPACE/"
echo "-> zram.ko 模块路径: $WORKSPACE/zram.ko"
fi
echo "================================================="
echo ""
================================================
FILE: local/Build_SukiSU.sh
================================================
#!/bin/bash
#export all_proxy=socks5://192.168.x.x:x/
set -e
clear
echo "==================================================="
echo " SukiSU Ultra OnePlus Kernel Build Configuration "
echo "==================================================="
echo " 按回车键可直接使用 [方括号] 中的默认值"
echo ""
ask() {
local prompt default reply
prompt="$1"
default="$2"
read -p "$prompt [$default]: " reply
echo "${reply:-$default}"
}
CPU=$(ask "请输入 CPU 分支 (例如: sm8750, sm8650, sm8550, sm8475)" "sm8650")
FEIL=$(ask "请输入手机型号 (例如: oneplus_13_b, oneplus_12_b, oneplus_11_b)" "oneplus_12_b")
ANDROID_VERSION=$(ask "请输入内核安卓 KMI 版本 (android15, android14, android13, android12)" "android14")
KERNEL_VERSION=$(ask "请输入内核版本 (6.6, 6.1, 5.15, 5.10)" "6.1")
SUSFS=$(ask "是否启用 SUSFS? (On/Off)" "Off")
KPM=$(ask "是否启用 KPM (Kernel Patch Manager)? (On/Off)" "Off")
lz4kd=$(ask "是否启用 lz4kd? (6.1 关闭时使用 lz4 + zstd; 6.6 关闭时使用 lz4) (On/Off)" "Off")
bbr=$(ask "是否启用 BBR 拥塞控制算法? (On/Off)" "Off")
bbg=$(ask "是否启用 Baseband-Guard 基带防护? (On/Off)" "On")
proxy=$(ask "是否添加代理性能优化? (如为联发科 CPU 必须选择 Off) (On/Off)" "On")
UNICODE_BYPASS=$(ask "是否添加Unicode零宽绕过修复补丁(高内核版本不推荐开启, 建议使用 https://t.me/real5ec1cff/271 无痛修复) (On/Off)" "Off")
clear
echo ""
echo "================================================="
echo " 配置摘要"
echo "================================================="
echo "手机型号 : $FEIL"
echo "CPU 分支 : $CPU"
echo "安卓 KMI 版本 : $ANDROID_VERSION"
echo "内核版本 : $KERNEL_VERSION"
echo "是否启用 SUSFS : $SUSFS"
echo "是否启用 KPM : $KPM"
echo "是否启用 lz4kd : $lz4kd"
echo "是否启用 BBR : $bbr"
echo "是否启用 Baseband-Guard : $bbg"
echo "是否启用代理优化 : $proxy"
echo "是否启用 Unicode 绕过修复 : $UNICODE_BYPASS"
echo "================================================="
read -p "按回车键开始构建流程..."
clear
echo "📦 正在准备构建工作空间..."
WORKSPACE=$PWD/build_workspace
sudo rm -rf "$WORKSPACE"
mkdir -p "$WORKSPACE"
cd "$WORKSPACE"
echo "📦 正在安装构建依赖..."
sudo apt-get update
sudo DEBIAN_FRONTEND=noninteractive apt-get install -yq --no-install-recommends \
python3 git curl ccache libelf-dev \
build-essential flex bison libssl-dev \
libncurses-dev liblz4-tool zlib1g-dev \
libxml2-utils rsync unzip python3-pip gawk dos2unix
clear
echo "✅ 必要构建依赖安装完成"
echo "⚙️ 正在配置 ccache 缓存..."
if [ "$SUSFS" == "On" ]; then
export CCACHE_DIR="$HOME/.ccache_${FEIL}_SukiSU_SUSFS"
else
export CCACHE_DIR="$HOME/.ccache_${FEIL}_SukiSU_NoSUSFS"
fi
export CCACHE_COMPILERCHECK="%compiler% -dumpmachine; %compiler% -dumpversion"
export CCACHE_NOHASHDIR="true"
export CCACHE_HARDLINK="true"
export CCACHE_MAXSIZE="20G"
export PATH="/usr/lib/ccache:$PATH"
mkdir -p "$CCACHE_DIR"
echo "✅ ccache 缓存目录: $CCACHE_DIR"
ccache -M "$CCACHE_MAXSIZE"
ccache -z
echo "🔐 正在配置 Git 用户信息..."
git config --global user.name "Local Builder"
git config --global user.email "builder@localhost"
echo "✅ Git 用户信息配置完成"
if ! command -v repo &> /dev/null; then
echo "📥 未检测到 repo 工具,正在安装..."
curl -fsSL https://storage.googleapis.com/git-repo-downloads/repo > ~/repo
chmod a+x ~/repo
sudo mv ~/repo /usr/local/bin/repo
echo "✅ repo 工具安装完成"
else
echo "ℹ️ 已检测到 repo 工具,跳过安装"
fi
echo "⬇️ 正在准备内核源码目录..."
sudo rm -rf kernel_workspace
mkdir -p kernel_workspace && cd kernel_workspace
echo "🌐 正在初始化 oneplus/${CPU} 分支、机型 ${FEIL} 的 manifest..."
repo init -u https://github.com/Xiaomichael/kernel_manifest.git -b refs/heads/oneplus/${CPU} -m ${FEIL}.xml --depth=1
echo "🔄 正在同步内核源码仓库 (使用 $(nproc --all) 线程)..."
repo sync -c -j$(nproc --all) --no-tags --no-clone-bundle --force-sync
echo "✅ 内核源码同步完成"
export adv=$ANDROID_VERSION
echo "🔧 正在清理并修改版本字符串..."
rm -f kernel_platform/common/android/abi_gki_protected_exports_* || echo "common 目录下无受保护导出表,无需删除"
rm -f kernel_platform/msm-kernel/android/abi_gki_protected_exports_* || echo "msm-kernel 目录下无受保护导出表,无需删除"
sed -i 's/ -dirty//g' kernel_platform/common/scripts/setlocalversion
sed -i 's/ -dirty//g' kernel_platform/msm-kernel/scripts/setlocalversion
sed -i 's/ -dirty//g' kernel_platform/external/dtc/scripts/setlocalversion
sed -i '$i res=$(echo "$res" | sed '\''s/-dirty//g'\'')' kernel_platform/common/scripts/setlocalversion
sed -i '$i res=$(echo "$res" | sed '\''s/-dirty//g'\'')' kernel_platform/msm-kernel/scripts/setlocalversion
sed -i '$i res=$(echo "$res" | sed '\''s/-dirty//g'\'')' kernel_platform/external/dtc/scripts/setlocalversion
if [ "$KERNEL_VERSION" != "6.6" ]; then
sed -i '$s|echo "\$res"|echo "-'"$adv"'-oki-xiaoxiaow"|' kernel_platform/common/scripts/setlocalversion
sed -i '$s|echo "\$res"|echo "-'"$adv"'-oki-xiaoxiaow"|' kernel_platform/msm-kernel/scripts/setlocalversion
sed -i '$s|echo "\$res"|echo "-'"$adv"'-oki-xiaoxiaow"|' kernel_platform/external/dtc/scripts/setlocalversion
else
ESCAPED_SUFFIX=$(printf '%s\n' "-${ANDROID_VERSION}-oki-xiaoxiaow" | sed 's:[\/&]:\\&:g')
sed -i "s/-4k/${ESCAPED_SUFFIX}/g" kernel_platform/common/arch/arm64/configs/gki_defconfig
sed -i 's/\${scm_version}//' kernel_platform/common/scripts/setlocalversion
sed -i 's/\${scm_version}//' kernel_platform/msm-kernel/scripts/setlocalversion
fi
echo "✅ 内核仓库准备完毕并完成版本号清理"
if [ "$bbg" = "On" ] && [ "$KPM" = "Off" ]; then
set -e
cd kernel_platform/common
echo "🛡️ 正在配置 Baseband-Guard 基带防护..."
curl -sSL https://github.com/vc-teahouse/Baseband-guard/raw/main/setup.sh -o setup.sh
bash setup.sh
cd ../..
echo "✅ Baseband-Guard 配置完成"
fi
echo "⚡ 正在配置 SukiSU Ultra..."
cd kernel_platform
curl -LSs "https://raw.githubusercontent.com/SukiSU-Ultra/SukiSU-Ultra/builtin/kernel/setup.sh" | bash -s builtin
cd KernelSU
KSU_VERSION_COUNT=$(git rev-list --count main)
export KSUVER=$(expr $KSU_VERSION_COUNT + 37185)
KSU_API_VERSION=4.1.2
KSU_COMMIT_HASH=$(git ls-remote https://github.com/SukiSU-Ultra/SukiSU-Ultra.git refs/heads/builtin | cut -f1 | cut -c1-8)
KSU_VERSION_FULL="v${KSU_API_VERSION}-${KSU_COMMIT_HASH}-xiaoxiaow@SukiSU"
sed -i '/define get_ksu_version_full/,/endef/d' kernel/Makefile
sed -i '/KSU_VERSION_API :=/d' kernel/Makefile
sed -i '/KSU_VERSION_FULL :=/d' kernel/Makefile
TMP_FILE=$(mktemp)
while IFS= read -r line; do
echo "$line" >> "$TMP_FILE"
if echo "$line" | grep -q 'REPO_OWNER :='; then
cat >> "$TMP_FILE" <> "$DEFCONFIG_PATH"
if [ "$SUSFS" = "On" ]; then
echo "📦 启用 SUSFS 功能..."
cat <> "$DEFCONFIG_PATH"
CONFIG_KSU_SUSFS=y
CONFIG_KSU_SUSFS_SUS_PATH=y
CONFIG_KSU_SUSFS_SUS_MOUNT=y
CONFIG_KSU_SUSFS_SUS_KSTAT=y
CONFIG_KSU_SUSFS_SPOOF_UNAME=y
CONFIG_KSU_SUSFS_ENABLE_LOG=y
CONFIG_KSU_SUSFS_HIDE_KSU_SUSFS_SYMBOLS=y
CONFIG_KSU_SUSFS_SPOOF_CMDLINE_OR_BOOTCONFIG=y
CONFIG_KSU_SUSFS_OPEN_REDIRECT=y
CONFIG_KSU_SUSFS_SUS_MAP=y
EOT
else
echo "📦 启用 MANUAL_HOOK..."
cat <> "$DEFCONFIG_PATH"
CONFIG_KSU_SUSFS=n
CONFIG_KSU_MANUAL_HOOK=y
EOT
fi
#添加对 Mountify (backslashxx/mountify) 模块的支持
echo "CONFIG_TMPFS_XATTR=y" >> "$DEFCONFIG_PATH"
echo "CONFIG_TMPFS_POSIX_ACL=y" >> "$DEFCONFIG_PATH"
if [ "$KPM" = "On" ]; then echo "CONFIG_KPM=y" >> "$DEFCONFIG_PATH"; fi
if [ "$bbg" = "On" ] && [ "$KPM" = "Off" ]; then
echo "⚡ 配置 BBG 中..."
cat <> "$DEFCONFIG_PATH"
CONFIG_BBG=y
CONFIG_LSM="landlock,lockdown,yama,loadpin,safesetid,integrity,selinux,smack,tomoyo,apparmor,bpf,baseband_guard"
EOT
fi
if [ "$bbr" = "On" ]; then
echo "🌐 启用 BBR 网络算法..."
cat <> "$DEFCONFIG_PATH"
CONFIG_TCP_CONG_ADVANCED=y
CONFIG_TCP_CONG_BBR=y
CONFIG_NET_SCH_FQ=y
CONFIG_TCP_CONG_BIC=n
CONFIG_TCP_CONG_WESTWOOD=n
CONFIG_TCP_CONG_HTCP=n
EOT
fi
if [ "$lz4kd" = "On" ]; then
echo "📦 启用 lz4kd 与 写回支持..."
cat <> "$DEFCONFIG_PATH"
CONFIG_CRYPTO_LZ4KD=y
CONFIG_CRYPTO_LZ4K_OPLUS=y
CONFIG_ZRAM_WRITEBACK=y
EOT
fi
if [ "$KERNEL_VERSION" = "6.1" ] || [ "$KERNEL_VERSION" = "6.6" ]; then
echo "CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE=y" >> "$DEFCONFIG_PATH"
fi
if [ "$proxy" = "On" ]; then
echo "📦 添加代理相关网络优化选项..."
cat <> "$DEFCONFIG_PATH"
CONFIG_BPF_STREAM_PARSER=y
CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=y
CONFIG_NETFILTER_XT_SET=y
CONFIG_IP_SET=y
CONFIG_IP_SET_MAX=65534
CONFIG_IP_SET_BITMAP_IP=y
CONFIG_IP_SET_BITMAP_IPMAC=y
CONFIG_IP_SET_BITMAP_PORT=y
CONFIG_IP_SET_HASH_IP=y
CONFIG_IP_SET_HASH_IPMARK=y
CONFIG_IP_SET_HASH_IPPORT=y
CONFIG_IP_SET_HASH_IPPORTIP=y
CONFIG_IP_SET_HASH_IPPORTNET=y
CONFIG_IP_SET_HASH_IPMAC=y
CONFIG_IP_SET_HASH_MAC=y
CONFIG_IP_SET_HASH_NETPORTNET=y
CONFIG_IP_SET_HASH_NET=y
CONFIG_IP_SET_HASH_NETNET=y
CONFIG_IP_SET_HASH_NETPORT=y
CONFIG_IP_SET_HASH_NETIFACE=y
CONFIG_IP_SET_LIST_SET=y
CONFIG_IP6_NF_NAT=y
CONFIG_IP6_NF_TARGET_MASQUERADE=y
EOT
fi
if [ "$KERNEL_VERSION" = "5.10" ] || [ "$KERNEL_VERSION" = "5.15" ]; then
echo "📦 正在为 5.10 / 5.15 系配置 LTO..."
sed -i 's/^CONFIG_LTO=n/CONFIG_LTO=y/' "$DEFCONFIG_PATH"
sed -i 's/^CONFIG_LTO_CLANG_FULL=y/CONFIG_LTO_CLANG_THIN=y/' "$DEFCONFIG_PATH"
sed -i 's/^CONFIG_LTO_CLANG_NONE=y/CONFIG_LTO_CLANG_THIN=y/' "$DEFCONFIG_PATH"
grep -q '^CONFIG_LTO_CLANG_THIN=y' "$DEFCONFIG_PATH" || echo 'CONFIG_LTO_CLANG_THIN=y' >> "$DEFCONFIG_PATH"
fi
echo "CONFIG_HEADERS_INSTALL=n" >> "$DEFCONFIG_PATH"
sed -i 's/check_defconfig//' "$WORKSPACE/kernel_workspace/kernel_platform/common/build.config.gki"
echo "✅ defconfig 配置更新完成"
cd ../..
echo "🔨 开始内核编译..."
cd "$WORKSPACE/kernel_workspace/kernel_platform/common"
MAKE_CMD_COMMON="make -j$(nproc --all) LLVM=1 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- CC=\"ccache clang\" RUSTC=../../prebuilts/rust/linux-x86/1.73.0b/bin/rustc PAHOLE=../../prebuilts/kernel-build-tools/linux-x86/bin/pahole LD=ld.lld HOSTLD=ld.lld O=out gki_defconfig all"
export KBUILD_BUILD_USER="xiaoxiaow"
export KBUILD_BUILD_HOST="xiaoxiaow_build"
if [ "$KERNEL_VERSION" = "6.1" ]; then
export KBUILD_BUILD_TIMESTAMP="Tue Mar 10 03:53:33 UTC 2026"
export KBUILD_BUILD_VERSION=1
export PATH="$WORKSPACE/kernel_workspace/kernel_platform/prebuilts/clang/host/linux-x86/clang-r487747c/bin:$PATH"
eval "$MAKE_CMD_COMMON KCFLAGS+=-O2"
elif [ "$KERNEL_VERSION" = "6.6" ]; then
export KBUILD_BUILD_VERSION=1
export PATH="$WORKSPACE/kernel_workspace/kernel_platform/prebuilts/clang/host/linux-x86/clang-r510928/bin:$PATH"
eval "$MAKE_CMD_COMMON KCFLAGS+=-O2"
elif [ "$KERNEL_VERSION" = "5.15" ]; then
export PATH="$WORKSPACE/kernel_workspace/kernel_platform/prebuilts/clang/host/linux-x86/clang-r450784e/bin:$PATH"
eval "$MAKE_CMD_COMMON"
elif [ "$KERNEL_VERSION" = "5.10" ]; then
export PATH="$WORKSPACE/kernel_workspace/kernel_platform/prebuilts-master/clang/host/linux-x86/clang-r416183b/bin:$PATH"
eval "make -j$(nproc --all) LLVM_IAS=1 LLVM=1 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- CC=\"ccache clang\" RUSTC=../../prebuilts/rust/linux-x86/1.73.0b/bin/rustc PAHOLE=../../prebuilts/kernel-build-tools/linux-x86/bin/pahole LD=ld.lld HOSTLD=ld.lld O=out gki_defconfig all"
else
echo "❌ 不支持的内核版本: $KERNEL_VERSION" && exit 1
fi
echo "📊 当前 ccache 统计信息如下:"
ccache -s
echo "✅ 内核编译完成"
cd "$WORKSPACE"
echo "📦 正在获取 AnyKernel3 并准备打包..."
git clone https://github.com/Xiaomichael/AnyKernel3 --depth=1
rm -rf ./AnyKernel3/.git
IMAGE_PATH=$(find "$WORKSPACE/kernel_workspace/kernel_platform/common/out/" -name "Image" | head -n 1)
if [ -z "$IMAGE_PATH" ]; then echo "❌ 严重错误:编译完成后未找到 Kernel Image!" && exit 1; fi
echo "✅ 已找到 Kernel Image: $IMAGE_PATH"
cp "$IMAGE_PATH" ./AnyKernel3/Image
if [ "$KPM" = 'On' ]; then
echo "🧩 正在对内核 Image 应用 KPM 补丁..."
mkdir -p kpm_patch_temp && cd kpm_patch_temp
curl -LO https://github.com/SukiSU-Ultra/SukiSU_KernelPatch_patch/releases/download/0.13.0/patch_linux
chmod +x patch_linux
cp "$WORKSPACE/AnyKernel3/Image" ./Image
./patch_linux
mv oImage "$WORKSPACE/AnyKernel3/Image"
cd .. && rm -rf kpm_patch_temp
echo "✅ KPM 补丁应用完成"
fi
if [ "$lz4kd" = "On" ]; then
ARTIFACT_NAME="${FEIL}_SukiSU_Ultra_lz4kd_${KSUVER}"
elif [ "$KERNEL_VERSION" = "6.1" ]; then
ARTIFACT_NAME="${FEIL}_SukiSU_Ultra_lz4_zstd_${KSUVER}"
elif [ "$KERNEL_VERSION" = "6.6" ]; then
ARTIFACT_NAME="${FEIL}_SukiSU_Ultra_lz4_${KSUVER}"
else
ARTIFACT_NAME="${FEIL}_SukiSU_Ultra_${KSUVER}"
fi
if [ "$SUSFS" = "On" ]; then
ARTIFACT_NAME="${ARTIFACT_NAME}_SUSFS"
fi
FINAL_ZIP_NAME="${ARTIFACT_NAME}.zip"
echo "📦 正在创建最终可刷入压缩包: ${FINAL_ZIP_NAME}..."
cd AnyKernel3 && zip -q -r9 "../${FINAL_ZIP_NAME}" ./* && cd ..
echo ""
echo "================================================="
echo " 构建完成!"
echo "================================================="
echo "-> 可刷入内核压缩包路径: $WORKSPACE/${FINAL_ZIP_NAME}"
ZRAM_KO_PATH=$(find "$WORKSPACE/kernel_workspace/kernel_platform/common/out/" -name "zram.ko" | head -n 1)
if [ -n "$ZRAM_KO_PATH" ]; then
cp "$ZRAM_KO_PATH" "$WORKSPACE/"
echo "-> zram.ko 模块路径: $WORKSPACE/zram.ko"
fi
echo "================================================="
echo ""
================================================
FILE: script/buildbot.py
================================================
import asyncio
import os
import sys
from telethon import TelegramClient
API_ID = 611335
API_HASH = "d524b414d21f4d37f08684c1df41ac9c"
BOT_TOKEN = os.environ.get("BOT_TOKEN")
CHAT_ID = os.environ.get("CHATID")
MESSAGE_THREAD_ID = os.environ.get("MESSAGE_THREAD_ID")
DEVICE = os.environ.get("DEVICE")
KPM= os.environ.get("KPM")
lz4kd= os.environ.get("LZ4KD")
BBR= os.environ.get("BBR")
KSU_VAR = os.environ.get("KSU_VAR")
MSG_TEMPLATE = """
**New Build Published!**
#oki
#{device}
```Kernel Info
kernelver: {kernelversion}
KSU_VAR: {KSU_VAR}
KsuVersion: {Ksuver}
KPM: {kpm}
Lz4kd: {lz4kd} Lz4&zstd: {lz4_zstd}
BBR: {BBR}
```
十分感谢yc佬对本自动推送bot做出的贡献❤️
Please Join Our Group! tg @gki_kernels_xiaoxiaow
""".strip()
def get_caption():
msg = MSG_TEMPLATE.format(
device=DEVICE,
kernelversion=kernelversion,
kpm=KPM,
lz4kd=lz4kd,
Ksuver=ksuver,
KSU_VAR=KSU_VAR,
lz4_zstd=check_lz4_zstd(),
BBR=BBR,
)
if len(msg) > 1024:
return f"{DEVICE}{kernelversion}"
return msg
def check_environ():
global CHAT_ID, MESSAGE_THREAD_ID
if BOT_TOKEN is None:
print("[-] Invalid BOT_TOKEN")
exit(1)
if CHAT_ID is None:
print("[-] Invalid CHAT_ID")
exit(1)
else:
try:
CHAT_ID = int(CHAT_ID)
except:
pass
if MESSAGE_THREAD_ID is not None and MESSAGE_THREAD_ID != "":
try:
MESSAGE_THREAD_ID = int(MESSAGE_THREAD_ID)
except:
print("[-] Invaild MESSAGE_THREAD_ID")
exit(1)
else:
MESSAGE_THREAD_ID = None
get_versions()
def get_kernel_versions():
version=""
patchlevel=""
sublevel=""
try:
with open("Makefile",'r') as file:
for line in file:
if line.startswith("VERSION"):
version = line.split('=')[1].strip()
elif line.startswith("PATCHLEVEL"):
patchlevel = line.split('=')[1].strip()
elif line.startswith("SUBLEVEL"):
sublevel = line.split('=')[1].strip()
elif line.startswith("#"): # skip comments
continue
else:
break
except FileNotFoundError:
raise
return f"{version}.{patchlevel}.{sublevel}"
def get_versions():
global kernelversion,ksuver,KSU_VAR
if KSU_VAR == "NEXT":
ksu_folder="KernelSU-Next"
else:
ksu_folder="KernelSU"
current_work=os.getcwd()
os.chdir(current_work+"/kernel_workspace/kernel_platform/common") #除非next
kernelversion=get_kernel_versions()
os.chdir(os.getcwd()+f"/../{ksu_folder}")
ksuver=os.popen("echo $(git describe --tags $(git rev-list --tags --max-count=1))-$(git rev-parse --short HEAD)@$(git branch --show-current)").read().strip()
ksuver+=f' ({os.environ.get("KSUVER")})'
os.chdir(current_work)
def check_lz4_zstd():
global lz4kd
if lz4kd == "Off":
return "On"
else:
return "Off"
return "Off"
async def main():
print("[+] Uploading to telegram")
check_environ()
files = sys.argv[1:]
print("[+] Files:", files)
if len(files) <= 0:
print("[-] No files to upload")
exit(1)
print("[+] Logging in Telegram with bot")
script_dir = os.path.dirname(os.path.abspath(sys.argv[0]))
session_dir = os.path.join(script_dir, "ksubot")
async with await TelegramClient(session=session_dir, api_id=API_ID, api_hash=API_HASH).start(bot_token=BOT_TOKEN) as bot:
caption = [""] * len(files)
caption[-1] = get_caption()
print("[+] Caption: ")
print("---")
print(caption)
print("---")
print("[+] Sending")
await bot.send_file(entity=CHAT_ID, file=files, caption=caption, reply_to=MESSAGE_THREAD_ID, parse_mode="markdown")
print("[+] Done!")
if __name__ == "__main__":
try:
asyncio.run(main())
except Exception as e:
print(f"[-] An error occurred: {e}")