Introduction
In this guide, I will be using @krasCGQ's https://github.com/KudProject/AnyKernel2
You should know-
How to build a kernel properly.
How to use AnyKernel2 for making flashable zips.
I might not be able to answer all your questions as I am a bit busy these days so sorry!
Part 1: Changes to the kernel
1. You must firstly disable BUILD_ARM64_APPENDED_DTB_IMAGE in your defconfig(Check this for reference - https://github.com/rupansh/chimera_nich/commit/7af580533c79e179d146516a845301a32fe99220)
2. Secondly, you will have to find which dts your device uses. Its quite easy to figure that out just open arch/arm/boot/dts/qcom/Makefile in your source and find your chipset's config line. To figure out which one you should use, you can
check the history of the qcom folder in the dts folder.(You can check the history of the Makefile as well) here's are two example commits -
https://github.com/rupansh/chimera_...90747ba#diff-fb8cf9a1a0b868557516caf54f4e966b (My non treble source)
https://github.com/rupansh/chimera_...a778661#diff-fb8cf9a1a0b868557516caf54f4e966b (My treble source)
As you can see, the dtb i will need is msm8937-pmi8950-qrd-wt88537_64.dtb for non treble source and msm8937-pmi8950-qrd-sku1.dtb for Treble source. Sometimes it is just obvious which one to use(i.e it will have your device codename in some cases)
3.All right once you have found out which dtb you will need, build the kernel like you normally do(In this case an Image.gz-dtb won't be made by the way)
Next, you need to cd to <outdir>/arch/arm64/boot/dts/qcom and you will find your required dtb there in your respective sources.
Part 2: Changes to AnyKernel2
1. either you can clone https://github.com/KudProject/AnyKernel2 and delete the files in ramdisk and edit anykernel.sh according to your AnyKernel2 script, or
2. you can use these two commits for reference-
https://github.com/KudProject/AnyKernel2/commit/b55c00085c5bd3859627f579150cbd6d9687c0a0 && https://github.com/KudProject/AnyKernel2/commit/f4602f721631f95134a78b8c7eccccd3f5cd98f5 and edit your anykernel2 script accordingly. The changes are quite simple to understand. He simply added an "if" condition. It looks for ro.treble.enabled in buildprop and "if" the script finds it, treble DTB is combined with Image.gz(Which I will explain where to get) "else", (which means the other possibility which is if it doesn't find ro.treble.enabled) it simply flashes non-treble DTB with Image.gz . (Someone with basic coding knowledge can figure that out + it is quite well explained in the commit)
3. Once you have made your AnyKernel2 script ready to integrate, lets move to the next part
Part 3: Adding Required Files
1. Make a folder called "treble-supported" in the modified AnyKernel2 and copy your device specific dtb from your treble source to the folder.
2. Similarly, Make a folder called "treble-unsupported" in the modified AnyKernel2 and copy your device specific dtb from non-treble source to the folder.
3. make a dir called "kernel" in the Anykernel2 folder and copy Image.gz from any one of your source from <outdir>/arch/arm64/boot to it. (I just used the one from my treble source, Maybe you can use other sources as well but I can't confirm! An experienced person will tell you about that )
4. Zip the folder like you usually do and flash it! If it doesn't boot, You may have done something wrong with the script or more likely used an incorrect dtb!(Please don't use Image.gz-dtb). If it does boot, Congratulations!
Notes
1. You can name the folders(treble-supported and treble-unsupported) anything you want them to be as long as you make changes to the update binary
2. This script only detects on devices that have actually ported treble instead and it won't work with those that have only ported a seperste vendor
----------------------------------------------------------------------------------------------------------------------------------------------------------------------
Also this is my first guide so please do tell if I did/said something wrong
Here's my fork if you want to check - https://github.com/rupansh/AnyKernel2
Credits -
1. @krasCGQ
2. @osm0sis
3. @tanish2k09 (For bringing me to the the android dev world)
Anyone I missed! (Please reply here or message me if I have!)
In this guide, I will be using @krasCGQ's https://github.com/KudProject/AnyKernel2
You should know-
How to build a kernel properly.
How to use AnyKernel2 for making flashable zips.
I might not be able to answer all your questions as I am a bit busy these days so sorry!
Part 1: Changes to the kernel
1. You must firstly disable BUILD_ARM64_APPENDED_DTB_IMAGE in your defconfig(Check this for reference - https://github.com/rupansh/chimera_nich/commit/7af580533c79e179d146516a845301a32fe99220)
2. Secondly, you will have to find which dts your device uses. Its quite easy to figure that out just open arch/arm/boot/dts/qcom/Makefile in your source and find your chipset's config line. To figure out which one you should use, you can
check the history of the qcom folder in the dts folder.(You can check the history of the Makefile as well) here's are two example commits -
https://github.com/rupansh/chimera_...90747ba#diff-fb8cf9a1a0b868557516caf54f4e966b (My non treble source)
https://github.com/rupansh/chimera_...a778661#diff-fb8cf9a1a0b868557516caf54f4e966b (My treble source)
As you can see, the dtb i will need is msm8937-pmi8950-qrd-wt88537_64.dtb for non treble source and msm8937-pmi8950-qrd-sku1.dtb for Treble source. Sometimes it is just obvious which one to use(i.e it will have your device codename in some cases)
3.All right once you have found out which dtb you will need, build the kernel like you normally do(In this case an Image.gz-dtb won't be made by the way)
Next, you need to cd to <outdir>/arch/arm64/boot/dts/qcom and you will find your required dtb there in your respective sources.
Part 2: Changes to AnyKernel2
1. either you can clone https://github.com/KudProject/AnyKernel2 and delete the files in ramdisk and edit anykernel.sh according to your AnyKernel2 script, or
2. you can use these two commits for reference-
https://github.com/KudProject/AnyKernel2/commit/b55c00085c5bd3859627f579150cbd6d9687c0a0 && https://github.com/KudProject/AnyKernel2/commit/f4602f721631f95134a78b8c7eccccd3f5cd98f5 and edit your anykernel2 script accordingly. The changes are quite simple to understand. He simply added an "if" condition. It looks for ro.treble.enabled in buildprop and "if" the script finds it, treble DTB is combined with Image.gz(Which I will explain where to get) "else", (which means the other possibility which is if it doesn't find ro.treble.enabled) it simply flashes non-treble DTB with Image.gz . (Someone with basic coding knowledge can figure that out + it is quite well explained in the commit)
3. Once you have made your AnyKernel2 script ready to integrate, lets move to the next part
Part 3: Adding Required Files
1. Make a folder called "treble-supported" in the modified AnyKernel2 and copy your device specific dtb from your treble source to the folder.
2. Similarly, Make a folder called "treble-unsupported" in the modified AnyKernel2 and copy your device specific dtb from non-treble source to the folder.
3. make a dir called "kernel" in the Anykernel2 folder and copy Image.gz from any one of your source from <outdir>/arch/arm64/boot to it. (I just used the one from my treble source, Maybe you can use other sources as well but I can't confirm! An experienced person will tell you about that )
4. Zip the folder like you usually do and flash it! If it doesn't boot, You may have done something wrong with the script or more likely used an incorrect dtb!(Please don't use Image.gz-dtb). If it does boot, Congratulations!
Notes
1. You can name the folders(treble-supported and treble-unsupported) anything you want them to be as long as you make changes to the update binary
2. This script only detects on devices that have actually ported treble instead and it won't work with those that have only ported a seperste vendor
----------------------------------------------------------------------------------------------------------------------------------------------------------------------
Also this is my first guide so please do tell if I did/said something wrong
Here's my fork if you want to check - https://github.com/rupansh/AnyKernel2
Credits -
1. @krasCGQ
2. @osm0sis
3. @tanish2k09 (For bringing me to the the android dev world)
Anyone I missed! (Please reply here or message me if I have!)
Last edited: