Developer: Ahnaf Hossain
A kernel built for the kind of phone use that actually matters — snappy response, longer screen-on time, and thermal headroom when you need it.
Built on the LineageOS 6.1 GKI tree for the OnePlus 12 (Snapdragon 8 Gen 3 / SM8650), Helios drops the bloat that drains your battery in the background and leaves the performance-critical paths clean. No gimmicks, no excessive tuning — just the kernel doing what it should.
| Model Name | Codename | SoC | Market |
|---|---|---|---|
| OnePlus 12 | waffle |
Snapdragon 8 Gen 3 (SM8650) | Global (CPH2573, CPH2581, CPH2583) + China (PJD110) |
| OnePlus 12R | duchamp / kalama |
Snapdragon 8s Gen 2 (SM8475) | ❌ Different SoC — not supported |
| OnePlus Open | findn3 |
Snapdragon 8 Gen 2 | ❌ Different device |
| OnePlus Pad 2 | cramer |
Snapdragon 8 Gen 3 | ❌ Different device |
A quick note: OnePlus 12 runs SM8650. OnePlus 12R runs SM8550. These are not the same chip — flashing the wrong kernel won't boot.
| ROM | Version | Android | Status |
|---|---|---|---|
| LineageOS | 21.x – 23.x | 14 – 16 | ✅ Recommended |
| OxygenOS | 14 / 15 | 14 | ✅ Supported |
| OxygenOS | 16+ | 16+ | |
| PixelExperience | 14+ | 14+ | |
| crDroid | 10.x | 14+ |
This kernel is 6.1 GKI. Vendor modules from your ROM (camera, display, Wi-Fi, etc.) need to be built against the same 6.1 kernel KMI to load. Most custom ROMs for OnePlus 12 already use 6.1 — just confirm before flashing.
The GKI (Generic Kernel Image) architecture keeps the kernel ABI stable across ROM updates. Helios is built against the same KMI as LineageOS 22.2, so it plays nicely with vendor modules from any ROM built on that foundation.
CONFIG_CC_OPTIMIZE_FOR_SIZE=y— the compiler cuts the fat from code paths, not just binary size. Tighter caches mean the Snapdragon 8 Gen 3 wakes up less often and spends more time in low-power states when the screen is off. Under load, the reduced instruction cache pressure translates to snappier app launches and less thermal throttling during extended sessions.CONFIG_DEBUG_INFO=n,CONFIG_DEBUG_FS=n,CONFIG_DEBUG_KERNEL=n— debug code that runs in production, collects data you don't need, and burns battery doing it. All of it removed.- BTF metadata disabled — smaller kernel footprint, less overhead from BPF type format processing on every module load.
- Base: LineageOS
android_kernel_oneplus_sm8650, branchlineage-23.2 - Kernel: 6.1 GKI — same baseline as stock LineageOS 22.2, same KMI
- Compiler: GCC 16.1.0,
LTO_NONE(stock GKI doesn't use LTO) - Config:
gki_defconfig+vendor/pineapple_GKI.configfragment - Output:
Image(26MB),dtbo.img(2.8MB, 91 device-tree overlays)
| Excluded | Reason |
|---|---|
| LTO (Link-Time Optimization) | Not used in official GKI builds; increases build time with marginal gains on this hardware |
| KCFI (Kernel CFI) | Requires Clang; GCC builds drop it silently — a trade-off, not a flaw |
| Debug info / debugfs | Drains battery for data you don't use in daily driver |
| BTF metadata | Larger kernel image, more load-time overhead, host GCC compatibility issue |
- TCP BBR congestion control — switched from CUBIC. BBR handles variable mobile connections and 5G better, with lower latency and more consistent throughput.
- KSM enabled — kernel samepage merging deduplicates identical memory pages across processes. Useful when many apps share common data.
- ZSWAP + ZRAM writeback — compressed memory pool writes to ZRAM first; when full, pages go to the writeback device instead of being dropped. Better memory pressure handling than ZRAM alone.
- MQ-Deadline I/O scheduler — switched from BFQ. MQ-Deadline queues I/O requests by deadline, reducing storage latency on the UFS 4.0 drive.
- RCU boost delay reduced — RCU is a kernel synchronization mechanism. Reducing the boost delay shortens wakeup latency for latency-sensitive tasks.
- Debug code stripped further — more production-only debug code removed compared to v1.1.
- Download
Helios-Kernel-v1.2-waffle.zipfrom the Releases page - Boot into TWRP / OrangeFox / LineageOS recovery
- Flash the zip via recovery's Install menu or:
adb push Helios-Kernel-v1.2-waffle.zip /sdcard/ adb shell twrp install /sdcard/Helios-Kernel-v1.2-waffle.zip
- Reboot. First boot may take a few minutes — let it settle.
The
Imageis a raw GKI boot image. For the supported path, use the recovery zip above.
# Check active slot
adb reboot bootloader
fastboot getvar current-slot
# Flash to active slot
fastboot flash boot_b Image # slot B
# OR
fastboot flash boot_a Image # slot A
fastboot rebootOnePlus 12 is an A/B (seamless update) device. The AnyKernel3 zip detects and flashes the active slot automatically. Flash to both slots if you want the kernel to survive OTA boot-slot switching:
fastboot flash boot_a Image
fastboot flash boot_b ImageNo need for --disable-verity --disable-verification. Helios works fine with standard custom-boot flashing on an unlocked bootloader. Keep vbmeta and vbmeta_system as they are.
OnePlus 12 switches slots after system updates, and the new slot will boot the stock kernel. Just re-flash the Helios zip after any OTA and you're back to normal.
- This is the first proper release. It's been built carefully and checks out on paper, but real-world testing is ongoing. If something doesn't feel right, check the GitHub issues tab.
- Vendor modules from your ROM should load without issues — same kernel version, same KMI. But camera quirks, display white-balance hiccups, and NFC weirdness are all plausible until proven otherwise. When in doubt, re-flash the stock
dtbothat came with your ROM. - Idle drain improvement in testing was noticeable — your mileage will vary depending on the ROM, your apps, and how you use your phone.
- Linux (CachyOS / Arch recommended)
aarch64-linux-gnu-cross-compiler toolchain- Python 3
pahole(BPF Type Format)clang/lld/llvm-strip(optional, for LLVM builds)- ~15 GB disk space, ~7 GB RAM
# Install build dependencies (Arch/CachyOS)
sudo ./scripts/setup-cachyos.sh
# Clone source
make clone
# Configure
make config
# Build
make build
# Package
make packageexport ARCH=arm64
export CROSS_COMPILE=aarch64-linux-gnu-
export DTC_FLAGS=-@
make O=/home/ahnaf/helios-kernel-out gki_defconfig
# Merge vendor config
./scripts/tools/kconfig/merge_config.sh \
/home/ahnaf/helios-kernel-out/.config \
arch/arm64/configs/vendor/pineapple_GKI.config
# Apply battery opts
./scripts/config --file /home/ahnaf/helios-kernel-out/.config \
--enable CONFIG_CC_OPTIMIZE_FOR_SIZE \
--disable CONFIG_DEBUG_INFO CONFIG_DEBUG_FS CONFIG_DEBUG_KERNEL CONFIG_DEBUG_INFO_BTF
make O=/home/ahnaf/helios-kernel-out olddefconfig
make O=/home/ahnaf/helios-kernel-out -j$(nproc) Image dtbs| File | Location |
|---|---|
Image |
out/arch/arm64/boot/Image |
dtbo.img |
out/arch/arm64/boot/dtbo.img |
| DTBs | out/arch/arm64/boot/dts/ (493 files) |
| Component | Repo | Branch |
|---|---|---|
| Kernel source | LineageOS/android_kernel_oneplus_sm8650 | lineage-23.2 |
| Device trees | android_kernel_oneplus_sm8650-devicetrees | lineage-23.2 |
| Vendor blobs | TheMuppets/proprietary_vendor_oneplus_sm8650-common | lineage-23.2 |
| Vendor blobs | TheMuppets/proprietary_vendor_oneplus_waffle | lineage-23.2 |
| AnyKernel3 | osm0sis/AnyKernel3 | master |
| Companion modules | android_kernel_oneplus_sm8650-modules | lineage-23.2 |
This kernel is built with GCC 16.1.0, not Clang. One consequence: KCFI (Kernel CFI) doesn't work in a GCC build — the compiler doesn't emit the type checks that Clang would. This means every indirect function call in the kernel gives up a layer of protection that the stock Clang-built kernel has. It's a trade-off, not a bug. Shadow Call Stack (SCS) is still enabled and working, and that coverage remains unchanged from v1.1.
Your ROM's vendor modules (which were built with Clang and have KCFI instrumentation baked in) will load and run normally against this kernel. When CONFIG_CFI_CLANG=n, the kernel simply ignores the KCFI data in those modules — no conflict, no crash risk. The reverse is what would be a problem: a KCFI-enabled kernel with non-KCFI modules.
- TCP BBR congestion control (was CUBIC)
- KSM enabled
- ZSWAP + ZRAM writeback
- MQ-Deadline I/O scheduler (was BFQ)
- RCU boost delay reduced
- Additional debug code removed
- First correct build for OnePlus 12. v1.0 used the wrong source tree (SM8550 / OnePlus 12R) — that one won't boot on OnePlus 12 and should be discarded.
- Source is now the right one:
android_kernel_oneplus_sm8650, branchlineage-23.2, kernel 6.1 GKI - 91 device-tree overlays included (display, audio, camera, BT, Wi-Fi, sensors, and more)
- AnyKernel3 flashable zip with A/B slot detection
- Built from the wrong SoC. SM8550 != SM8650. Flashing it on a OnePlus 12 will leave you with a phone that won't boot.
Ahnaf Hossain — GitHub
This kernel stands on the shoulders of projects that make custom Android possible:
- LineageOS — the kernel source tree and the reason any of this works
- Qualcomm — the Snapdragon 8 Gen 3 is a solid platform to build on
- osm0sis — AnyKernel3 made the flashable zip straightforward
- TheMuppets — vendor blobs for everything the open-source tree doesn't include
- CachyOS / Arch Linux — the build environment this was compiled on
Kernel source is GPLv2. Vendor blobs are proprietary. This project is for anyone who wants to learn how kernels work and actually use their phone instead of charging it.
Always verify compatibility with your ROM before flashing. When in doubt, flash to the inactive slot first.