From ce913a85e69ff5b18312acef328b70ee195d737e Mon Sep 17 00:00:00 2001 From: Kitty Cat Date: Thu, 27 Nov 2025 14:08:33 -0500 Subject: [PATCH] potato --- README.md | 6 + anykernel.sh | 63 +------- build.sh | 438 +++++++++++++++++++++++++++++++++++++++------------ default.xml | 5 + 4 files changed, 350 insertions(+), 162 deletions(-) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..8dd2c8e --- /dev/null +++ b/README.md @@ -0,0 +1,6 @@ + + +# Sources + - + - [AnyKernel3](https://github.com/osm0sis/AnyKernel3) + - [magiskboot]( diff --git a/anykernel.sh b/anykernel.sh index 2cc2235..152b91d 100755 --- a/anykernel.sh +++ b/anykernel.sh @@ -4,7 +4,7 @@ ### AnyKernel setup # global properties properties() { ' -kernel.string=LiteKernel for OnePlus SM8750 +kernel.string=Modified LineageOS Kernel for OnePlus 13 do.devicecheck=0 do.modules=0 do.systemless=0 @@ -41,64 +41,3 @@ else flash_boot fi ## end boot install - - -## init_boot files attributes -#init_boot_attributes() { -#set_perm_recursive 0 0 755 644 $RAMDISK/*; -#set_perm_recursive 0 0 750 750 $RAMDISK/init* $RAMDISK/sbin; -#} # end attributes - -# init_boot shell variables -#BLOCK=init_boot; -#IS_SLOT_DEVICE=1; -#RAMDISK_COMPRESSION=auto; -#PATCH_VBMETA_FLAG=auto; - -# reset for init_boot patching -#reset_ak; - -# init_boot install -#dump_boot; # unpack ramdisk since it is the new first stage init ramdisk where overlay.d must go - -#write_boot; -## end init_boot install - - -## vendor_kernel_boot shell variables -#BLOCK=vendor_kernel_boot; -#IS_SLOT_DEVICE=1; -#RAMDISK_COMPRESSION=auto; -#PATCH_VBMETA_FLAG=auto; - -# reset for vendor_kernel_boot patching -#reset_ak; - -# vendor_kernel_boot install -#split_boot; # skip unpack/repack ramdisk, e.g. for dtb on devices with hdr v4 and vendor_kernel_boot - -#flash_boot; -## end vendor_kernel_boot install - - -## vendor_boot files attributes -#vendor_boot_attributes() { -#set_perm_recursive 0 0 755 644 $RAMDISK/*; -#set_perm_recursive 0 0 750 750 $RAMDISK/init* $RAMDISK/sbin; -#} # end attributes - -# vendor_boot shell variables -#BLOCK=vendor_boot; -#IS_SLOT_DEVICE=1; -#RAMDISK_COMPRESSION=auto; -#PATCH_VBMETA_FLAG=auto; - -# reset for vendor_boot patching -#reset_ak; - -# vendor_boot install -#dump_boot; # use split_boot to skip ramdisk unpack, e.g. for dtb on devices with hdr v4 but no vendor_kernel_boot - -#write_boot; # use flash_boot to skip ramdisk repack, e.g. for dtb on devices with hdr v4 but no vendor_kernel_boot -## end vendor_boot install - diff --git a/build.sh b/build.sh index 4422c97..b1c4104 100755 --- a/build.sh +++ b/build.sh @@ -1,124 +1,362 @@ #!/usr/bin/env bash -# Set $BASEDIR and use it to ensure we're in the correct directory. -BASEDIR=$(realpath "$(dirname -- "$(realpath -- "${BASH_SOURCE[0]}")")/..") +usage() { + cat << EOF +Usage: $(basename "$0") [COMMAND] + +Commands: + build Build the kernel (default) + menuconfig Run menuconfig and save customizations + repack Repack stock boot image with custom kernel + download Download latest LineageOS boot image + help Show this help message + +Examples: + $(basename "$0") # Build the kernel + $(basename "$0") build # Build the kernel + $(basename "$0") menuconfig # Configure kernel interactively + $(basename "$0") repack # Repack stock_boot.img with new kernel (auto-downloads if missing) + $(basename "$0") download # Download latest LineageOS boot.img for dodge +EOF + exit 0 +} + +set_basedir() { + BASEDIR=$(realpath "$(dirname -- "$(realpath -- "${BASH_SOURCE[0]}")")/..") +} + +ensure_repo_initialized() { + if [ ! -d "$BASEDIR/.repo" ]; then + echo ".dir missing, initializing..." + pushd "$BASEDIR" > /dev/null + repo init -u "$BASEDIR/meta" --git-lfs + repo sync + popd > /dev/null + fi +} + +download_magisk() { + if [ ! -d "$BASEDIR/prebuilts/magisk" ]; then + echo "Magisk binaries missing, downloading..." + mkdir -p "$BASEDIR/prebuilts/magisk" + pushd "$BASEDIR/prebuilts/magisk" > /dev/null + wget "https://github.com/topjohnwu/Magisk/releases/download/v29.0/Magisk-v29.0.apk" || curl -OL "https://github.com/topjohnwu/Magisk/releases/download/v29.0/Magisk-v29.0.apk" + unzip "Magisk-v29.0.apk" + popd > /dev/null + fi +} + +setup_toolchain_vars() { + GCCDIR="$BASEDIR/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9" + GCCDIR32="$BASEDIR/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9" + CLANGDIR="$BASEDIR/prebuilts/clang/host/linux-x86/clang-r547379" + KERNELBUILDTOOLS="$BASEDIR/prebuilts/kernel-build-tools/linux-x86" + + MAKEOPTS=( + O="$BASEDIR/work" + ARCH=arm64 + PATH="$CLANGDIR/bin:$GCCDIR/bin:$KERNELBUILDTOOLS/bin:$PATH" + LD_LIBRARY_PATH="$CLANGDIR/lib" + LLVM=1 + CROSS_COMPILE="$GCCDIR/bin/aarch64-linux-android-" + CROSS_COMPILE_ARM32="$GCCDIR32/bin/arm-linux-androideabi-" + CLANG_TRIPLE=aarch64-linux-gnu- + ) +} + +prepare_kernel_source() { + echo "Preparing source..." + pushd "$BASEDIR/kernel/oneplus/sm8750" > /dev/null + + git reset --hard + git clean -fd + ln -s "${BASEDIR}/external/SukiSU-Ultra" "KernelSU" + ln -s "${BASEDIR}/external/SukiSU-Ultra/kernel" "drivers/kernelsu" -# Ensure that .repo is present in $BASEDIR. -# This code probably won't ever fire unless you're doing something weird. -if [ ! -d "$BASEDIR/.repo" ]; then - echo ".dir missing, initializing..." - pushd "$BASEDIR" > /dev/null - repo init -u "$BASEDIR/repo" --git-lfs - repo sync popd > /dev/null -fi +} + +add_sukisu() { + pushd "$BASEDIR/kernel/oneplus/sm8750" > /dev/null + + MOD=false + grep -q "kernelsu" "drivers/Makefile" || printf "\nobj-\$(CONFIG_KSU) += kernelsu/\n" >> "drivers/Makefile" || echo "[+] Modified Makefile." + grep -q "source \"drivers/kernelsu/Kconfig\"" "drivers/Kconfig" || sed -i "/endmenu/i\source \"drivers/kernelsu/Kconfig\"" "drivers/Kconfig" && echo "[+] Modified Kconfig." -# Download latest magisk and extract it. -# TODO: Put extracted Magisk in a repo so that it can be handled by repo. -if [ ! -d "$BASEDIR/prebuilts/magisk" ]; then - echo "Magisk binaries missing, downloading..." - mkdir -p "$BASEDIR/prebuilts/magisk" - pushd "$BASEDIR/prebuilts/magisk" > /dev/null - wget "https://github.com/topjohnwu/Magisk/releases/download/v29.0/Magisk-v29.0.apk" || curl -OL "https://github.com/topjohnwu/Magisk/releases/download/v29.0/Magisk-v29.0.apk" - unzip "Magisk-v29.0.apk" popd > /dev/null -fi +} -# Set some variables for well-known directories. -GCCDIR="$BASEDIR/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9" -GCCDIR32="$BASEDIR/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9" -CLANGDIR="$BASEDIR/prebuilts/clang/host/linux-x86/clang-r547379" -KERNELBUILDTOOLS="$BASEDIR/prebuilts/kernel-build-tools/linux-x86" +add_susfs() { + pushd "$BASEDIR/kernel/oneplus/sm8750" > /dev/null -# Define common options used with make -MAKEOPTS=( - O="$BASEDIR/work" - ARCH=arm64 - PATH="$CLANGDIR/bin:$GCCDIR/bin:$KERNELBUILDTOOLS/bin:$PATH" - LD_LIBRARY_PATH="$CLANGDIR/lib" - LLVM=1 - CROSS_COMPILE="$GCCDIR/bin/aarch64-linux-android-" - CROSS_COMPILE_ARM32="$GCCDIR32/bin/arm-linux-androideabi-" - CLANG_TRIPLE=aarch64-linux-gnu- -) + cp "${BASEDIR}/external/susfs4ksu/kernel_patches/fs/"* "fs/" + cp "${BASEDIR}/external/susfs4ksu/kernel_patches/include/linux/"* "include/linux/" + patch --fuzz=3 -p1 < "${BASEDIR}/external/susfs4ksu/kernel_patches/50_add_susfs_in_gki-android15-6.6.patch" -echo Preparing source... -pushd "$BASEDIR/kernel/oneplus/sm8750" > /dev/null + popd > /dev/null +} -# Reset everything -git reset --hard -git clean -fd -ln -s "${BASEDIR}/external/SukiSU-Ultra" "KernelSU" -ln -s "${BASEDIR}/external/SukiSU-Ultra/kernel" "drivers/kernelsu" +configure_kernel() { + pushd "$BASEDIR/kernel/oneplus/sm8750" > /dev/null -# Add SukiSU -MOD=false -grep -q "kernelsu" "drivers/Makefile" || printf "\nobj-\$(CONFIG_KSU) += kernelsu/\n" >> "drivers/Makefile" || echo "[+] Modified Makefile." -grep -q "source \"drivers/kernelsu/Kconfig\"" "drivers/Kconfig" || sed -i "/endmenu/i\source \"drivers/kernelsu/Kconfig\"" "drivers/Kconfig" && echo "[+] Modified Kconfig." + mkdir -p "$BASEDIR/out" + mkdir -p "$BASEDIR/work" -# Add SUSFS -cp "${BASEDIR}/external/susfs4ksu/kernel_patches/fs/"* "fs/" -cp "${BASEDIR}/external/susfs4ksu/kernel_patches/include/linux/"* "include/linux/" -patch --fuzz=3 -p1 < "${BASEDIR}/external/susfs4ksu/kernel_patches/50_add_susfs_in_gki-android15-6.6.patch" + make ${MAKEOPTS[@]} mrproper + make ${MAKEOPTS[@]} gki_defconfig -mkdir -p "$BASEDIR/out" -mkdir -p "$BASEDIR/work" -# Ensure things are clean? -make ${MAKEOPTS[@]} mrproper -# Start with the GKI base configuration -make ${MAKEOPTS[@]} gki_defconfig -# Merge configurations that are specific to the device -scripts/kconfig/merge_config.sh -m -O "$BASEDIR/work" \ - "$BASEDIR/work/.config" \ - arch/arm64/configs/vendor/sun_perf.config \ - arch/arm64/configs/vendor/oplus/sun_perf.config + scripts/kconfig/merge_config.sh -m -O "$BASEDIR/work" \ + "$BASEDIR/work/.config" \ + arch/arm64/configs/vendor/sun_perf.config \ + arch/arm64/configs/vendor/oplus/sun_perf.config -if [ -e "${BASEDIR}/.config" ]; then - echo Adding custom configuration... - scripts/kconfig/merge_config.sh -m -O "${BASEDIR}/work" \ - "${BASEDIR}/work/.config" \ - "${BASEDIR}/.config" -fi + if [ -e "${BASEDIR}/.config" ]; then + echo "Adding custom configuration..." + scripts/kconfig/merge_config.sh -m -O "${BASEDIR}/work" \ + "${BASEDIR}/work/.config" \ + "${BASEDIR}/.config" + fi -# Add in things that are missing from the above config templates -echo "CONFIG_DODGE_DTB=y" >> "$BASEDIR/work/.config" -echo "CONFIG_OPLUS_DEVICE_DTBS=y" >> "$BASEDIR/work/.config" -echo "CONFIG_COMPAT=y" >> "$BASEDIR/work/.config" -echo "CONFIG_COMPAT_VDSO=y" >> "$BASEDIR/work/.config" + echo "CONFIG_DODGE_DTB=y" >> "$BASEDIR/work/.config" + echo "CONFIG_OPLUS_DEVICE_DTBS=y" >> "$BASEDIR/work/.config" + echo "CONFIG_COMPAT=y" >> "$BASEDIR/work/.config" + echo "CONFIG_COMPAT_VDSO=y" >> "$BASEDIR/work/.config" -# Re-process the configuration and accept defaults for unknowns. -make ${MAKEOPTS[@]} olddefconfig + make ${MAKEOPTS[@]} olddefconfig -# Compile the kernel -make ${MAKEOPTS[@]} \ - KCFLAGS="-Wno-error=frame-larger-than=" \ - -j$(nproc) 2>&1 | tee "$BASEDIR/work/build.log" -popd > /dev/null + popd > /dev/null +} -# Prepare AnyKernel3 with our customizations -echo "Preparing AnyKernel3 package..." -rm -rf "${BASEDIR}/work/AnyKernel3" -mkdir -p "${BASEDIR}/work/AnyKernel3" -cp -ra "${BASEDIR}/external/AnyKernel3/"* "${BASEDIR}/work/AnyKernel3/" -cp "${BASEDIR}/repo/anykernel.sh" "${BASEDIR}/work/AnyKernel3/anykernel.sh" -cp "${BASEDIR}/prebuilts/magisk/lib/arm64-v8a/libbusybox.so" "${BASEDIR}/work/AnyKernel3/tools/busybox" -cp "${BASEDIR}/prebuilts/magisk/lib/arm64-v8a/libmagiskboot.so" "${BASEDIR}/work/AnyKernel3/tools/magiskboot" -chmod +x "${BASEDIR}/work/AnyKernel3/tools/"* +build_kernel() { + pushd "$BASEDIR/kernel/oneplus/sm8750" > /dev/null -# Copy kernel Image -echo "Copying kernel Image..." -cp "${BASEDIR}/work/arch/arm64/boot/Image" "${BASEDIR}/work/AnyKernel3/" + make ${MAKEOPTS[@]} \ + KCFLAGS="-Wno-error=frame-larger-than=" \ + -j$(nproc) 2>&1 | tee "$BASEDIR/work/build.log" -# Create flashable zip -echo "Creating flashable zip..." -KERNEL_VERSION=$(cat "${BASEDIR}/kernel/oneplus/sm8750/include/config/kernel.release" 2>/dev/null || echo "unknown") -OUTPUT_ZIP="${BASEDIR}/out/LiteKernel-${KERNEL_VERSION}-$(date +%Y%m%d-%H%M%S).zip" + popd > /dev/null +} -pushd "${BASEDIR}/work/AnyKernel3" > /dev/null -zip -r9 "${OUTPUT_ZIP}" * -x .git README.md .gitignore ./*.zip -popd > /dev/null +prepare_anykernel() { + echo "Preparing AnyKernel3 package..." + rm -rf "${BASEDIR}/work/AnyKernel3" + mkdir -p "${BASEDIR}/work/AnyKernel3" + cp -ra "${BASEDIR}/external/AnyKernel3/"* "${BASEDIR}/work/AnyKernel3/" + cp "${BASEDIR}/meta/anykernel.sh" "${BASEDIR}/work/AnyKernel3/anykernel.sh" + cp "${BASEDIR}/prebuilts/magisk/lib/arm64-v8a/libbusybox.so" "${BASEDIR}/work/AnyKernel3/tools/busybox" + cp "${BASEDIR}/prebuilts/magisk/lib/arm64-v8a/libmagiskboot.so" "${BASEDIR}/work/AnyKernel3/tools/magiskboot" + chmod +x "${BASEDIR}/work/AnyKernel3/tools/"* -echo "Build complete!" -echo "Flashable zip: ${OUTPUT_ZIP}" + echo "Copying kernel Image..." + cp "${BASEDIR}/work/arch/arm64/boot/Image" "${BASEDIR}/work/AnyKernel3/" +} + +create_flashable_zip() { + echo "Creating flashable zip..." + KERNEL_VERSION=$(cat "${BASEDIR}/kernel/oneplus/sm8750/include/config/kernel.release" 2>/dev/null || echo "unknown") + OUTPUT_ZIP="${BASEDIR}/out/LiteKernel-${KERNEL_VERSION}-$(date +%Y%m%d-%H%M%S).zip" + + pushd "${BASEDIR}/work/AnyKernel3" > /dev/null + zip -r9 "${OUTPUT_ZIP}" * -x .git README.md .gitignore ./*.zip + popd > /dev/null + + echo "Build complete!" + echo "Flashable zip: ${OUTPUT_ZIP}" +} + +run_menuconfig() { + set_basedir + setup_toolchain_vars + + mkdir -p "$BASEDIR/out" + mkdir -p "$BASEDIR/work" + + pushd "$BASEDIR/kernel/oneplus/sm8750" > /dev/null + + echo "Generating base configuration..." + make ${MAKEOPTS[@]} mrproper + make ${MAKEOPTS[@]} gki_defconfig + + scripts/kconfig/merge_config.sh -m -O "$BASEDIR/work" \ + "$BASEDIR/work/.config" \ + arch/arm64/configs/vendor/sun_perf.config \ + arch/arm64/configs/vendor/oplus/sun_perf.config + + make ${MAKEOPTS[@]} olddefconfig + cp "$BASEDIR/work/.config" "$BASEDIR/work/.config.base" + + if [ -e "${BASEDIR}/.config" ]; then + echo "Merging existing custom configuration..." + scripts/kconfig/merge_config.sh -m -O "${BASEDIR}/work" \ + "${BASEDIR}/work/.config" \ + "${BASEDIR}/.config" + make ${MAKEOPTS[@]} olddefconfig + fi + + make ${MAKEOPTS[@]} menuconfig + + extract_custom_config + + popd > /dev/null +} + +extract_custom_config() { + echo "Extracting custom configuration differences..." + + if [ ! -f "$BASEDIR/work/.config.base" ]; then + echo "Warning: No base config found for comparison" + return + fi + + > "$BASEDIR/.config" + + declare -A base_configs + declare -A current_configs + + while IFS= read -r line; do + if [[ "$line" =~ ^CONFIG_([^=]+)= ]]; then + config_name="${BASH_REMATCH[1]}" + base_configs["$config_name"]="$line" + elif [[ "$line" =~ ^#\ (CONFIG_[^\ ]+)\ is\ not\ set ]]; then + config_name="${BASH_REMATCH[1]#CONFIG_}" + base_configs["$config_name"]="$line" + fi + done < "$BASEDIR/work/.config.base" + + while IFS= read -r line; do + if [[ "$line" =~ ^CONFIG_([^=]+)= ]]; then + config_name="${BASH_REMATCH[1]}" + current_configs["$config_name"]="$line" + elif [[ "$line" =~ ^#\ (CONFIG_[^\ ]+)\ is\ not\ set ]]; then + config_name="${BASH_REMATCH[1]#CONFIG_}" + current_configs["$config_name"]="$line" + fi + done < "$BASEDIR/work/.config" + + for config_name in "${!current_configs[@]}"; do + if [[ "${base_configs[$config_name]}" != "${current_configs[$config_name]}" ]]; then + echo "${current_configs[$config_name]}" >> "$BASEDIR/.config" + fi + done + + if [ -s "$BASEDIR/.config" ]; then + sort -o "$BASEDIR/.config" "$BASEDIR/.config" + echo "" + echo "Custom configuration saved to: $BASEDIR/.config" + echo "Changes from base configuration:" + cat "$BASEDIR/.config" + echo "" + else + echo "No configuration changes from base detected." + rm -f "$BASEDIR/.config" + fi +} + +download_lineageos_boot() { + set_basedir + + echo "Fetching latest LineageOS build information for dodge..." + + if ! command -v python3 &> /dev/null; then + echo "Error: python3 is required but not found" + return 1 + fi + + BOOT_URL=$(curl -s "https://download.lineageos.org/api/v2/devices/dodge/builds" | python3 -c 'import sys,json;d=json.load(sys.stdin);boot=[f for f in d[0]["files"] if f["filename"]=="boot.img"][0];print(boot["url"])' 2>/dev/null) + + if [ -z "$BOOT_URL" ]; then + echo "Error: Failed to fetch boot.img URL from LineageOS API" + return 1 + fi + + echo "Found boot.img URL: $BOOT_URL" + echo "Downloading boot.img..." + + wget -O "${BASEDIR}/stock_boot.img" "$BOOT_URL" || curl -L -o "${BASEDIR}/stock_boot.img" "$BOOT_URL" + + if [ ! -f "${BASEDIR}/stock_boot.img" ]; then + echo "Error: Failed to download boot.img" + return 1 + fi + + echo "Boot image saved to: ${BASEDIR}/stock_boot.img" +} + +repack_boot_image() { + set_basedir + download_magisk + + if [ ! -f "${BASEDIR}/stock_boot.img" ]; then + echo "stock_boot.img not found, attempting to download from LineageOS..." + download_lineageos_boot || return 1 + fi + + if [ ! -f "${BASEDIR}/work/arch/arm64/boot/Image" ]; then + echo "Error: Kernel Image not found at ${BASEDIR}/work/arch/arm64/boot/Image" + echo "Please build the kernel first using: $(basename "$0") build" + return 1 + fi + + MAGISKBOOT="${BASEDIR}/prebuilts/magisk/lib/x86_64/libmagiskboot.so" + chmod +x "${MAGISKBOOT}" + + echo "Repacking boot image..." + rm -rf "${BASEDIR}/out/repack" + mkdir -p "${BASEDIR}/out/repack" + pushd "${BASEDIR}/out/repack" > /dev/null + + ${MAGISKBOOT} unpack "${BASEDIR}/stock_boot.img" + cp "${BASEDIR}/work/arch/arm64/boot/Image" kernel + ${MAGISKBOOT} repack "${BASEDIR}/stock_boot.img" "${BASEDIR}/out/new_boot.img" + + popd > /dev/null + + echo "" + echo "Boot image repacked successfully!" + echo "Output: ${BASEDIR}/out/new_boot.img" +} + +build() { + set_basedir + ensure_repo_initialized + download_magisk + setup_toolchain_vars + prepare_kernel_source + add_sukisu + add_susfs + configure_kernel + build_kernel + prepare_anykernel + create_flashable_zip +} + +main() { + local command="${1:-build}" + + case "$command" in + build) + build + ;; + menuconfig) + run_menuconfig + ;; + repack) + repack_boot_image + ;; + download) + download_lineageos_boot + ;; + help|--help|-h) + usage + ;; + *) + echo "Error: Unknown command '$command'" + echo "" + usage + ;; + esac +} + +main "$@" diff --git a/default.xml b/default.xml index f47329c..1820d35 100644 --- a/default.xml +++ b/default.xml @@ -3,9 +3,13 @@ + + + + @@ -19,6 +23,7 @@ +