Kirisakura-Kernel for the Asus Zenfone 9
Hello everyone,
To keep it short: Here is Kirisakura - Kernel for the Asus Zenfone 9 aka DaVinci. The Zenfone line-up internal codenames were traditionally derived from alcoholic drinks. Two years ago the Zenfone 6 bore the title "Kirin". The Zenfone 7 was codenamed "Tequila", while the Zenfone 8 bore the title "Sake".
This year seems to make a change however. The Zenfone 9´s internal codename is "DaVinci".
I would appreciate if everybody that flashes the kernel, reads at least once through this opening post and the following ones.
As far as we, @tbalden and me, are aware and as far as we know this project, alongside CleanSlate kernel for the Zenfone 9, marks the first release of a source compiled custom QGKI 2.0 kernel as a standalone flashable zip and project here on XDA.
The introduction of GKI and QCOMs adaptation QGKI means unfortunately that building a kernel not modularized, but in a monolithic fashion becomes harder and harder. GKI/QGKI results in the "kernel" itself no longer just sitting in one partition or the zImage, but it´s spread across different partitions (monolithic build vs. modularized build) now. Since there´s no requirment to keep monolithic builds working as in the past, it´s no longer possible to compile the source as is (without applying major rewrites, tricks or hacks) in the monolithic fashion on 5.10 kernels. The same was true for the Pixel 6/Pro.
That means the "kernel" project you´re seeing here needs to be compiled in a build environment to achieve the GKI/QGKI way. Since only Google releases the full build environment alongside the kernel sources itself in a proper fashion with git history, it became very complicated and seemingly impossible to do this on the Zenfone 9 at first glance. A big thanks at this place to Asus. From all the sources of SD8 Gen 1 QGKI devices published, the Asus Source is the most complete. A big thanks to Asus for publishing the sources on time and complete! Also for listening to us if the source is not complete and something is missing.
With excellent teamwork and a lot of hardwork, @tbalden and me managed to compile the Zenfone 9 kernel in QGKI 2.0 fashion after a lot of failed attempts and misery. It´s been a pleasure to work with him over the years here on XDA.
Kirisakura - Kernel is designed to bring a handful of beneficial features to the device, while ensuring excellent performance and smoothness to get you safely through the day!
If you expect a custom kernel to magically improve your devices battery life manifold and this is your only priority then this might not be the right place for you.
However the kernel is built to keep battery life close to the same as you would experience the on stock kernel while being tuned to perform better in various UI related benchmarks. The same benches are used by google to verify and ensure UI smoothness on the Pixel devices. The scheduler is tuned to yield lower jitter and reduce jank frames.
If that got your curious, I welcome you to continue reading if you´re still interested!
This project aims to keep most of the subsystems updated, way ahead of the stock kernel, thereby improving security and performance, while keeping stability as the foucs during testing! This includes Linux-Stable, CAF-Upstream and kernel/common.
A very positive development. Google pushed for CFI and SCS to be enabled by default in the android-common kernel. Starting with 5.4 kernel ( SD 888 ) CFI and SCS were enabled by default. It was a lot of work to get these features working nicely on the kernel I did the years back. So it´s nice to see this is now there by default in everybody can profit from it.
I put the explanations and links in hide tags here.
If reading about upstream in the paragraph above got you curious, have a read about Linux-Stable and why it is important here. The stable-process is not the same for every subsystem, but the general idea, rule of thumb and benefits are applicable for other subsystems as well.
Read more about the Release-Model following this link.
This conversation on the LKML mailing list also shows the power of Linux-Stable and why it´s very beneficial to not just say it´s not worth and a potentiol source for bugs:
Starting with the Initial Message , the following reply and a good summarizing statement.
Quick explanation of QCOM-Upstream. CLO-git is the place where development from Qualcomm for their SoCs happens. This includes the Snapdragon 8+ Gen1 that´s built into the different SKUs of the Zenfone 9.
The kernel-bases available on QCOMs git, are basically the foundations OEMs use, to build their own kernel additions on top for devices featuring Qualcomm SoCs.
The Qualcomm developers push regular updates to the bases of the different SoCs, a bit similar to how Linux-Upstream works. OEMs usually stop updating the initial base after the phone is released.
This kernel focuses amongst the other features to provide the latest CAF-Updates merged in a regular manner, to provide updates, improvements and enhancements for SoC specific drivers and subsystems! This might take a while, because a lot of device specific testing is done on my end to ensure stability.
The kernel includes a lot of improvements and contributions from other developers as well. Without this kernel would not exist.
A big part of improvements originate from @arter97´s, @kdrag0n´s and @Sultanxda´s work. Many others contributed in some way or another to this kernel.
A big thanks to all of them at this place!
Now lets continue with a list of features in the next paragraph!
Main Features:
- Based on latest kernel sources from Asus for Android 13 and intended to be used on the latest Asus Stock-Firmware
- compiled with Clang 16.0.2 and built with -O3 speed optimizations
- Linux-Stable-Upstream included to 5.10.181
- upstreamed QCOM base for the Snapdragon SD8+ Gen1 (qcoms internal codename "cape")
- Lazy RCU which should result in power-savings while the device is lightly-loaded or idling, more information here
- include important fixes/improvements from kernel/common
- SSG IO scheduler for reduced overhead and less CPU cycles (more lightweight and android optimized)
- implement ramoops for easier logs in case of kernel panics
- implement LRNG (see arter kernel OP for more info )
- Flashing the kernel will keep root!
- Flashable via EXKM, FKM or Kernel Flasher (free open source solution, get it here)
- Anykernel zip is based on the Anykernel3 release from @osm0sis
EAS related features:
- Implement dynamic WALT-Window size depending on current FPS, collecting information about CPU-Load to provide more precise information for the scheduler
- EAS implementation patched up to latest CAF state
- updates from kernel/common
CPU related features:
- Power saving workingqueues enabled by default
- Change various drivers (WLAN, MM, audio, charger, power, thermal, glink etc) to use power efficient workingqueues. This compliments EAS in general
- vdso32 patches as found on Google Pixel devices (brief documentation here) (CAF 5.10 default, keep for documentation)
- improve suspend/resume from audio driver (caf-upstream for audio-kernel)
- enable suspend_skip_sync to save power during suspend/resume
- speed up face unlock
- reduce camera launch time
GPU related features:
- GPU driver updated to latest CAF-State
File System related features:
- f2fs improvements
UI/UX/Usability related features from CleanSlate:
- CleanSlate features made by @tbalden
- Disclaimer: All CleanSlate features can be controlled via the free companion and config app found on CleanSlate thread here on the Zenfone 9 Forums on XDA. Please consider buying the premium versions if you enjoy using the CleanSlate features, to give a little something back to @tbalden.
- add option to force 240hz touch sample rate
Network related features:
- Wireguard Support (Details)
- advanced TCP algorithms enabled
- use bbr as default TCP congestion algorithm (fasted algo according to this excellent research from @kdrag0n found here )
- includes new bbr
- Enable support for TTL spoofing
Memory related features:
- Speculative Page Faults left enabled (1. 2) (CAF 5.4 default, keep for documentation)
Security related features:
- Control-Flow-Integration (CFI) and Link-Time-Optimization (LTO) (CAF 5.4 default, keep for documentation)
- Use ThinLTO which was first used in the Pixel 4 XL Android R-Kernel instead of full LTO (CAF 5.4 default, keep for documentation)
- Shadow Call Stack (SCS) Security-Feature ( 5.4 default, keep for documentation)
- enable init_on_alloc for even more security, more information can be found in the commit message (CAF 5.4 default, keep for documentation)
Other features:
- clean up asus drivers and fix a few warnings in kernel log
- enlarge dmesg size to ease debugging
Flashing Guide, Download and Changelog
Requirements:
- unlocked Bootloader (this will void warranty and kill future OTA updates on all asus phones at the moment)
- USB-Debugging in developer options enabled
- latest adb and fastboot binaries
- working adb and fastboot environment
- magisk root
- a backup of stock boot.img, vendor_boot.img, vendor_dlkm.img and dtbo.img so you can go back to stock conditions (simplest way is TWRP or to extract from stock firmware via payload extractor)
How to flash the Kernel:
1. Download the latest kernel.zip and make sure you have properly updated to the latest matching Asus Stock-Firmware. When the Zenfone 9 receives an OTA update it takes Asus a while to release the source code for the new OS and me a while to build a new kernel. If you don´t want to face any issues, wait until I either release an updated kernel or give green light because there were no kernel changes.
Always make sure to run the firmware the kernel is built for!
If you feel adventurous and try in advance, make sure you have a backup ready!
2. Flash the kernel.zip in your favorite kernel app (I personally use Kernel Flasher by @capntrips as it´s free OSS) or TWRP once available.
3. Reboot and profit.
DOWNLOAD:
Download is located always in this folder:
AFH is currently down. Please check release posts for attached files.
Important: Read after Download
Please take a look at the second post after flashing the kernel!
Changelog:
Android 12
1.0.0 Initial Release
1.1.0 https://xdaforums.com/t/kernel-05-0...s-zenfone-9-aka-davinci.4489055/post-87544785
1.1.0 https://xdaforums.com/t/kernel-08-1...s-zenfone-9-aka-davinci.4489055/post-87641829
1.1.3 https://xdaforums.com/t/kernel-28-1...s-zenfone-9-aka-davinci.4489055/post-87761015
Android 13
2.0.0 2.0.6 https://xdaforums.com/t/kernel-09-1...s-zenfone-9-aka-davinci.4489055/post-87945357
2.0.12 https://xdaforums.com/t/kernel-04-0...s-zenfone-9-aka-davinci.4489055/post-88194923
2.0.18 https://xdaforums.com/t/kernel-23-0...s-zenfone-9-aka-davinci.4489055/post-88332217
2.0.19 https://xdaforums.com/t/kernel-25-0...s-zenfone-9-aka-davinci.4489055/post-88360955
2.0.21 https://xdaforums.com/t/kernel-01-0...s-zenfone-9-aka-davinci.4489055/post-88384057
2.0.24 https://xdaforums.com/t/kernel-07-0...s-zenfone-9-aka-davinci.4489055/post-88600875
Donations:
Donations are not mandatory but very welcome if you want to support development or just buy me a coffee/tea
If you like my work: http://paypal.me/freak07
Credits:
Asus for the development device, giving me the opportunity to create this project! This device is absolutely stunning!
@osm0sis for all his work, including the ak3 installer!
@capntrips for his relentless work on several projects, including kernel flasher!
@tbalden for being the best HTC, Pixel, OnePlus and now Asus wingman!
@LeeDroid and @mwilky for their awesome roms and work I used on multiple devices!
@Captain_Throwback for all the mentoring and guidance!
@Eliminater74 for bringing me into the game and the Inspiration
@nathanchance for his upstream guidance and assistance
@RenderBroken for helping me out
@flar2 for all his work
@joshuous for all the help he provided to me in the past!
@arter97 for giving me advice
@kdrag0n for his help and advices!
@topjohnwu for magisk!
Source Code: https://github.com/freak07/Kirisakura_DaVinci_AI2202/
For necessary changes to other repos, besides the main kernel tree please check tbaldens github, we did the bringup together:
Hello everyone,
To keep it short: Here is Kirisakura - Kernel for the Asus Zenfone 9 aka DaVinci. The Zenfone line-up internal codenames were traditionally derived from alcoholic drinks. Two years ago the Zenfone 6 bore the title "Kirin". The Zenfone 7 was codenamed "Tequila", while the Zenfone 8 bore the title "Sake".
This year seems to make a change however. The Zenfone 9´s internal codename is "DaVinci".
I would appreciate if everybody that flashes the kernel, reads at least once through this opening post and the following ones.
As far as we, @tbalden and me, are aware and as far as we know this project, alongside CleanSlate kernel for the Zenfone 9, marks the first release of a source compiled custom QGKI 2.0 kernel as a standalone flashable zip and project here on XDA.
The introduction of GKI and QCOMs adaptation QGKI means unfortunately that building a kernel not modularized, but in a monolithic fashion becomes harder and harder. GKI/QGKI results in the "kernel" itself no longer just sitting in one partition or the zImage, but it´s spread across different partitions (monolithic build vs. modularized build) now. Since there´s no requirment to keep monolithic builds working as in the past, it´s no longer possible to compile the source as is (without applying major rewrites, tricks or hacks) in the monolithic fashion on 5.10 kernels. The same was true for the Pixel 6/Pro.
That means the "kernel" project you´re seeing here needs to be compiled in a build environment to achieve the GKI/QGKI way. Since only Google releases the full build environment alongside the kernel sources itself in a proper fashion with git history, it became very complicated and seemingly impossible to do this on the Zenfone 9 at first glance. A big thanks at this place to Asus. From all the sources of SD8 Gen 1 QGKI devices published, the Asus Source is the most complete. A big thanks to Asus for publishing the sources on time and complete! Also for listening to us if the source is not complete and something is missing.
With excellent teamwork and a lot of hardwork, @tbalden and me managed to compile the Zenfone 9 kernel in QGKI 2.0 fashion after a lot of failed attempts and misery. It´s been a pleasure to work with him over the years here on XDA.
Kirisakura - Kernel is designed to bring a handful of beneficial features to the device, while ensuring excellent performance and smoothness to get you safely through the day!
If you expect a custom kernel to magically improve your devices battery life manifold and this is your only priority then this might not be the right place for you.
However the kernel is built to keep battery life close to the same as you would experience the on stock kernel while being tuned to perform better in various UI related benchmarks. The same benches are used by google to verify and ensure UI smoothness on the Pixel devices. The scheduler is tuned to yield lower jitter and reduce jank frames.
If that got your curious, I welcome you to continue reading if you´re still interested!
This project aims to keep most of the subsystems updated, way ahead of the stock kernel, thereby improving security and performance, while keeping stability as the foucs during testing! This includes Linux-Stable, CAF-Upstream and kernel/common.
A very positive development. Google pushed for CFI and SCS to be enabled by default in the android-common kernel. Starting with 5.4 kernel ( SD 888 ) CFI and SCS were enabled by default. It was a lot of work to get these features working nicely on the kernel I did the years back. So it´s nice to see this is now there by default in everybody can profit from it.
I put the explanations and links in hide tags here.
Kernel Control Flow Integrity (Kernel-CFI), which is achieved by linking the kernel with LLD and Link Time Optimization (LTO), more precisely ThinLTO, are quite unique security features.
The recently released Kirisakura-Kernel for the OnePlus 8 Pro was featured on the XDA-Portal due to the inclusion of CFI. The featured article explains CFI in great details, is easy to understand and definitely worth to read.
If possible the latest Kirisakura-Kernel releases for various devices aim to include CFI in enforcing mode so users can benefit from this security features.
Another security feature is Shadow Call Stack (SCS).
SCS is another security patchset that is aimed at preventing attacks via return oriented programming (ROP).
ROP is a technique where the attacker gains control of the kernel stack to overwrite function return addresses and redirect execution to carefully selected parts of existing kernel code.
If you´re interested here are a few good links:
Google Security Blog explaining SCS.
LLVM doc about SCS
Android DOCs documenting SCS
The recently released Kirisakura-Kernel for the OnePlus 8 Pro was featured on the XDA-Portal due to the inclusion of CFI. The featured article explains CFI in great details, is easy to understand and definitely worth to read.
If possible the latest Kirisakura-Kernel releases for various devices aim to include CFI in enforcing mode so users can benefit from this security features.
Another security feature is Shadow Call Stack (SCS).
SCS is another security patchset that is aimed at preventing attacks via return oriented programming (ROP).
ROP is a technique where the attacker gains control of the kernel stack to overwrite function return addresses and redirect execution to carefully selected parts of existing kernel code.
If you´re interested here are a few good links:
Google Security Blog explaining SCS.
LLVM doc about SCS
Android DOCs documenting SCS
If reading about upstream in the paragraph above got you curious, have a read about Linux-Stable and why it is important here. The stable-process is not the same for every subsystem, but the general idea, rule of thumb and benefits are applicable for other subsystems as well.
Read more about the Release-Model following this link.
This conversation on the LKML mailing list also shows the power of Linux-Stable and why it´s very beneficial to not just say it´s not worth and a potentiol source for bugs:
Starting with the Initial Message , the following reply and a good summarizing statement.
Quick explanation of QCOM-Upstream. CLO-git is the place where development from Qualcomm for their SoCs happens. This includes the Snapdragon 8+ Gen1 that´s built into the different SKUs of the Zenfone 9.
The kernel-bases available on QCOMs git, are basically the foundations OEMs use, to build their own kernel additions on top for devices featuring Qualcomm SoCs.
The Qualcomm developers push regular updates to the bases of the different SoCs, a bit similar to how Linux-Upstream works. OEMs usually stop updating the initial base after the phone is released.
This kernel focuses amongst the other features to provide the latest CAF-Updates merged in a regular manner, to provide updates, improvements and enhancements for SoC specific drivers and subsystems! This might take a while, because a lot of device specific testing is done on my end to ensure stability.
The kernel includes a lot of improvements and contributions from other developers as well. Without this kernel would not exist.
A big part of improvements originate from @arter97´s, @kdrag0n´s and @Sultanxda´s work. Many others contributed in some way or another to this kernel.
A big thanks to all of them at this place!
Now lets continue with a list of features in the next paragraph!
Main Features:
- Based on latest kernel sources from Asus for Android 13 and intended to be used on the latest Asus Stock-Firmware
- compiled with Clang 16.0.2 and built with -O3 speed optimizations
- Linux-Stable-Upstream included to 5.10.181
- upstreamed QCOM base for the Snapdragon SD8+ Gen1 (qcoms internal codename "cape")
- Lazy RCU which should result in power-savings while the device is lightly-loaded or idling, more information here
- include important fixes/improvements from kernel/common
- SSG IO scheduler for reduced overhead and less CPU cycles (more lightweight and android optimized)
- implement ramoops for easier logs in case of kernel panics
- implement LRNG (see arter kernel OP for more info )
- Flashing the kernel will keep root!
- Flashable via EXKM, FKM or Kernel Flasher (free open source solution, get it here)
- Anykernel zip is based on the Anykernel3 release from @osm0sis
EAS related features:
- Implement dynamic WALT-Window size depending on current FPS, collecting information about CPU-Load to provide more precise information for the scheduler
- EAS implementation patched up to latest CAF state
- updates from kernel/common
CPU related features:
- Power saving workingqueues enabled by default
- Change various drivers (WLAN, MM, audio, charger, power, thermal, glink etc) to use power efficient workingqueues. This compliments EAS in general
- vdso32 patches as found on Google Pixel devices (brief documentation here) (CAF 5.10 default, keep for documentation)
- improve suspend/resume from audio driver (caf-upstream for audio-kernel)
- enable suspend_skip_sync to save power during suspend/resume
- speed up face unlock
- reduce camera launch time
GPU related features:
- GPU driver updated to latest CAF-State
File System related features:
- f2fs improvements
UI/UX/Usability related features from CleanSlate:
- CleanSlate features made by @tbalden
- Disclaimer: All CleanSlate features can be controlled via the free companion and config app found on CleanSlate thread here on the Zenfone 9 Forums on XDA. Please consider buying the premium versions if you enjoy using the CleanSlate features, to give a little something back to @tbalden.
- add option to force 240hz touch sample rate
Network related features:
- Wireguard Support (Details)
- advanced TCP algorithms enabled
- use bbr as default TCP congestion algorithm (fasted algo according to this excellent research from @kdrag0n found here )
- includes new bbr
- Enable support for TTL spoofing
Memory related features:
- Speculative Page Faults left enabled (1. 2) (CAF 5.4 default, keep for documentation)
Security related features:
- Control-Flow-Integration (CFI) and Link-Time-Optimization (LTO) (CAF 5.4 default, keep for documentation)
- Use ThinLTO which was first used in the Pixel 4 XL Android R-Kernel instead of full LTO (CAF 5.4 default, keep for documentation)
- Shadow Call Stack (SCS) Security-Feature ( 5.4 default, keep for documentation)
- enable init_on_alloc for even more security, more information can be found in the commit message (CAF 5.4 default, keep for documentation)
Other features:
- clean up asus drivers and fix a few warnings in kernel log
- enlarge dmesg size to ease debugging
Flashing Guide, Download and Changelog
Requirements:
- unlocked Bootloader (this will void warranty and kill future OTA updates on all asus phones at the moment)
- USB-Debugging in developer options enabled
- latest adb and fastboot binaries
- working adb and fastboot environment
- magisk root
- a backup of stock boot.img, vendor_boot.img, vendor_dlkm.img and dtbo.img so you can go back to stock conditions (simplest way is TWRP or to extract from stock firmware via payload extractor)
How to flash the Kernel:
1. Download the latest kernel.zip and make sure you have properly updated to the latest matching Asus Stock-Firmware. When the Zenfone 9 receives an OTA update it takes Asus a while to release the source code for the new OS and me a while to build a new kernel. If you don´t want to face any issues, wait until I either release an updated kernel or give green light because there were no kernel changes.
Always make sure to run the firmware the kernel is built for!
If you feel adventurous and try in advance, make sure you have a backup ready!
2. Flash the kernel.zip in your favorite kernel app (I personally use Kernel Flasher by @capntrips as it´s free OSS) or TWRP once available.
3. Reboot and profit.
DOWNLOAD:
Download is located always in this folder:
AFH is currently down. Please check release posts for attached files.
Important: Read after Download
Please take a look at the second post after flashing the kernel!
Changelog:
Android 12
1.0.0 Initial Release
1.1.0 https://xdaforums.com/t/kernel-05-0...s-zenfone-9-aka-davinci.4489055/post-87544785
1.1.0 https://xdaforums.com/t/kernel-08-1...s-zenfone-9-aka-davinci.4489055/post-87641829
1.1.3 https://xdaforums.com/t/kernel-28-1...s-zenfone-9-aka-davinci.4489055/post-87761015
Android 13
2.0.0 2.0.6 https://xdaforums.com/t/kernel-09-1...s-zenfone-9-aka-davinci.4489055/post-87945357
2.0.12 https://xdaforums.com/t/kernel-04-0...s-zenfone-9-aka-davinci.4489055/post-88194923
2.0.18 https://xdaforums.com/t/kernel-23-0...s-zenfone-9-aka-davinci.4489055/post-88332217
2.0.19 https://xdaforums.com/t/kernel-25-0...s-zenfone-9-aka-davinci.4489055/post-88360955
2.0.21 https://xdaforums.com/t/kernel-01-0...s-zenfone-9-aka-davinci.4489055/post-88384057
2.0.24 https://xdaforums.com/t/kernel-07-0...s-zenfone-9-aka-davinci.4489055/post-88600875
Donations:
Donations are not mandatory but very welcome if you want to support development or just buy me a coffee/tea
If you like my work: http://paypal.me/freak07
Credits:
Asus for the development device, giving me the opportunity to create this project! This device is absolutely stunning!
@osm0sis for all his work, including the ak3 installer!
@capntrips for his relentless work on several projects, including kernel flasher!
@tbalden for being the best HTC, Pixel, OnePlus and now Asus wingman!
@LeeDroid and @mwilky for their awesome roms and work I used on multiple devices!
@Captain_Throwback for all the mentoring and guidance!
@Eliminater74 for bringing me into the game and the Inspiration
@nathanchance for his upstream guidance and assistance
@RenderBroken for helping me out
@flar2 for all his work
@joshuous for all the help he provided to me in the past!
@arter97 for giving me advice
@kdrag0n for his help and advices!
@topjohnwu for magisk!
Source Code: https://github.com/freak07/Kirisakura_DaVinci_AI2202/
For necessary changes to other repos, besides the main kernel tree please check tbaldens github, we did the bringup together:
tbalden - Repositories
engineer. Started github with kernel for HTCDoubleshot, migrating version in 2011. kernel follows kernel, patching intuitive new features into CleanSlate line. - tbalden
github.com
Last edited: