This commit is contained in:
2025-11-27 14:08:33 -05:00
parent 29d4643e59
commit ce913a85e6
4 changed files with 350 additions and 162 deletions

6
README.md Normal file
View File

@@ -0,0 +1,6 @@
# Sources
-
- [AnyKernel3](https://github.com/osm0sis/AnyKernel3)
- [magiskboot](

View File

@@ -4,7 +4,7 @@
### AnyKernel setup ### AnyKernel setup
# global properties # global properties
properties() { ' properties() { '
kernel.string=LiteKernel for OnePlus SM8750 kernel.string=Modified LineageOS Kernel for OnePlus 13
do.devicecheck=0 do.devicecheck=0
do.modules=0 do.modules=0
do.systemless=0 do.systemless=0
@@ -41,64 +41,3 @@ else
flash_boot flash_boot
fi fi
## end boot install ## 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

288
build.sh
View File

@@ -1,20 +1,41 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# Set $BASEDIR and use it to ensure we're in the correct directory. usage() {
BASEDIR=$(realpath "$(dirname -- "$(realpath -- "${BASH_SOURCE[0]}")")/..") cat << EOF
Usage: $(basename "$0") [COMMAND]
# Ensure that .repo is present in $BASEDIR. Commands:
# This code probably won't ever fire unless you're doing something weird. 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 if [ ! -d "$BASEDIR/.repo" ]; then
echo ".dir missing, initializing..." echo ".dir missing, initializing..."
pushd "$BASEDIR" > /dev/null pushd "$BASEDIR" > /dev/null
repo init -u "$BASEDIR/repo" --git-lfs repo init -u "$BASEDIR/meta" --git-lfs
repo sync repo sync
popd > /dev/null popd > /dev/null
fi fi
}
# Download latest magisk and extract it. download_magisk() {
# TODO: Put extracted Magisk in a repo so that it can be handled by repo.
if [ ! -d "$BASEDIR/prebuilts/magisk" ]; then if [ ! -d "$BASEDIR/prebuilts/magisk" ]; then
echo "Magisk binaries missing, downloading..." echo "Magisk binaries missing, downloading..."
mkdir -p "$BASEDIR/prebuilts/magisk" mkdir -p "$BASEDIR/prebuilts/magisk"
@@ -23,14 +44,14 @@ if [ ! -d "$BASEDIR/prebuilts/magisk" ]; then
unzip "Magisk-v29.0.apk" unzip "Magisk-v29.0.apk"
popd > /dev/null popd > /dev/null
fi fi
}
# Set some variables for well-known directories. setup_toolchain_vars() {
GCCDIR="$BASEDIR/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9" GCCDIR="$BASEDIR/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9"
GCCDIR32="$BASEDIR/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9" GCCDIR32="$BASEDIR/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9"
CLANGDIR="$BASEDIR/prebuilts/clang/host/linux-x86/clang-r547379" CLANGDIR="$BASEDIR/prebuilts/clang/host/linux-x86/clang-r547379"
KERNELBUILDTOOLS="$BASEDIR/prebuilts/kernel-build-tools/linux-x86" KERNELBUILDTOOLS="$BASEDIR/prebuilts/kernel-build-tools/linux-x86"
# Define common options used with make
MAKEOPTS=( MAKEOPTS=(
O="$BASEDIR/work" O="$BASEDIR/work"
ARCH=arm64 ARCH=arm64
@@ -41,75 +62,96 @@ MAKEOPTS=(
CROSS_COMPILE_ARM32="$GCCDIR32/bin/arm-linux-androideabi-" CROSS_COMPILE_ARM32="$GCCDIR32/bin/arm-linux-androideabi-"
CLANG_TRIPLE=aarch64-linux-gnu- CLANG_TRIPLE=aarch64-linux-gnu-
) )
}
echo Preparing source... prepare_kernel_source() {
echo "Preparing source..."
pushd "$BASEDIR/kernel/oneplus/sm8750" > /dev/null pushd "$BASEDIR/kernel/oneplus/sm8750" > /dev/null
# Reset everything
git reset --hard git reset --hard
git clean -fd git clean -fd
ln -s "${BASEDIR}/external/SukiSU-Ultra" "KernelSU" ln -s "${BASEDIR}/external/SukiSU-Ultra" "KernelSU"
ln -s "${BASEDIR}/external/SukiSU-Ultra/kernel" "drivers/kernelsu" ln -s "${BASEDIR}/external/SukiSU-Ultra/kernel" "drivers/kernelsu"
# Add SukiSU popd > /dev/null
}
add_sukisu() {
pushd "$BASEDIR/kernel/oneplus/sm8750" > /dev/null
MOD=false MOD=false
grep -q "kernelsu" "drivers/Makefile" || printf "\nobj-\$(CONFIG_KSU) += kernelsu/\n" >> "drivers/Makefile" || echo "[+] Modified Makefile." 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." grep -q "source \"drivers/kernelsu/Kconfig\"" "drivers/Kconfig" || sed -i "/endmenu/i\source \"drivers/kernelsu/Kconfig\"" "drivers/Kconfig" && echo "[+] Modified Kconfig."
# Add SUSFS popd > /dev/null
}
add_susfs() {
pushd "$BASEDIR/kernel/oneplus/sm8750" > /dev/null
cp "${BASEDIR}/external/susfs4ksu/kernel_patches/fs/"* "fs/" cp "${BASEDIR}/external/susfs4ksu/kernel_patches/fs/"* "fs/"
cp "${BASEDIR}/external/susfs4ksu/kernel_patches/include/linux/"* "include/linux/" 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" patch --fuzz=3 -p1 < "${BASEDIR}/external/susfs4ksu/kernel_patches/50_add_susfs_in_gki-android15-6.6.patch"
popd > /dev/null
}
configure_kernel() {
pushd "$BASEDIR/kernel/oneplus/sm8750" > /dev/null
mkdir -p "$BASEDIR/out" mkdir -p "$BASEDIR/out"
mkdir -p "$BASEDIR/work" mkdir -p "$BASEDIR/work"
# Ensure things are clean?
make ${MAKEOPTS[@]} mrproper make ${MAKEOPTS[@]} mrproper
# Start with the GKI base configuration
make ${MAKEOPTS[@]} gki_defconfig make ${MAKEOPTS[@]} gki_defconfig
# Merge configurations that are specific to the device
scripts/kconfig/merge_config.sh -m -O "$BASEDIR/work" \ scripts/kconfig/merge_config.sh -m -O "$BASEDIR/work" \
"$BASEDIR/work/.config" \ "$BASEDIR/work/.config" \
arch/arm64/configs/vendor/sun_perf.config \ arch/arm64/configs/vendor/sun_perf.config \
arch/arm64/configs/vendor/oplus/sun_perf.config arch/arm64/configs/vendor/oplus/sun_perf.config
if [ -e "${BASEDIR}/.config" ]; then if [ -e "${BASEDIR}/.config" ]; then
echo Adding custom configuration... echo "Adding custom configuration..."
scripts/kconfig/merge_config.sh -m -O "${BASEDIR}/work" \ scripts/kconfig/merge_config.sh -m -O "${BASEDIR}/work" \
"${BASEDIR}/work/.config" \ "${BASEDIR}/work/.config" \
"${BASEDIR}/.config" "${BASEDIR}/.config"
fi fi
# Add in things that are missing from the above config templates
echo "CONFIG_DODGE_DTB=y" >> "$BASEDIR/work/.config" echo "CONFIG_DODGE_DTB=y" >> "$BASEDIR/work/.config"
echo "CONFIG_OPLUS_DEVICE_DTBS=y" >> "$BASEDIR/work/.config" echo "CONFIG_OPLUS_DEVICE_DTBS=y" >> "$BASEDIR/work/.config"
echo "CONFIG_COMPAT=y" >> "$BASEDIR/work/.config" echo "CONFIG_COMPAT=y" >> "$BASEDIR/work/.config"
echo "CONFIG_COMPAT_VDSO=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 popd > /dev/null
}
build_kernel() {
pushd "$BASEDIR/kernel/oneplus/sm8750" > /dev/null
make ${MAKEOPTS[@]} \ make ${MAKEOPTS[@]} \
KCFLAGS="-Wno-error=frame-larger-than=" \ KCFLAGS="-Wno-error=frame-larger-than=" \
-j$(nproc) 2>&1 | tee "$BASEDIR/work/build.log" -j$(nproc) 2>&1 | tee "$BASEDIR/work/build.log"
popd > /dev/null
# Prepare AnyKernel3 with our customizations popd > /dev/null
}
prepare_anykernel() {
echo "Preparing AnyKernel3 package..." echo "Preparing AnyKernel3 package..."
rm -rf "${BASEDIR}/work/AnyKernel3" rm -rf "${BASEDIR}/work/AnyKernel3"
mkdir -p "${BASEDIR}/work/AnyKernel3" mkdir -p "${BASEDIR}/work/AnyKernel3"
cp -ra "${BASEDIR}/external/AnyKernel3/"* "${BASEDIR}/work/AnyKernel3/" cp -ra "${BASEDIR}/external/AnyKernel3/"* "${BASEDIR}/work/AnyKernel3/"
cp "${BASEDIR}/repo/anykernel.sh" "${BASEDIR}/work/AnyKernel3/anykernel.sh" 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/libbusybox.so" "${BASEDIR}/work/AnyKernel3/tools/busybox"
cp "${BASEDIR}/prebuilts/magisk/lib/arm64-v8a/libmagiskboot.so" "${BASEDIR}/work/AnyKernel3/tools/magiskboot" cp "${BASEDIR}/prebuilts/magisk/lib/arm64-v8a/libmagiskboot.so" "${BASEDIR}/work/AnyKernel3/tools/magiskboot"
chmod +x "${BASEDIR}/work/AnyKernel3/tools/"* chmod +x "${BASEDIR}/work/AnyKernel3/tools/"*
# Copy kernel Image
echo "Copying kernel Image..." echo "Copying kernel Image..."
cp "${BASEDIR}/work/arch/arm64/boot/Image" "${BASEDIR}/work/AnyKernel3/" cp "${BASEDIR}/work/arch/arm64/boot/Image" "${BASEDIR}/work/AnyKernel3/"
}
# Create flashable zip create_flashable_zip() {
echo "Creating flashable zip..." echo "Creating flashable zip..."
KERNEL_VERSION=$(cat "${BASEDIR}/kernel/oneplus/sm8750/include/config/kernel.release" 2>/dev/null || echo "unknown") 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" OUTPUT_ZIP="${BASEDIR}/out/LiteKernel-${KERNEL_VERSION}-$(date +%Y%m%d-%H%M%S).zip"
@@ -120,5 +162,201 @@ popd > /dev/null
echo "Build complete!" echo "Build complete!"
echo "Flashable zip: ${OUTPUT_ZIP}" 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 "$@"

View File

@@ -3,9 +3,13 @@
<remote name="github" fetch="https://github.com" review="review.lineageos.org" /> <remote name="github" fetch="https://github.com" review="review.lineageos.org" />
<remote name="gitlab" fetch="https://gitlab.com" /> <remote name="gitlab" fetch="https://gitlab.com" />
<remote name="i5" fetch="https://git.i5.wtf" />
<remote name="aosp" fetch="https://android.googlesource.com" review="android-review.googlesource.com" revision="refs/tags/android-16.0.0_r1" /> <remote name="aosp" fetch="https://android.googlesource.com" review="android-review.googlesource.com" revision="refs/tags/android-16.0.0_r1" />
<default revision="refs/heads/lineage-23.0" remote="github" sync-c="true" sync-j="4" /> <default revision="refs/heads/lineage-23.0" remote="github" sync-c="true" sync-j="4" />
<project path="meta" name="KiTTYsh/los-dodge-kernel-sukisu-susfs" remote="i5" revision="master" >
<linkfile src="build.sh" name="build.sh" />
</project>
<project path="prebuilts/clang/host/linux-x86/clang-r547379" name="KiTTYsh/clang-r547379" clone-depth="1" revision="main" /> <project path="prebuilts/clang/host/linux-x86/clang-r547379" name="KiTTYsh/clang-r547379" clone-depth="1" revision="main" />
<project path="prebuilts/kernel-build-tools" name="kernel/prebuilts/build-tools" clone-depth="1" remote="aosp" revision="main-kernel-build-2024" /> <project path="prebuilts/kernel-build-tools" name="kernel/prebuilts/build-tools" clone-depth="1" remote="aosp" revision="main-kernel-build-2024" />
<project path="prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9" name="LineageOS/android_prebuilts_gcc_linux-x86_aarch64_aarch64-linux-android-4.9" clone-depth="1" revision="lineage-19.1" /> <project path="prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9" name="LineageOS/android_prebuilts_gcc_linux-x86_aarch64_aarch64-linux-android-4.9" clone-depth="1" revision="lineage-19.1" />
@@ -19,6 +23,7 @@
<linkfile src="bindings" dest="kernel/oneplus/sm8750/Documentation/devicetree/bindings" /> <linkfile src="bindings" dest="kernel/oneplus/sm8750/Documentation/devicetree/bindings" />
</project> </project>
<project path="external/AnyKernel3" name="osm0sis/AnyKernel3" clone-depth="1" revision="master" /> <project path="external/AnyKernel3" name="osm0sis/AnyKernel3" clone-depth="1" revision="master" />
<project path="external/magisk" name="KiTTYsh/magisk-unpacked" clone-depth="1" revision="main" />
<project path="external/SukiSU-Ultra" name="SukiSU-Ultra/SukiSU-Ultra" clone-depth="1" revision="susfs-main" > <project path="external/SukiSU-Ultra" name="SukiSU-Ultra/SukiSU-Ultra" clone-depth="1" revision="susfs-main" >
<linkfile src="." dest="kernel/oneplus/sm8750/KernelSU" /> <linkfile src="." dest="kernel/oneplus/sm8750/KernelSU" />
<linkfile src="kernel" dest="kernel/oneplus/sm8750/drivers/kernelsu" /> <linkfile src="kernel" dest="kernel/oneplus/sm8750/drivers/kernelsu" />