This post is the product of seeing over the last six to nine months endlessly repeated claims by people that this kernel or that kernel is more stable, runs cooler, has better battery life, runs faster, etc.
This post isn't meant to knock those who like to build kernels. I like to build kernels. The guys who build kernels like Chevy and Jdlfg are nice guys. It seems like the end users who don't work on these kernels have no idea what actually goes into building a kernel. Well, to be honest, not that much goes into building a kernel. It's pretty easy to do and the kernels by Bekit, Chevy, AdamZ, P3Droid, Jdlfg, are all more or less the same.
While many of you may already know some of what will follow, many don't. My hope is that with this post I can at least to some degree put an end to all the hype surrounding kernels and kernel development.
The Life of A Kernel
A stock kernel for the Droid is born when a person downloads the kernel source code from the Android Open Source Project.
That person then builds the kernel against a generic kernel configuration (sholes_defconfig) that comes as part of the download and is compatible with the Droid.
Customizing The Generic Kernel
The customization that may be done to the kernel is fairly limited. The developer may change the available frequencies, the voltages used for those frequencies, and they may modify some of the configuration options to enable or disable certain features.
Voltage -
Each frequency has a corresponding voltage so the developer can try to use a lower voltage or a higher voltage depending on what kind of kernel he's making. Some Droids can run low voltage and some can't due to tolerances allowed by the semiconductor manufacturer during production of the ARM Cortex CPU. The voltage is represented in code as a hexadecimal value, and some kernel developers do not know what this value represents in mV (millivolts). Lower voltage means a cooler phone and longer battery life.
Short of actually seeing the voltages used by the kernel, there's no way to know if your "low voltage" kernel is lower than another "low voltage" kernel. I've seen "low voltage" kernels that used stock voltages and in fact had top frequency voltages beyond the Vmax of 1.8 volts specified in the ARM Cortex technical reference manual.
Frequency -
The generic kernel has seven slots and maxes out at 800 mhz. The developer can change the frequencies in these seven slots but as of kernel 2.6.32, they cannot change the number of slots. This is why all Froyo kernels have seven slots. The higher the frequency, the more voltage is needed to boot the phone and remain stable under load.
Modules -
The developer can modify the generic configuration to include things like:
TUN
EXT2/3/4
LZO compression (Swap/Compcache support)
These can be built as part of the kernel or as loadable modules.
Beyond these standard modules most of the more popular kernels on the market today are almost identical to the generic configuration.
The exception that I'm aware of are the configuration files of Bekit's Eclair kernels which had a large number of changes but these changes were simply based off of changes in the CyanogenMod kernel. Bekit himself would freely tell you that he didn't know what most of them did.
Kernel Code Changes
99% of the kernels available for the Droid have no source code changes beyond the changes to the frequency list mentioned above.
There is one small patch some developers have applied to support swap/compcache but this amounts to three or four lines of code modified by a script.
The one exception that I'm aware of are Jake Day's Droid kernels which contain (according to Jake) some 30,000 lines of modified code.
Conclusion
Outside of choosing a kernel because you need TUN, or because you want to use the new changes to read the OMAP sensor to track real time CPU temperatures, the only real difference that exists is how stable a kernel is on your hardware - getting back to the fact that some phones run better on higher voltage.
Remember the next time you see someone claiming that this kernel or that kernel seems faster, or smoother. It isn't.
This post isn't meant to knock those who like to build kernels. I like to build kernels. The guys who build kernels like Chevy and Jdlfg are nice guys. It seems like the end users who don't work on these kernels have no idea what actually goes into building a kernel. Well, to be honest, not that much goes into building a kernel. It's pretty easy to do and the kernels by Bekit, Chevy, AdamZ, P3Droid, Jdlfg, are all more or less the same.
While many of you may already know some of what will follow, many don't. My hope is that with this post I can at least to some degree put an end to all the hype surrounding kernels and kernel development.
The Life of A Kernel
A stock kernel for the Droid is born when a person downloads the kernel source code from the Android Open Source Project.
That person then builds the kernel against a generic kernel configuration (sholes_defconfig) that comes as part of the download and is compatible with the Droid.
Customizing The Generic Kernel
The customization that may be done to the kernel is fairly limited. The developer may change the available frequencies, the voltages used for those frequencies, and they may modify some of the configuration options to enable or disable certain features.
Voltage -
Each frequency has a corresponding voltage so the developer can try to use a lower voltage or a higher voltage depending on what kind of kernel he's making. Some Droids can run low voltage and some can't due to tolerances allowed by the semiconductor manufacturer during production of the ARM Cortex CPU. The voltage is represented in code as a hexadecimal value, and some kernel developers do not know what this value represents in mV (millivolts). Lower voltage means a cooler phone and longer battery life.
Short of actually seeing the voltages used by the kernel, there's no way to know if your "low voltage" kernel is lower than another "low voltage" kernel. I've seen "low voltage" kernels that used stock voltages and in fact had top frequency voltages beyond the Vmax of 1.8 volts specified in the ARM Cortex technical reference manual.
Frequency -
The generic kernel has seven slots and maxes out at 800 mhz. The developer can change the frequencies in these seven slots but as of kernel 2.6.32, they cannot change the number of slots. This is why all Froyo kernels have seven slots. The higher the frequency, the more voltage is needed to boot the phone and remain stable under load.
Modules -
The developer can modify the generic configuration to include things like:
TUN
EXT2/3/4
LZO compression (Swap/Compcache support)
These can be built as part of the kernel or as loadable modules.
Beyond these standard modules most of the more popular kernels on the market today are almost identical to the generic configuration.
The exception that I'm aware of are the configuration files of Bekit's Eclair kernels which had a large number of changes but these changes were simply based off of changes in the CyanogenMod kernel. Bekit himself would freely tell you that he didn't know what most of them did.
Kernel Code Changes
99% of the kernels available for the Droid have no source code changes beyond the changes to the frequency list mentioned above.
There is one small patch some developers have applied to support swap/compcache but this amounts to three or four lines of code modified by a script.
The one exception that I'm aware of are Jake Day's Droid kernels which contain (according to Jake) some 30,000 lines of modified code.
Conclusion
Outside of choosing a kernel because you need TUN, or because you want to use the new changes to read the OMAP sensor to track real time CPU temperatures, the only real difference that exists is how stable a kernel is on your hardware - getting back to the fact that some phones run better on higher voltage.
Remember the next time you see someone claiming that this kernel or that kernel seems faster, or smoother. It isn't.