Here is a list of changes/addons that the Android Project made to the linux kernal, these changes are not part of the standard kernel and are only available in the Android kernel branch, some changes was part of the "staging" driver area in the stock kernel but was removed due to lack of support See [http://www.kroah.com/log/linux/staging-status-12-2009.html Greg KH blog post on -staging for 2.6.33], where he announces to '''remove''' various Android drivers from -staging.

+

Here is a list of changes/addons that the Android Project made to the linux kernel.

+

As of September, 2011, these kernel changes are not part of the standard kernel and are only available in the Android kernel trees in the Android Open Source project.

+

+

Various efforts have been made over the past few years to submit these to changes to mainline

+

(mostly by Google engineers, but also by others), with not much success so far.

+

+

== Resources ==

+

A very good overview of the changes is available in a talk by John Stultz at ELC 2011.

** This talks breaks down the differences between an Android Linux kernel and a stock Linux kernel, and provides information about the features of each.

Lindus Embedded (Alex Gonzalez) has a listing of kernel changes based on an Android kernel for the

Lindus Embedded (Alex Gonzalez) has a listing of kernel changes based on an Android kernel for the

Freescale MX51 SOC, with some good information about each change. See http://www.lindusembedded.com/blog/2010/12/07/android-linux-kernel-additions/

Freescale MX51 SOC, with some good information about each change. See http://www.lindusembedded.com/blog/2010/12/07/android-linux-kernel-additions/

+

+

+

== Temporary inclusing in mainline 'staging' ==

+

Some changes were temporarily adding the "staging" driver area in the stock kernel, but were removed due to lack of support. See [http://www.kroah.com/log/linux/staging-status-12-2009.html Greg KH blog post on -staging for 2.6.33], where he announces to '''remove''' various Android drivers from -staging.

List of Kernel features unique to Android

Here is a list of changes/addons that the Android Project made to the linux kernel.
As of September, 2011, these kernel changes are not part of the standard kernel and are only available in the Android kernel trees in the Android Open Source project.

Various efforts have been made over the past few years to submit these to changes to mainline
(mostly by Google engineers, but also by others), with not much success so far.

Resources

A very good overview of the changes is available in a talk by John Stultz at ELC 2011.
(The talk has a somewhat misleading name.)

Temporary inclusing in mainline 'staging'

Some changes were temporarily adding the "staging" driver area in the stock kernel, but were removed due to lack of support. See Greg KH blog post on -staging for 2.6.33, where he announces to remove various Android drivers from -staging.

pmem

The pmem driver is used to manage large (1-16+MB) physically contiguous
regions of memory shared between userspace and kernel drivers (dsp, gpu,
etc). It was written specifically to deal with hardware limitations of
the MSM7201A, but could be used for other chipsets as well. For now,
you're safe to turn it off on x86.

2. ashmem and pmem are very similar. Both are used for sharing memory
between processes. ashmem uses virtual memory, whereas pmem uses
physically contiguous memory. One big difference is that with ashmem,
you have a ref-counted object that can be shared equally between
processes. For example, if two processes are sharing an ashmem memory
buffer, the buffer reference goes away when both process have removed
all their references by closing all their file descriptors. pmem
doesn't work that way because it needs to maintain a physical to
virtual mapping. This requires the process that allocates a pmem heap
to hold the file descriptor until all the other references are closed.
3. You have the right idea for using shared memory. The choice between
ashmem and pmem depends on whether you need physically contiguous
buffers. In the case of the G1, we use the hardware 2D engine to do
scaling, rotation, and color conversion, so we use pmem heaps. The
emulator doesn't have a pmem driver and doesn't really need one, so we
use ashmem in the emulator. If you use ashmem on the G1, you lose the
hardware 2D engine capability, so SurfaceFlinger falls back to its
software renderer which does not do color conversion, which is why you
see the monochrome image.

logger

logger - system logging facility

This is the kernel support for the 'logcat' command

The kernel driver for the serial devices for logging are in the source code drivers/misc/logger.c

2. User space sets the oom_adj of processes to put them in the correct class for their current operation. This redefines the meaning of oom_adj from that used by the standard OOM killer to something that is more aggressive and controlled.

alarm

This is the kernel implementation to support Android's AlarmManager. It lets user space tell the kernel when it would like to wake up, allowing the kernel to schedule that appropriately and come back (holding a wake lock) when the time has expired regardless of the sleep state of the CPU.

paranoid network security

timed output / timed gpio

Generic gpio is a mechanism to allow programs to access and manipulate gpio registers from user space.

Timed output/gpio is a system to allow chaning a gpio pin and restore it automatically after a specified timeout.
See drives/misc/timed_output.c and drives/misc/timed_gpio.c
This expose a user space interface used by the vibrator code.