(天玑特供) 6.6.50 欧加真OKI内核快速构建 #2
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: (天玑特供)加速版构建 6.6.50 欧加真OKI内核 | |
| env: | |
| TZ: Asia/Shanghai | |
| ANDROID_VERSION: 'android15' | |
| KERNEL_VERSION: '6.6' | |
| KERNEL_NAME: 'android15-8-g29d86c5fc9dd-abogki428889875-4k' | |
| on: | |
| workflow_dispatch: | |
| inputs: | |
| ksu_type: | |
| description: 'KernelSU分支(SukiSU Ultra/KernelSU Next,默认SukiSU Ultra)' | |
| required: true | |
| type: choice | |
| default: 'sukisu' | |
| options: | |
| - 'sukisu' | |
| - 'ksunext' | |
| hook_method: | |
| description: hook模式(大部分情况manual即可,少数需切换sus su模式的场景才需要kprobes钩子, 若新版manual钩子出现问题可尝试syscall) | |
| required: true | |
| type: choice | |
| default: 'manual' | |
| options: | |
| - 'manual' | |
| - 'kprobes' | |
| - 'syscall' | |
| kpm_enable: | |
| description: '是否开启kpm(仅对sukisu生效;可能轻微增加耗电,不需要可关闭)' | |
| required: true | |
| type: choice | |
| default: 'false' | |
| options: | |
| - 'true' | |
| - 'false' | |
| lz4_enable: | |
| description: '是否安装 lz4 1.10.0+zstd 1.5.7 补丁及 LZ4KD 补丁(0=均不安装,1=安装lz4&zstd补丁,2=安装lz4kd补丁,3=均安装,默认1)' | |
| required: true | |
| type: choice | |
| default: '1' | |
| options: | |
| - '0' | |
| - '1' | |
| - '2' | |
| - '3' | |
| bbr_enable: | |
| description: "是否启用bbr算法(优化上行数据,对手机日用无太大意义甚至可能负优化;false关闭,true仅加入算法,default设为默认)" | |
| required: true | |
| type: choice | |
| default: 'false' | |
| options: | |
| - 'false' | |
| - 'true' | |
| - 'default' | |
| better_net: | |
| description: '是否开启网络功能增强优化配置(优化代理连接,IPV6等功能)' | |
| required: true | |
| type: choice | |
| default: 'false' | |
| options: | |
| - 'true' | |
| - 'false' | |
| ssg_rekernel_enable: | |
| description: '是否启用三星SSG IO调度器及Re-Kernel支持(0=均不安装,1=安装SSG IO调度器,2=安装Re-Kernel,3=均安装,默认1)' | |
| required: true | |
| type: choice | |
| default: '0' | |
| options: | |
| - '0' | |
| - '1' | |
| - '2' | |
| - '3' | |
| baseband_guard: | |
| description: '是否开启内核级基带保护(阻止一切对非用户分区的写入,有效防止格机)' | |
| required: true | |
| type: boolean | |
| default: 'true' | |
| kernel_suffix: | |
| description: '内核后缀(留空默认,开头别加连字符,勿加空格等影响指令运行的保留字符)' | |
| required: false | |
| type: string | |
| default: '' | |
| jobs: | |
| build: | |
| runs-on: ubuntu-latest | |
| outputs: | |
| ksuver: ${{ steps.ksu_version.outputs.ksuver }} | |
| steps: | |
| - name: 安装配置环境依赖 | |
| run: | | |
| sudo apt-mark hold firefox | |
| sudo apt-mark hold libc-bin | |
| sudo apt purge man-db | |
| sudo rm -rf /var/lib/man-db/auto-update | |
| sudo apt update | |
| sudo apt-get install -y --no-install-recommends \ | |
| curl bison flex make binutils git perl gcc python3 \ | |
| python-is-python3 bc libssl-dev libelf-dev \ | |
| bc aria2 zip unzip ccache | |
| - name: 配置ccache目录 | |
| run: | | |
| echo "CCACHE_DIR=$HOME/.ccache_6.6.50" >> $GITHUB_ENV | |
| echo "CCACHE_MAXSIZE=3G" >> $GITHUB_ENV | |
| echo "当前磁盘空间:" | |
| df -h | |
| echo "当前构建内核版本:6.6.50" | |
| rm -rf kernel_workspace | |
| mkdir kernel_workspace | |
| - name: 载入当前版本内核的 ccache缓存 | |
| uses: actions/cache@v3 | |
| id: ccache-restore | |
| with: | |
| path: ${{ env.CCACHE_DIR }} | |
| key: ccache-new-6.6.50-${{ runner.os }}-main | |
| restore-keys: | | |
| ccache-new-6.6.50-${{ runner.os }}- | |
| ccache-new-6.6.50- | |
| - name: 初始化并配置ccache | |
| run: | | |
| # 设置ccache环境变量 | |
| export CCACHE_COMPILERCHECK="%compiler% -dumpmachine; %compiler% -dumpversion" | |
| export CCACHE_NOHASHDIR="true" | |
| export CCACHE_HARDLINK="true" | |
| export CCACHE_DIR="${{ env.CCACHE_DIR }}" | |
| export CCACHE_MAXSIZE="${{ env.CCACHE_MAXSIZE }}" | |
| # 确保ccache目录存在 | |
| mkdir -p "$CCACHE_DIR" | |
| # 每次运行都重新配置缓存大小 | |
| echo "配置ccache缓存大小为: $CCACHE_MAXSIZE" | |
| ccache -M "$CCACHE_MAXSIZE" | |
| ccache -o compression=true | |
| # 显示初始缓存状态 | |
| echo "ccache初始状态:" | |
| ccache -s | |
| # 如果缓存恢复命中,显示详细信息 | |
| if [ "${{ steps.ccache-restore.outputs.cache-hit }}" == 'true' ]; then | |
| echo "ccache缓存命中详情:" | |
| ccache -sv | |
| fi | |
| - name: 初始化源码仓库及llvm-Clang18工具链 | |
| run: | | |
| cd kernel_workspace | |
| echo "正在克隆源码仓库..." | |
| aria2c -s16 -x16 -k1M https://github.com/cctv18/android_kernel_oneplus_mt6991/archive/refs/heads/oneplus/mt6991_v_15.0.2_ace5_ultra.zip -o common.zip && | |
| unzip -q common.zip && | |
| mv "android_kernel_oneplus_mt6991-oneplus-mt6991_v_15.0.2_ace5_ultra" common && | |
| rm -rf common.zip & | |
| echo "正在克隆llvm-clang18工具链..." && | |
| mkdir -p clang18 && | |
| aria2c -s16 -x16 -k1M https://github.com/cctv18/oneplus_sm8650_toolchain/releases/download/LLVM-Clang18-r510928/clang-r510928.zip -o clang.zip && | |
| unzip -q clang.zip -d clang18 && | |
| rm -rf clang.zip & | |
| echo "正在克隆构建工具..." && | |
| aria2c -s16 -x16 -k1M https://github.com/cctv18/oneplus_sm8650_toolchain/releases/download/LLVM-Clang18-r510928/build-tools.zip -o build-tools.zip && | |
| unzip -q build-tools.zip && | |
| rm -rf build-tools.zip & | |
| wait | |
| echo "所有源码及llvm-Clang18工具链初始化完成!" | |
| echo "正在去除 ABI 保护 & 去除 dirty 后缀..." | |
| rm common/android/abi_gki_protected_exports_* || true | |
| for f in common/scripts/setlocalversion; do | |
| sed -i 's/ -dirty//g' "$f" | |
| sed -i '$i res=$(echo "$res" | sed '\''s/-dirty//g'\'')' "$f" | |
| done | |
| - name: 添加KernelSU | |
| id: ksu_version | |
| run: | | |
| # 进入内核工作目录 | |
| cd kernel_workspace | |
| if [[ ${{ github.event.inputs.ksu_type }} == "sukisu" ]]; then | |
| echo "正在配置SukiSU Ultra..." | |
| curl -LSs "https://raw.githubusercontent.com/ShirkNeko/SukiSU-Ultra/refs/heads/main/kernel/setup.sh" | bash -s susfs-main | |
| cd ./KernelSU | |
| # 获取当前 Git 提交的短哈希 (8位) | |
| GIT_COMMIT_HASH=$(git rev-parse --short=8 HEAD) | |
| echo "当前提交哈希: $GIT_COMMIT_HASH" | |
| export KSU_VERSION=$KSU_VERSION | |
| # 尝试最多 3 次获取 KernelSU API 版本号 | |
| for i in {1..3}; do | |
| # 从远程 Makefile 中提取 KSU_API_VERSION | |
| KSU_API_VERSION=$(curl -s "https://raw.githubusercontent.com/SukiSU-Ultra/SukiSU-Ultra/susfs-main/kernel/Makefile" | | |
| # 查找第一个包含版本定义的行 | |
| grep -m1 "KSU_VERSION_API :=" | | |
| # 提取等号后的值 | |
| awk -F'= ' '{print $2}' | | |
| # 删除所有空白字符 | |
| tr -d '[:space:]') | |
| # 如果成功获取到版本号则跳出循环,否则等待 1 秒后重试 | |
| [ -n "$KSU_API_VERSION" ] && break || sleep 1 | |
| done | |
| # 如果获取失败,使用默认版本号 3.1.7 | |
| [ -z "$KSU_API_VERSION" ] && KSU_API_VERSION="3.1.7" | |
| # 将 API 版本号存储到 GitHub 环境变量 | |
| echo "KSU_API_VERSION=$KSU_API_VERSION" >> $GITHUB_ENV | |
| # 创建版本定义模板&版本格式函数: 使用获取的提交哈希和固定后缀 | |
| # KSU_VERSION_API: API 版本定义 | |
| # KSU_VERSION_FULL: 完整版本定义 | |
| VERSION_DEFINITIONS=$'define get_ksu_version_full\nv\\$1-'"$GIT_COMMIT_HASH"$'@cctv18\nendef\n\nKSU_VERSION_API := '"$KSU_API_VERSION"$'\nKSU_VERSION_FULL := v'"$KSU_API_VERSION"$'-'"$GIT_COMMIT_HASH"$'@cctv18' | |
| # 清理内核 Makefile 中的旧版本定义 | |
| # 删除版本函数 | |
| sed -i '/define get_ksu_version_full/,/endef/d' kernel/Makefile | |
| # 删除 API 版本定义 | |
| sed -i '/KSU_VERSION_API :=/d' kernel/Makefile | |
| # 删除完整版本定义 | |
| sed -i '/KSU_VERSION_FULL :=/d' kernel/Makefile | |
| # 在 REPO_OWNER 行后插入新版本定义 | |
| awk -v def="$VERSION_DEFINITIONS" ' | |
| # 当找到 REPO_OWNER 行时,插入版本定义并设置标记 | |
| /REPO_OWNER :=/ {print; print def; inserted=1; next} | |
| # 打印所有行 | |
| 1 | |
| # 如果未找到插入点,在文件末尾追加 | |
| END {if (!inserted) print def} | |
| ' kernel/Makefile > kernel/Makefile.tmp && mv kernel/Makefile.tmp kernel/Makefile | |
| # 生成自定义版本号(基于提交计数), 失败时使用 114514 | |
| KSU_VERSION=$(expr $(git rev-list --count main) + 10700 2>/dev/null || echo 114514) | |
| # 存储版本号到 GitHub 环境变量 | |
| echo "KSUVER=$KSU_VERSION" >> $GITHUB_ENV | |
| echo "ksuver=$KSU_VERSION" >> $GITHUB_OUTPUT | |
| # 验证修改结果 | |
| grep -A10 "REPO_OWNER" kernel/Makefile # 检查插入点后的内容 | |
| grep "KSU_VERSION_FULL" kernel/Makefile # 确认版本定义存在 | |
| echo "SukiSU版本号: v${KSU_API_VERSION}-${GIT_COMMIT_HASH}@cctv18" | |
| else | |
| echo "正在配置KernelSU Next..." | |
| curl -LSs "https://raw.githubusercontent.com/pershoot/KernelSU-Next/next-susfs/kernel/setup.sh" | bash -s next-susfs | |
| cd KernelSU-Next | |
| KSU_VERSION=$(expr $(curl -sI "https://api.github.com/repos/pershoot/KernelSU-Next/commits?sha=next&per_page=1" | grep -i "link:" | sed -n 's/.*page=\([0-9]*\)>; rel="last".*/\1/p') "+" 10200) | |
| echo "KSUVER=$KSU_VERSION" >> $GITHUB_ENV | |
| echo "ksuver=$KSU_VERSION" >> $GITHUB_OUTPUT | |
| sed -i "s/DKSU_VERSION=11998/DKSU_VERSION=${KSU_VERSION}/" kernel/Makefile | |
| fi | |
| - name: 应用 KernelSU & SUSFS 补丁 | |
| run: | | |
| cd kernel_workspace | |
| if [[ ${{ github.event.inputs.ksu_type }} == "sukisu" ]]; then | |
| echo "正在添加SukiSU Ultra补丁..." | |
| git clone https://github.com/ShirkNeko/susfs4ksu.git -b gki-${{ env.ANDROID_VERSION }}-${{ env.KERNEL_VERSION }} | |
| git clone https://github.com/ShirkNeko/SukiSU_patch.git | |
| cp ./susfs4ksu/kernel_patches/50_add_susfs_in_gki-${{ env.ANDROID_VERSION }}-${{ env.KERNEL_VERSION }}.patch ./common/ | |
| cp ./susfs4ksu/kernel_patches/fs/* ./common/fs/ | |
| cp ./susfs4ksu/kernel_patches/include/linux/* ./common/include/linux/ | |
| if [[ ${{ github.event.inputs.hook_method }} == "manual" ]]; then | |
| cp ./SukiSU_patch/hooks/scope_min_manual_hooks_v1.5.patch ./common/ | |
| fi | |
| if [[ ${{ github.event.inputs.hook_method }} == "syscall" ]]; then | |
| cp ./SukiSU_patch/hooks/syscall_hooks.patch ./common/ | |
| fi | |
| cp ./SukiSU_patch/69_hide_stuff.patch ./common/ | |
| cd ./common | |
| patch -p1 < 50_add_susfs_in_gki-${{ env.ANDROID_VERSION }}-${{ env.KERNEL_VERSION }}.patch || true | |
| if [[ ${{ github.event.inputs.hook_method }} == "manual" ]]; then | |
| patch -p1 < scope_min_manual_hooks_v1.5.patch || true | |
| fi | |
| if [[ ${{ github.event.inputs.hook_method }} == "syscall" ]]; then | |
| patch -p1 < syscall_hooks.patch || true | |
| fi | |
| patch -p1 < 69_hide_stuff.patch || true | |
| else | |
| echo "正在添加KernelSU Next补丁..." | |
| git clone https://gitlab.com/simonpunk/susfs4ksu.git -b gki-${{ env.ANDROID_VERSION }}-${{ env.KERNEL_VERSION }} | |
| git clone https://github.com/WildKernels/kernel_patches.git | |
| cp ./susfs4ksu/kernel_patches/50_add_susfs_in_gki-${{ env.ANDROID_VERSION }}-${{ env.KERNEL_VERSION }}.patch ./common/ | |
| cp ./susfs4ksu/kernel_patches/fs/* ./common/fs/ | |
| cp ./susfs4ksu/kernel_patches/include/linux/* ./common/include/linux/ | |
| cp ./kernel_patches/next/scope_min_manual_hooks_v1.5.patch ./common/ | |
| cp ./kernel_patches/69_hide_stuff.patch ./common/ | |
| cd ./common | |
| patch -p1 < 50_add_susfs_in_gki-${{ env.ANDROID_VERSION }}-${{ env.KERNEL_VERSION }}.patch || true | |
| patch -p1 -N -F 3 < scope_min_manual_hooks_v1.5.patch || true | |
| patch -p1 -N -F 3 < 69_hide_stuff.patch || true | |
| fi | |
| - name: 应用lz4 1.10.0 & zstd 1.5.7补丁 | |
| run: | | |
| if [[ "${{ github.event.inputs.lz4_enable }}" == "1" || "${{ github.event.inputs.lz4_enable }}" == "3" ]]; then | |
| echo "正在添加lz4 1.10.0 & zstd 1.5.7补丁…" | |
| cd kernel_workspace | |
| git clone https://github.com/cctv18/oppo_oplus_realme_sm8750.git | |
| cp ./oppo_oplus_realme_sm8750/zram_patch/001-lz4.patch ./common/ | |
| cp ./oppo_oplus_realme_sm8750/zram_patch/lz4armv8.S ./common/lib | |
| cp ./oppo_oplus_realme_sm8750/zram_patch/002-zstd.patch ./common/ | |
| cd ./common | |
| git apply -p1 < 001-lz4.patch || true | |
| patch -p1 < 002-zstd.patch || true | |
| fi | |
| - name: 应用 lz4kd 补丁 | |
| run: | | |
| if [[ "${{ github.event.inputs.lz4_enable }}" == "2" || "${{ github.event.inputs.lz4_enable }}" == "3" ]]; then | |
| echo "正在添加lz4kd补丁…" | |
| cd kernel_workspace | |
| if [[ ${{ github.event.inputs.ksu_type }} == "ksunext" ]]; then | |
| git clone https://github.com/ShirkNeko/SukiSU_patch.git | |
| fi | |
| cd common | |
| cp -r ../SukiSU_patch/other/zram/lz4k/include/linux/* ./include/linux/ | |
| cp -r ../SukiSU_patch/other/zram/lz4k/lib/* ./lib | |
| cp -r ../SukiSU_patch/other/zram/lz4k/crypto/* ./crypto | |
| cp ../SukiSU_patch/other/zram/zram_patch/${{ env.KERNEL_VERSION }}/lz4kd.patch ./ | |
| patch -p1 -F 3 < lz4kd.patch || true | |
| fi | |
| - name: 添加 KSU & SUSFS 配置项 | |
| run: | | |
| cd kernel_workspace | |
| echo "CONFIG_KSU=y" >> ./common/arch/arm64/configs/gki_defconfig | |
| if [[ ${{ github.event.inputs.kpm_enable }} == 'true' && ${{ github.event.inputs.ksu_type }} == "sukisu" ]]; then | |
| echo "CONFIG_KPM=y" >> ./common/arch/arm64/configs/gki_defconfig | |
| fi | |
| if [ "${{ github.event.inputs.hook_method }}" == "kprobes" ]; then | |
| echo "正在开启kprobes钩子..." | |
| echo "CONFIG_KSU_SUSFS_SUS_SU=y" >> ./common/arch/arm64/configs/gki_defconfig | |
| echo "CONFIG_KSU_MANUAL_HOOK=n" >> ./common/arch/arm64/configs/gki_defconfig | |
| echo "CONFIG_KSU_KPROBES_HOOK=y" >> ./common/arch/arm64/configs/gki_defconfig | |
| else | |
| echo "正在开启manual钩子..." | |
| echo "CONFIG_KSU_MANUAL_HOOK=y" >> ./common/arch/arm64/configs/gki_defconfig | |
| echo "CONFIG_KSU_SUSFS_SUS_SU=n" >> ./common/arch/arm64/configs/gki_defconfig | |
| fi | |
| echo "CONFIG_KSU_SUSFS=y" >> ./common/arch/arm64/configs/gki_defconfig | |
| echo "CONFIG_KSU_SUSFS_HAS_MAGIC_MOUNT=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_AUTO_ADD_SUS_KSU_DEFAULT_MOUNT=y" >> ./common/arch/arm64/configs/gki_defconfig | |
| echo "CONFIG_KSU_SUSFS_AUTO_ADD_SUS_BIND_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_TRY_UMOUNT=y" >> ./common/arch/arm64/configs/gki_defconfig | |
| echo "CONFIG_KSU_SUSFS_AUTO_ADD_TRY_UMOUNT_FOR_BIND_MOUNT=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 | |
| if [[ "${{ github.event.inputs.lz4_enable }}" == "2" || "${{ github.event.inputs.lz4_enable }}" == "3" ]]; then | |
| echo "CONFIG_ZSMALLOC=y" >> ./common/arch/arm64/configs/gki_defconfig | |
| echo "CONFIG_CRYPTO_LZ4HC=y" >> ./common/arch/arm64/configs/gki_defconfig | |
| echo "CONFIG_CRYPTO_LZ4K=y" >> ./common/arch/arm64/configs/gki_defconfig | |
| echo "CONFIG_CRYPTO_LZ4KD=y" >> ./common/arch/arm64/configs/gki_defconfig | |
| echo "CONFIG_CRYPTO_842=y" >> ./common/arch/arm64/configs/gki_defconfig | |
| # 以下配置未核实必要性,待测试 | |
| #echo "CONFIG_ZRAM_WRITEBACK=y" >> ./common/arch/arm64/configs/gki_defconfig | |
| #sed -i 's/CONFIG_ZRAM=m/CONFIG_ZRAM=y/g' ./common/arch/arm64/configs/gki_defconfig | |
| #sed -i 's/CONFIG_MODULE_SIG=y/CONFIG_MODULE_SIG=n/g' ./common/arch/arm64/configs/gki_defconfig | |
| fi | |
| # 开启O2编译优化配置 | |
| echo "CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE=y" >> ./common/arch/arm64/configs/gki_defconfig | |
| #禁用 defconfig 检查 | |
| sed -i 's/check_defconfig//' ./common/build.config.gki | |
| - name: 启用网络功能增强优化配置 | |
| run: | | |
| cd kernel_workspace | |
| if [[ "${{ github.event.inputs.better_net }}" == "true" ]]; then | |
| #启用 BPF 流解析器,实现高性能网络流量处理,增强网络监控和分析能力 | |
| echo "CONFIG_BPF_STREAM_PARSER=y" >> ./common/arch/arm64/configs/gki_defconfig | |
| #开启增强 Netfilter 防火墙扩展模块,支持基于地址类型的匹配规则,启用 IP 集合支持,提高防火墙规则灵活性,支持更复杂的流量过滤策略 | |
| 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 | |
| #启用 IP 集框架及其多种数据结构实现,提供高效的大规模 IP 地址管理,提高防火墙规则处理效率,减少内存占用 | |
| 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 | |
| #启用 IPv6 网络地址转换 | |
| 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 | |
| #由于部分机型的vintf兼容性检测规则,在开启CONFIG_IP6_NF_NAT后开机会出现"您的设备内部出现了问题。请联系您的设备制造商了解详情。"的提示,故添加一个配置修复补丁,在编译内核时隐藏CONFIG_IP6_NF_NAT=y但不影响对应功能编译 | |
| cd common | |
| wget https://github.com/cctv18/oppo_oplus_realme_sm8650/raw/refs/heads/main/other_patch/config.patch | |
| patch -p1 -F 3 < config.patch || true | |
| fi | |
| - name: 添加 BBR 等一系列拥塞控制算法 | |
| run: | | |
| if [[ "${{ github.event.inputs.bbr_enable }}" == "true" || "${{ github.event.inputs.bbr_enable }}" == "default" ]]; then | |
| echo "正在添加BBR等拥塞控制算法..." | |
| cd kernel_workspace | |
| #开启TCP拥塞控制算法控制器(必需) | |
| echo "CONFIG_TCP_CONG_ADVANCED=y" >> ./common/arch/arm64/configs/gki_defconfig | |
| ################################################################################################################################ | |
| # BBR:基于链路容量的代表拥塞控制算法,不再使用丢包、延时等信号去衡量拥塞是否发生,而是直接对网络建模来应对、避免真实的网络拥塞; | |
| # 具有高吞吐、低延迟、抗丢包的特点,但在手机上使用时由于持续探测带宽/RTT、高频计算与发包增加 CPU 和射频模块功耗,会增加耗电及发热; | |
| # 且移动基站缓冲区深度通常较小(~50ms),BBR 的带宽探测阶段(ProbeRTT)过度降窗可能导致吞吐量骤降,且网络切换(WiFi→5G)时需重新 | |
| # 探测参数,反而增加延迟或导致速率振荡(短暂卡顿),且存在 RTT 不公平性,与基于丢包的流竞争时可能过于强势,在混合网络环境中 | |
| #(如 BBR + CUBIC 共存),BBR 会抢占更多其他软件的带宽,降低其他应用的公平性(如后台软件更新影响前台视频播放)。 | |
| # 因此,虽然BBR可以显著减少排队延迟,抗丢包能力强,带宽利用率高,但由于其会增加耗电,且易导致网络速率波动,故安卓系统默认不使用 | |
| # BBR拥塞算法,而是使用在吞吐量、稳定性、兼容性、能效之间取得最佳平衡的CUBIC算法。在开启BBR前,请考虑自己是否真的有使用BBR的必要。 | |
| ################################################################################################################################ | |
| echo "CONFIG_TCP_CONG_BBR=y" >> ./common/arch/arm64/configs/gki_defconfig | |
| #CUBIC:安卓的默认TCP拥塞控制算法,在吞吐量、稳定性、兼容性、能效之间取得最佳平衡,具有高兼容性与公平性、抗网络波动性强、低计算开销的特点,是绝大部分移动场景的优先选择 | |
| echo "CONFIG_TCP_CONG_CUBIC=y" >> ./common/arch/arm64/configs/gki_defconfig | |
| #VEGAS:基于时延的拥塞控制算法之一,将回路响应时间(Round Trip Time,RTT)增加视为出现拥塞,增加时增大拥塞窗口,减小时减小拥塞窗口 | |
| echo "CONFIG_TCP_CONG_VEGAS=y" >> ./common/arch/arm64/configs/gki_defconfig | |
| #New Vegas:Vegas 算法的改进版,优化了 RTT 测量和竞争公平性,可以更准确地检测拥塞,与 Reno/CUBIC 共存能力提升 | |
| echo "CONFIG_TCP_CONG_NV=y" >> ./common/arch/arm64/configs/gki_defconfig | |
| #Westwood+:基于带宽估计(ACK 到达率)动态设置拥塞窗口和慢启动阈值;快速恢复,适合无线网络(区分拥塞丢包与无线丢包) | |
| echo "CONFIG_TCP_CONG_WESTWOOD=y" >> ./common/arch/arm64/configs/gki_defconfig | |
| #HTCP:一种基于损失的算法,使用 AIMD 来控制拥塞窗口,根据 RTT 动态调整增长因子,结合延迟和丢包信号,针对高延迟的高速网络进行优化 | |
| echo "CONFIG_TCP_CONG_HTCP=y" >> ./common/arch/arm64/configs/gki_defconfig | |
| #brutal:一种通过主动探测 + 激进抢占最大化吞吐量的拥塞算法,无拥塞窗口上限,轻度丢包(<20%)不降窗,避免类似 BBR 的 ProbeRTT 阶段, | |
| #持续维持高发送速率,与 Reno/CUBIC 共存时,Brutal 可通过高频发包抢占 90%+ 带宽,适用于高丢包弱网环境(如公共 Wi-Fi、蜂窝网络)及 | |
| #直播推流、云游戏上行链路等需优先保证吞吐量而非延迟敏感的场景,提升弱网吞吐性能,对抗运营商 QoS 限速。但由于TCP Brutal 仅在应用程序 | |
| #对每个 TCP 连接设置带宽参数之后才能正常工作,绝大部分安卓应用都不支持该操作,故请勿将 TCP Brutal 设置成默认拥塞控制算法。 | |
| echo "CONFIG_TCP_CONG_BRUTAL=y" >> ./common/arch/arm64/configs/gki_defconfig | |
| if [[ "${{ github.event.inputs.bbr_enable }}" == "default" ]]; then | |
| echo "正在将BBR设为默认拥塞控制算法..." | |
| echo "CONFIG_DEFAULT_TCP_CONG=bbr" >> ./common/arch/arm64/configs/gki_defconfig | |
| else | |
| echo "CONFIG_DEFAULT_TCP_CONG=cubic" >> ./common/arch/arm64/configs/gki_defconfig | |
| fi | |
| fi | |
| - name: 启用三星SSG IO调度器 | |
| run: | | |
| if [[ "${{ github.event.inputs.ssg_rekernel_enable }}" == "1" || "${{ github.event.inputs.ssg_rekernel_enable }}" == "3" ]]; then | |
| echo "正在启用三星SSG IO调度器(一加12等极少数机型开启后可能不开机,若出现bug请关闭此项)…" | |
| cd kernel_workspace | |
| echo "CONFIG_MQ_IOSCHED_SSG=y" >> ./common/arch/arm64/configs/gki_defconfig | |
| echo "CONFIG_MQ_IOSCHED_SSG_CGROUP=y" >> ./common/arch/arm64/configs/gki_defconfig | |
| fi | |
| - name: 启用Re-Kernel支持 | |
| run: | | |
| if [[ "${{ github.event.inputs.ssg_rekernel_enable }}" == "2" || "${{ github.event.inputs.ssg_rekernel_enable }}" == "3" ]]; then | |
| echo "正在启用Re-Kernel支持(用于与Freezer,NoActive等软件配合使用,提升冻结后台能力)…" | |
| cd kernel_workspace | |
| echo "CONFIG_REKERNEL=y" >> ./common/arch/arm64/configs/gki_defconfig | |
| fi | |
| - name: 添加风驰补丁 | |
| run: | | |
| echo "正在添加风驰补丁…" | |
| cd kernel_workspace | |
| #echo "CONFIG_HMBIRD_SCHED=y" >> ./common/arch/arm64/configs/gki_defconfig | |
| #cd ./common/kernel | |
| #wget https://github.com/cctv18/oppo_oplus_realme_sm8750/raw/refs/heads/main/other_patch/hmbird_patch.c | |
| #echo "obj-y += hmbird_patch.o" >> ./Makefile | |
| - name: 启用内核级基带保护 | |
| run: | | |
| if [[ "${{ github.event.inputs.baseband_guard }}" == "true" ]]; then | |
| echo "正在启用启用内核级基带保护支持…" | |
| cd kernel_workspace | |
| echo "CONFIG_BBG=y" >> ./common/arch/arm64/configs/gki_defconfig | |
| cd ./common/security | |
| wget https://github.com/cctv18/Baseband-guard/archive/refs/heads/master.zip | |
| unzip -q master.zip | |
| mv "Baseband-guard-master" baseband-guard | |
| printf '\nobj-$(CONFIG_BBG) += baseband-guard/\n' >> ./Makefile | |
| sed -i '/^config LSM$/,/^help$/{ /^[[:space:]]*default/ { /baseband_guard/! s/landlock/landlock,baseband_guard/ } }' ./Kconfig | |
| awk ' | |
| /endmenu/ { last_endmenu_line = NR } | |
| { lines[NR] = $0 } | |
| END { | |
| for (i=1; i<=NR; i++) { | |
| if (i == last_endmenu_line) { | |
| sub(/endmenu/, "", lines[i]); | |
| print lines[i] "source \"security/baseband-guard/Kconfig\"" | |
| print "" | |
| print "endmenu" | |
| } else { | |
| print lines[i] | |
| } | |
| } | |
| } | |
| ' ./Kconfig > Kconfig.tmp && mv Kconfig.tmp ./Kconfig | |
| sed -i 's/selinuxfs.o //g' "./selinux/Makefile" | |
| cat "./baseband-guard/sepatch.txt" >> "./selinux/Makefile" | |
| fi | |
| - name: 添加制作名称 | |
| run: | | |
| cd kernel_workspace | |
| echo "替换内核版本后缀..." | |
| if [[ -n "${{ github.event.inputs.kernel_suffix }}" ]]; then | |
| echo "当前内核版本后缀:${{ github.event.inputs.kernel_suffix }}" | |
| for f in ./common/scripts/setlocalversion; do | |
| sed -i "\$s|echo \"\\\$res\"|echo \"-${{ github.event.inputs.kernel_suffix }}\"|" "$f" | |
| done | |
| sudo sed -i 's/-4k/-${{ github.event.inputs.KERNEL_SUFFIX }}/g' ./common/arch/arm64/configs/gki_defconfig | |
| else | |
| echo "当前内核版本后缀:${{ env.KERNEL_NAME }}" | |
| for f in ./common/scripts/setlocalversion; do | |
| sed -i "\$s|echo \"\\\$res\"|echo \"-${{ env.KERNEL_NAME }}\"|" "$f" | |
| done | |
| sudo sed -i 's/-4k/-${{ env.KERNEL_NAME }}/g' ./common/arch/arm64/configs/gki_defconfig | |
| fi | |
| sed -i 's/${scm_version}//' ./common/scripts/setlocalversion | |
| echo "CONFIG_LOCALVERSION_AUTO=n" >> ./common/arch/arm64/configs/gki_defconfig | |
| - name: 构建内核 | |
| run: | | |
| WORKDIR="$(pwd)" | |
| export PATH="/usr/lib/ccache:$PATH" | |
| export PATH="$WORKDIR/kernel_workspace/clang18/bin:$PATH" | |
| export PATH="$WORKDIR/kernel_workspace/build-tools/bin:$PATH" | |
| CLANG_DIR="$WORKDIR/kernel_workspace/clang18/bin" | |
| CLANG_VERSION="$($CLANG_DIR/clang --version | head -n 1)" | |
| LLD_VERSION="$($CLANG_DIR/ld.lld --version | head -n 1)" | |
| echo "编译器信息:" | |
| echo "Clang版本: $CLANG_VERSION" | |
| echo "LLD版本: $LLD_VERSION" | |
| pahole_version=$(pahole --version 2>/dev/null | head -n1); [ -z "$pahole_version" ] && echo "pahole版本:未安装" || echo "pahole版本:$pahole_version" | |
| export CCACHE_COMPILERCHECK="%compiler% -dumpmachine; %compiler% -dumpversion" | |
| export CCACHE_NOHASHDIR="true" | |
| export CCACHE_HARDLINK="true" | |
| export CCACHE_DIR="${{ env.CCACHE_DIR }}" | |
| export CCACHE_MAXSIZE="3G" | |
| cd kernel_workspace/common | |
| #在构建内核的同时清除不必要的.NET, Android NDK, Haskell, CodeQL运行库,清理空间且不阻塞后续步骤运行 | |
| sudo rm -rf /usr/share/dotnet & | |
| sudo rm -rf /usr/local/lib/android & | |
| sudo rm -rf /opt/ghc & | |
| sudo rm -rf /opt/hostedtoolcache/CodeQL & | |
| make -j$(nproc --all) LLVM=1 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- CC="ccache clang" LD=ld.lld HOSTLD=ld.lld O=out KCFLAGS+=-O2 KCFLAGS+=-Wno-error KCFLAGS+=-ferror-limit=0 gki_defconfig Image | |
| echo "内核编译完成!" | |
| echo "ccache状态:" | |
| ccache -s | |
| echo "编译后空间:" | |
| df -h | |
| - name: 应用KPM并修补内核 | |
| run: | | |
| if [[ ${{ github.event.inputs.kpm_enable }} == 'true' && ${{ github.event.inputs.ksu_type }} == "sukisu" ]]; then | |
| echo "正在应用KPM并修补内核..." | |
| cd kernel_workspace/common/out/arch/arm64/boot | |
| curl -LO https://github.com/ShirkNeko/SukiSU_KernelPatch_patch/releases/download/0.12.0/patch_linux | |
| chmod +x patch_linux | |
| ./patch_linux | |
| rm -f Image | |
| mv oImage Image | |
| fi | |
| - name: 克隆 AnyKernel3 并打包 | |
| run: | | |
| cd kernel_workspace | |
| git clone https://github.com/cctv18/AnyKernel3 --depth=1 | |
| rm -rf ./AnyKernel3/.git | |
| cd AnyKernel3 | |
| cp ../common/out/arch/arm64/boot/Image ./Image | |
| if [[ ! -f ./Image ]]; then | |
| echo "未找到内核镜像文件,构建可能出错" | |
| exit 1 | |
| fi | |
| if [[ ${{ github.event.inputs.ksu_type }} == "sukisu" ]]; then | |
| KSU_TYPENAME="SukiSU" | |
| else | |
| KSU_TYPENAME="KSUNext" | |
| fi | |
| if [[ "${{ github.event.inputs.lz4_enable }}" == "2" || "${{ github.event.inputs.lz4_enable }}" == "3" ]]; then | |
| wget https://raw.githubusercontent.com/cctv18/oppo_oplus_realme_sm8650/refs/heads/main/zram.zip | |
| fi | |
| if [[ -n "${{ github.event.inputs.kernel_suffix }}" ]]; then | |
| zip -r ../AnyKernel3_${KSU_TYPENAME}_${{ env.KSUVER }}_${{ env.KERNEL_VERSION }}_A15_${{ github.event.inputs.kernel_suffix }}.zip ./* | |
| else | |
| zip -r ../AnyKernel3_${KSU_TYPENAME}_${{ env.KSUVER }}_${{ env.KERNEL_VERSION }}_A15_${{ env.KERNEL_NAME }}.zip ./* | |
| fi | |
| - name: 上传 ZIP 工件 | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: Kernel_ZIP_Artifacts | |
| path: ${{ github.workspace }}/kernel_workspace/AnyKernel*.zip | |
| release: | |
| needs: build | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: write | |
| packages: write | |
| actions: read | |
| steps: | |
| - name: 下载 ZIP 工件 | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: Kernel_ZIP_Artifacts | |
| path: ./release_zips | |
| - name: 设置环境变量 | |
| run: | | |
| if [[ -n "${{ github.event.inputs.kernel_suffix }}" ]]; then | |
| FULL_VERSION=${{ format('{0}.50-{1}', env.KERNEL_VERSION, github.event.inputs.kernel_suffix) }} | |
| echo "FULL_VERSION=$FULL_VERSION" >> $GITHUB_ENV | |
| export FULL_VERSION=$FULL_VERSION | |
| else | |
| FULL_VERSION=${{ format('{0}.50-{1}', env.KERNEL_VERSION, env.KERNEL_NAME) }} | |
| echo "FULL_VERSION=$FULL_VERSION" >> $GITHUB_ENV | |
| export FULL_VERSION=$FULL_VERSION | |
| fi | |
| TIME="$(TZ='Asia/Shanghai' date +'%y%m%d%H%M%S')" | |
| TIME_FORM="$(TZ='Asia/Shanghai' date +'%Y-%m-%d %H:%M:%S')" | |
| echo "TIME=$TIME" >> $GITHUB_ENV | |
| echo "TIME_FORM=$TIME_FORM" >> $GITHUB_ENV | |
| TAG_HEAD="OPPO+OPlus+Realme-A15-build" | |
| echo "TAG_HEAD=$TAG_HEAD" >> $GITHUB_ENV | |
| if [[ ${{ github.event.inputs.ksu_type }} == "sukisu" ]]; then | |
| KSU_BRANCH="SukiSU Ultra" | |
| else | |
| KSU_BRANCH="KernelSU Next" | |
| fi | |
| echo "KSU_BRANCH=$KSU_BRANCH" >> $GITHUB_ENV | |
| if [[ "${{ github.event.inputs.lz4_enable }}" == "2" || "${{ github.event.inputs.lz4_enable }}" == "3" ]]; then | |
| lz4kd_enable="true" | |
| else | |
| lz4kd_enable="false" | |
| fi | |
| if [[ "${{ github.event.inputs.lz4_enable }}" == "1" || "${{ github.event.inputs.lz4_enable }}" == "3" ]]; then | |
| lz4_zstd_enable="true" | |
| else | |
| lz4_zstd_enable="false" | |
| fi | |
| if [[ "${{ github.event.inputs.ssg_rekernel_enable }}" == "1" || "${{ github.event.inputs.ssg_rekernel_enable }}" == "3" ]]; then | |
| ssg_enable="true" | |
| else | |
| ssg_enable="false" | |
| fi | |
| if [[ "${{ github.event.inputs.ssg_rekernel_enable }}" == "2" || "${{ github.event.inputs.ssg_rekernel_enable }}" == "3" ]]; then | |
| rekernel_enable="true" | |
| else | |
| rekernel_enable="false" | |
| fi | |
| echo "lz4kd_enable=$lz4kd_enable" >> $GITHUB_ENV | |
| echo "lz4_zstd_enable=$lz4_zstd_enable" >> $GITHUB_ENV | |
| echo "ssg_enable=$ssg_enable" >> $GITHUB_ENV | |
| echo "rekernel_enable=$rekernel_enable" >> $GITHUB_ENV | |
| - name: 创建发布 | |
| id: create_release | |
| uses: softprops/action-gh-release@v1 | |
| with: | |
| tag_name: "${{ env.TAG_HEAD }}-${{ env.TIME }}" | |
| name: "${{ env.TAG_HEAD }}-${{ env.FULL_VERSION }}" | |
| body: | | |
| ### 📱 欧加真 Android 15 ${{ env.KSU_BRANCH }} SM8750 通用内核 | 构建信息 | |
| - 内核版本号: ${{ env.FULL_VERSION }} | |
| - 编译时间: ${{ env.TIME_FORM }} | |
| - 机型:欧加真天玑9400+ 6.6.50 Android 15内核通用(基于一加Ace5 Ultra 6.6.50 Android 15 版官方OKI源码) | |
| - 特性:${{ env.KSU_BRANCH }} + SUSFS + KPM | |
| - hook模式:${{ github.event.inputs.hook_method }} | |
| - KPM支持 (仅对sukisu生效):${{ github.event.inputs.kpm_enable }} | |
| - LZ4KD支持:${{ env.lz4kd_enable }} | |
| - LZ4支持:${{ env.lz4_zstd_enable }} | |
| - 网络功能增强:${{ github.event.inputs.better_net }} | |
| - BBR/Brutal 等拥塞控制算法支持:${{ github.event.inputs.bbr_enable }} | |
| - 三星SSG IO调度器支持:${{ env.ssg_enable }} | |
| - Re-Kernel支持:${{ env.rekernel_enable }} | |
| - 内核级基带保护支持:${{ github.event.inputs.baseband_guard }} | |
| - 推荐系统:ColorOS 15 / RealmeUI 6.0 | |
| - SukiSU Ultra管理器下载:[SukiSU-Ultra](https://github.com/SukiSU-Ultra/SukiSU-Ultra/releases) | |
| - KernelSU Next管理器下载:[KernelSU-Next](https://github.com/KernelSU-Next/KernelSU-Next/releases) | |
| ### ⏫️ 更新内容: | |
| - 更新${{ env.KSU_BRANCH }}至最新版本(${{ needs.build.outputs.ksuver }}) | |
| - (预留) | |
| ### 📋 安装方法 | Installation Guide | |
| 1. 若你的手机已经安装了第三方Recovery(如TWRP),可下载对应机型的AnyKernel刷机包后进入Recovery模式,通过Recovery刷入刷机包后重启设备 | |
| 2. 若你的手机之前已有 root 权限,可在手机上安装[HorizonKernelFlasher](https://github.com/libxzr/HorizonKernelFlasher/releases),在HorizonKernelFlasher中刷入AnyKernel刷机包并重启 | |
| 3. 若你之前已刷入SukiSU Ultra内核,且SukiSU Ultra管理器已更新至最新版本,可在SukiSU Ultra管理器中直接刷入AnyKernel刷机包并重启 | |
| 4. 刷入无lz4kd补丁版的内核前若刷入过lz4kd补丁版的内核,为避免出错,请先关闭zram模块 | |
| #### ※※※刷写内核有风险,为防止出现意外导致手机变砖,在刷入内核前请务必用[KernelFlasher](https://github.com/capntrips/KernelFlasher)等软件备份boot等关键启动分区!※※※ | |
| draft: false | |
| prerelease: false | |
| files: | | |
| release_zips/AnyKernel3_*.zip |