Android Kernel Features

Binder

 * Binder - corba-like IPC
 * used instead of SysV IPC for interprocess communication
 * The Linux version of Binder was originally derived from a project by PalmSource to implement a CORBA-like message-passing or method invocation system. Documentation on that system is at: http://www.angryredplanet.com/~hackbod/openbinder/docs/html/index.html

ashmem

 * ashmem - Android shared memory
 * implementation is in mm/ashmem.c

According to the Kconfig help "The ashmem subsystem is a new shared memory allocator, similar to POSIX SHM but with different behavior and sporting a simpler file-based API."

Apparently it better-supports low memory devices, because it can discard shared memory units under memory pressure.

To use this, programs open /dev/ashmem, use mmap on it, and can perform one or more of the following ioctls:


 * ASHMEM_SET_NAME
 * ASHMEM_GET_NAME
 * ASHMEM_SET_SIZE
 * ASHMEM_GET_SIZE
 * ASHMEM_SET_PROT_MASK
 * ASHMEM_GET_PROT_MASK
 * ASHMEM_PIN
 * ASHMEM_UNPIN
 * ASHMEM_GET_PIN_STATUS
 * ASHMEM_PURGE_ALL_CACHES

pmem

 * PMEM - Process memory allocator

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/android/logging.c
 * See Android logger for more information

wakelocks

 * wakelock - used for power management
 * Holds machine awake on a per-event basis until wakelock is released
 * See Android Power Management for detailed information

oom handling

 * oom handling modifications
 * lowmem notifications

alarm

 * alarm

paranoid network security

 * paranoid network security
 * See Android_Security

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

"Timed gpio" appears to be a system to allow for similar gpio manipulation, but with an added capability to automatically set a value in a gpio after a specified timeout.

On my ADP1, there is a driver at:

I'm not sure who uses this, or how it is used, but this is a directory with the following items: --w---   1 0        0            4096 Nov 13 02:11 bind lrwxrwxrwx   1 0        0               0 Nov 13 02:11 timed-gpio -> ../../../../devices/platform/timed-gpio --w---   1 0        0            4096 Nov 13 02:11 uevent --w---   1 0        0            4096 Nov 13 02:11 unbind
 * 1) cd /sys/bus/platform/drivers/timed-gpio
 * 2) ls -l

Also, there is a device at: .: lrwxrwxrwx   1 0        0               0 Nov 13 01:34 driver -> ../../../bus/platform/drivers/timed-gpio -r--r--r--   1 0        0            4096 Nov 13 01:34 modalias drwxr-xr-x   2 0        0               0 Nov 13 01:34 power lrwxrwxrwx   1 0        0               0 Nov 13 01:34 subsystem -> ../../../bus/platform -rw-r--r--   1 0        0            4096 Nov 13 01:34 uevent
 * 1) cd /sys/devices/platform/timed-gpio
 * 2) ls -lR

./power: -rw-r--r--   1 0        0            4096 Nov 13 01:34 wakeup

Possibly this means that one of the GPIO pins on the ADP1 is tied to a power wakeup event???

Kernel configuration options
The file Documentation/android.txt has a list of required configuration options for a kernel to support an Android system.

Resources

 * Peter McDermott's excellent description of his work to port Android to the Nokia N810.
 * See http://www.linuxfordevices.com/c/a/Linux-For-Devices-Articles/Porting-Android-to-a-new-device/
 * Also, see his annotated list of modified and added kernel files, at: http://www.linuxfordevices.com/files/misc/porting-android-to-a-new-device-p3.html


 * Jollen Chen's excellent presentation on system-level Android features, including an overview of kernel features unique to Android: Note: Parts of the presentation are in Chinese
 * http://www.slideshare.net/jollen/android-os-porting-introduction