Learning AOSPAndroid Linux Device Drivers22nd August 2013
@nanikjava
ozandroid.info
bit.ly/12r7yOr
ANDROID & LINUX
ANDROID LINUX DRIVERS Android core low level
Software & Hardware drivers (mostly software)
Minimum tasks performed
Access via framework layer or library
MAINLINE VS VENDOR LINUX v3.3 driver merge (excl wakelock)
v3.5 wakelock merge
Patch prior to v3.5 (different directory)
Vendor “normally” releases Linux kernel
ANDROID DRIVERS ashmem (mm/ashmem.c) binder (drivers/staging/android/binder.c) lowmemorykiller (drivers/staging/android/lowmemorykiller.c) ram_console (drivers/staging/android/ram_console.c) timed_gpio (drivers/staging/android/timed_gpio.c) usb – otg, adb, gadget, accessories, etc (drivers/usb/gadget) logger (drivers/staging/android/logger.c) alarm (drivers/staging/android/alarm.c) wakelock (kernel/power/wakelock.c)
LAYERS INTERACTION
BINDER Kernel
drivers/staging/binder.c
Framework frameworks/base/core/java/android/os/Binder.java frameworks/base/core/jni/android_util_Binder.java frameworks/native/cmds/servicemanager/binder.c frameworks/native/cmds/servicemanager/service_manager.c
Virtual Filesystem /sys/kernel/debug/binder → debugging /dev/binder → used internally by framework
Kernel drivers/staging/android/logger.c
Framework frameworks/base/core/java/android/util/Log.java frameworks/base/core/jni/android_util_Log.cpp system/core/liblog/logd_write.c
Virtual Filesystem /dev/events /dev/main /dev/radio /dev/system
LOGGER
USB
LINUX CONFIG
CONFIG_ANDROID=y CONFIG_ANDROID_BINDER_IPC=y CONFIG_ASHMEM=y CONFIG_ANDROID_LOGGER=y CONFIG_ANDROID_TIMED_OUTPUT=y CONFIG_ANDROID_LOW_MEMORY_KILLER=y
BENEFITS
Troubleshooting/Debugging
Extending framework and/or services
Helped in writing native code
RESOURCES
source.android.com
androidxref.com
Source code