Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Android Platform Anatomy

Android Platform Anatomy

This talk introduces application developers to the Android OS architecture internals and what’s actually beneath the hood. Through various diagrams, audience will be presented how a Android has been designed and what it means for system integrators to actually create their own device, provide a custom ROM and enhance the system beyond Google’s reference design.

Benjamin Zores

June 18, 2013
Tweet

More Decks by Benjamin Zores

Other Decks in Technology

Transcript

  1. COPYRIGHT © 2012 ALCATEL-LUCENT. ALL RIGHTS RESERVED. 1 Benjamin Zores

    Droidcon 2013 – 17-18th June 2013 – Paris, FR Android Platform Anatomy
  2. 2 COPYRIGHT © 2013 ALCATEL-LUCENT. ALL RIGHTS RESERVED. Android Platform

    Anatomy About Me ALCATEL LUCENT ANDROID PLATFORM ARCHITECT • Expert and Evangelist on Open Source Software. • 9y experience on various multimedia/network embedded devices design. • From low-level BSP integration to global applicative software architecture. OPEN SOURCE PROJECT FOUNDER, LEADER AND/OR CONTRIBUTOR FOR: • OpenBricks Embedded Linux cross-build framework. • GeeXboX Embedded multimedia HTPC distribution. • uShare UPnP A/V and DLNA Media Server. • MPlayer Linux media player application. LINUX FOUNDATION CONFERENCES FORMER LINUX FOUNDATION’S EVENTS SPEAKER • ELC 2010 GeeXboX Enna: Embedded Media Center • ELC-E 2010 State of Multimedia in 2010 Embedded Linux Devices • ELC-E 2011 Linux Optimization Techniques: How Not to Be Slow ? • ABS 2012 Android Device Porting Walkthrough • ELC-E 2012 Dive Into Android Networking: Adding Ethernet Connectivity • ABS 2013 Jelly Bean Device Porting Walkthrough
  3. 3 COPYRIGHT © 2013 ALCATEL-LUCENT. ALL RIGHTS RESERVED. Android Platform

    Anatomy Bibliographical References My Android bibles, from my Android mentors: Karim Yaghmour Marko Gargenta Followed by my own publications: « Discovering Android » Series of articles published in GNU/Linux Magazine France
  4. 4 COPYRIGHT © 2013 ALCATEL-LUCENT. ALL RIGHTS RESERVED. Android Platform

    Anatomy The Android Operating System The Android Operating System
  5. 6 COPYRIGHT © 2013 ALCATEL-LUCENT. ALL RIGHTS RESERVED. Android Platform

    Anatomy System Architecture Overview • Android OS: - Low-Level Linux Kernel & Drivers. - Hardware Abstraction Layer - System Native Libraries, Services, Daemons and Supervisors. - Java-based Applicative Framework. - Java Applications. - Default ones. - User additions.
  6. 7 COPYRIGHT © 2013 ALCATEL-LUCENT. ALL RIGHTS RESERVED. • Google

    - Up-to-date reference but limited devices support (reference design only). - https://android.googlesource.com/platform/manifest • Linaro - Most integrated with wide hardware support (at least for SoC vendors reference boards). - Many packages addition, compiler optimizations and fixes. - git://android.git.linaro.org/platform/manifest.git • Cyanogen Mod - Most features but mostly used for tuning already released commercial products. - https://github.com/cyanogenmod • Vendor BSP - Potentially outdated but best support for a given platform/SoC. Android Platform Anatomy Which Android Sources to Start With ?
  7. 8 COPYRIGHT © 2013 ALCATEL-LUCENT. ALL RIGHTS RESERVED. Android Platform

    Anatomy Device Porting How-To Device Porting How-To
  8. 9 COPYRIGHT © 2013 ALCATEL-LUCENT. ALL RIGHTS RESERVED. Android Platform

    Anatomy Device’s HW Internals (C) Opersys inc. 2012 Original at opersys.com/training
  9. 10 COPYRIGHT © 2013 ALCATEL-LUCENT. ALL RIGHTS RESERVED. • Recommendation:

    - Ensure your SoC is already supported by Linux kernel. • 1. Design your custom board around a reference design. • 2. Ensure your HW is compatible with Android CDD. • 3. Whenever possible, select HW peripherals that you know are supported. • 4. Ensure you have detailed specifications for each peripheral ! • 5. Think about SoC pin muxing and avoid multiplexing. • 6. Ensure you have HW schematics at hand. • Start writing drivers and adapting the platform ;-) Android Platform Anatomy Device Porting Checklist
  10. 11 COPYRIGHT © 2013 ALCATEL-LUCENT. ALL RIGHTS RESERVED. • Compatibility

    Goals - Provide a consistent application and HW environment to application developers. - Enable a consistent application experience for consumers. - Enable device manufacturers to differentiate while being compatible. - Minimize costs and overhead associated with compatibility. • Compatibility Definition Document (CDD) - List of hardware/software requirements per Android version. - Mandatory requirements for device certification and access to market place. • Compatibility Test Suite (CTS) - Set of unit designed to be integrated into the daily workflow (such as via a continuous build system) of the engineers building a device. - Its intent is to reveal incompatibilities early on, and ensure that the software remains compatible throughout the development process. • More info on http://source.android.com/compatibility/overview.html Android Platform Anatomy Building an Android-Compatible Device
  11. 12 COPYRIGHT © 2013 ALCATEL-LUCENT. ALL RIGHTS RESERVED. • Goals

    - Ensure Google device certification. - Provide Android PlayStore support. - Provide Android applications compatibility. - Allow access to Google Apps (GMail, Calendar ...). • Key HW Mandatory Requirements - Memory: Minimum of 340 MB (+ HW dedicated DMA memory). - Storage: Minimum of 2 GB. - Display: Minimum resolution of 426x320 Aspect ratio must be between 4:3 and 16:9. - Graphics: OpenGL ES 1.0 / 2.0 is mandatory. Hardware 2D / 3D engine is more than recommended. - DO NOT modify Google APIs and framework. Android Platform Anatomy Jelly Bean Device Compatibility Guidelines
  12. 14 COPYRIGHT © 2013 ALCATEL-LUCENT. ALL RIGHTS RESERVED. • Various

    Kernel “Androidisms”: - Ashmem, anonymous shared memory allocator. - Binder IPC and RMI system (a.k.a. message bus) - Pmem / ION, process contiguous memory allocator (usually vendor specific). - Logger, system logging facility. - Early Suspend - Wakelocks, power management and “always-off” policy. - Low Memory Killer, OOM tuning for OOM-Killer. - Alarm Timers. - Paranoid Network Security. - Timed GPIO. - RAM Console. - USB Gadget Driver, for ADB. • See http://elinux.org/Android_Kernel_Features for more details. • Most of them have been integrated upstream with kernel 3.3 to 3.5. Android Platform Anatomy Linux Kernel Androidisms
  13. 16 COPYRIGHT © 2013 ALCATEL-LUCENT. ALL RIGHTS RESERVED. • Usually

    no drivers built as modules: - No udev, smaller disk footprint, faster to load up. - Kernel is built for a static hardware configuration. • Except for proprietary drivers (usually) or those requiring firmware (e.g. Wi-Fi). • Can be added to Android FS separately as for firmwares. • Example of BoardConfig.mk settings: TARGET_KERNEL_DEFCONF := my_device_android_defconfig BOARD_KERNEL_CMDLINE := console=ttymxc2,115200 init=/init rw video=mxcfb0:dev=lcd,800x480@60,if=RGB24 fbmem=10M vmalloc=512M androidboot.console=ttymxc2 maxcpus=4 consoleblank=0 Hint: Develop and debug raw drivers on Linux OS, not Android. Android Platform Anatomy Linux Kernel Drivers Policy
  14. 18 COPYRIGHT © 2013 ALCATEL-LUCENT. ALL RIGHTS RESERVED. • Small

    footprint non-POSIX BSD-licensed C library: • No System V IPC (to avoid potential deny of services). • No support for locales and wide chars (i.e. multi-byte characters). - I18N is done at Dalvik/Application level • Custom pthread implementation, based on Linux futexes. - Bundled-in (no –lpthread), with no support for cancellation, process-shared mutexes and conditional variables. • No support for C++ exceptions. • Custom timezone support and DNS resolver library. • Kernel Logger driver liblog implementation. • Several functions are just stubs (i.e. runtime weirdness may happen). • Non standard /etc config files: - Dynamic user/groups management (no pam, group, passwd or shadow) - No fstab, no SysV init, no /etc/services or /etc/protocol. • See ndk/docs/system/libc/OVERVIEW.html for exhaustive list. Android Platform Anatomy Bionic C Library
  15. 19 COPYRIGHT © 2013 ALCATEL-LUCENT. ALL RIGHTS RESERVED. • In-memory

    Bionic System Properties management - Array of volatile property=value fields. - Can be get/set through getprop/setprop shell commands as well as Java API. - No documentation on existing properties. - Anyone can add his own custom properties (almost). • More persistent configuration settings are available in SQLite databases: - e.g: /data/data/com.android.providers.settings/database/settings.db - See secure and system tables. Android Platform Anatomy System Properties and Settings Databases
  16. 20 COPYRIGHT © 2013 ALCATEL-LUCENT. ALL RIGHTS RESERVED. • Some

    drivers are implemented in user-space through an HAL - Separates Android platform logic from hardware interface. - Offers “standard driver” definition for multiple components (e.g. Graphics, Audio, Camera, GPS, Radio …) and makes porting easier. - C/C++ vendor-specific libraries. - Communicate with Linux drivers through /proc, /sys and /dev. • Implementation - Google offers generic libhardware and libhardware_legacy templates. - OEMs implement “drivers” libs for their specific hardware. - Code often remains proprietary. - Code is loaded at runtime through pre-determined naming strategies. Android Platform Anatomy User-Space Hardware Abstraction Layer (HAL)
  17. 21 COPYRIGHT © 2013 ALCATEL-LUCENT. ALL RIGHTS RESERVED. • Series

    of dynamically loaded plugin (.so files): - MUST match board-specific plugin name - See APIs in hardware/libhardware/include/hardware - Default/dummy implementation provided in AOSP (hardware/libhardware/modules) - MUST be fully implemented by device vendor. - Can be closed-source. • For each HAL class module plugins are checked: - based on system properties values in the following order: - ro.hardware - ro.product.board - ro.board.platform - ro.arch - in the following directories order: - /vendor/lib/hw - /system/lib/hw Android Platform Anatomy Hardware Abstraction Library
  18. 22 COPYRIGHT © 2013 ALCATEL-LUCENT. ALL RIGHTS RESERVED. Android Platform

    Anatomy HAL Components Subsystem Component Role Audio audio.primary.so Configuration, Mixing, Routing, Streaming, Echo Cancellation, FX ... Framebuffer Built-in Configuration, Composition, Display GFX Allocator gralloc.so GPU Memory Buffer Management GFX HW Composer hwcomposer.so Surface Composition and Transformation Camera camera.so Facing, Orientation, Buffer Management, Pictures, Recording Wi-Fi Built-in AP/STA/P2P Configuration and Firmware Support Bluetooth bluetooth.default.so Low-level HW control GPS gps.so Configuration, Location Data Acquisition NFC nfc.default.so Low-level HW control Ligths lights.so Backlight and LEDS control Sensors sensors.so Accelerometer/Pressure/Proximity/Gravity/... Controls Radio libril-<company>- <version>.so Low-level HW control
  19. 23 COPYRIGHT © 2013 ALCATEL-LUCENT. ALL RIGHTS RESERVED. • Dalvik

    VM: - Register-based versus stack-based VM. - Runs .dex executable files. - More efficient and compact than JVM. • Possible Optimizations: Android Platform Anatomy Android Dalvik VM
  20. 24 COPYRIGHT © 2013 ALCATEL-LUCENT. ALL RIGHTS RESERVED. Android Platform

    Anatomy Peripherals Integration Type Difficulty Location Comment CPU Core High Bootloader, Kernel Hopefully provided by SoC manufacturer PMIC High Bootloader, Kernel Device Specific: to be configured … NAND/eMMC Easy Bootloader, Kernel Partitionning is up to you … LCD Easy Kernel Depends on selected peripheral … 2D/3D GPU Medium Kernel, Android HAL Hopefully provided by SoC manufacturer Touchscreen Easy Kernel Depends on selected peripheral … Audio Codec Medium Kernel, Android HAL Depends on selected peripheral … Video Codec Medium Kernel, Android HAL, Framework Hopefully provided by SoC manufacturer USB Easy Kernel GSM Radio Medium Kernel, Android HAL Depends on selected peripheral … Wi-Fi Medium Kernel, Android HAL Depends on selected peripheral … Bluetooth Medium Kernel, Android HAL Depends on selected peripheral … Ethernet Easy Kernel, Android HAL, Framework NFC Medium Kernel, Android HAL Depends on selected peripheral … GPS Medium Kernel, Android HAL Depends on selected peripheral … Sensors Medium Kernel, Android HAL Depends on selected peripheral …
  21. 25 COPYRIGHT © 2013 ALCATEL-LUCENT. ALL RIGHTS RESERVED. Android Platform

    Anatomy Android Initialization Android Initialization
  22. 26 COPYRIGHT © 2013 ALCATEL-LUCENT. ALL RIGHTS RESERVED. • Android

    init semantics is different from: - System V init - BusyBox init Android Platform Anatomy Init: Theory of Operations
  23. 27 COPYRIGHT © 2013 ALCATEL-LUCENT. ALL RIGHTS RESERVED. • Proprietary

    init language based on rules and conditions. • Able to spawn services and restart them on failures through signals and sockets. • Initialization Steps: - Creates basic filesystem (/dev, /proc, /sys) and mounts it. - Parses /init.rc - Parses /init.${hw_name}.rc based on kernel command-line or /proc/cpuinfo - Build exec queues - Start triggers and associated actions and services. - e.g. "early-init", "init", "early-fs", "fs", "post-fs", "early-boot", "boot" … Android Platform Anatomy Android Init
  24. 31 COPYRIGHT © 2013 ALCATEL-LUCENT. ALL RIGHTS RESERVED. Android Platform

    Anatomy Surface Composition: Theory of Operations
  25. 32 COPYRIGHT © 2013 ALCATEL-LUCENT. ALL RIGHTS RESERVED. Android Platform

    Anatomy Surface Composition: Theory of Operations
  26. 33 COPYRIGHT © 2013 ALCATEL-LUCENT. ALL RIGHTS RESERVED. Android Platform

    Anatomy Graphics Detailed SW Architecture (1/2)
  27. 34 COPYRIGHT © 2013 ALCATEL-LUCENT. ALL RIGHTS RESERVED. Android Platform

    Anatomy Graphics Detailed SW Architecture (2/2)
  28. 35 COPYRIGHT © 2013 ALCATEL-LUCENT. ALL RIGHTS RESERVED. • Originally

    meant for GPU memory, but not only anymore ! • Implements libhardware/include/hardware/gralloc.h • (Un)register and (un)lock memory buffers. • Usually consist of contiguous memory (flag GRALLOC_USAGE_FORCE_CONTIGUOUS) for DMA operations. • Jelly Bean now uses triple-buffer for framebuffer. • Support different kind of buffers: Android Platform Anatomy (GPU) Memory Management: Gralloc - GLES texture - GLES render surface - 2D HW blitter - HWComposer - Framebuffer - HW video encoder - Input HW camera pipeline - Output HW camera pipeline.
  29. 36 COPYRIGHT © 2013 ALCATEL-LUCENT. ALL RIGHTS RESERVED. • Create

    a custom bootanimation.zip archive: • In BoardConfig.mk: - PRODUCT_COPY_FILES += \ device/company/my_device/bootanimation.zip:system/media/bootanimation.zip • Note: Create the archive _WITHOUT_ compression !! - => zip -0 Android Platform Anatomy Custom Boot Logo
  30. 37 COPYRIGHT © 2013 ALCATEL-LUCENT. ALL RIGHTS RESERVED. • Hack

    over frameworks/base/cmds/bootanimation: - Preloads the whole ZIP archive image files at once - Use an OpenGL|ES texture cache - Bootanimation doesn’t stutter anymore ! - => See patchset on http://goo.gl/f1Lc4 (CyanogenMod) • Hack over BoardConfig.mk: Android Platform Anatomy Enhanced Boot Animation
  31. 40 COPYRIGHT © 2013 ALCATEL-LUCENT. ALL RIGHTS RESERVED. • Contains

    device-specific configuration properties that affect the behavior of input devices. • Optional for standard peripherals such as HID keyboard and mouse. • Mandatory for built-in embedded devices such as touch screens. • Location: - Located by USB vendor, product (and optionally version) id or by input device name. - The following paths are consulted in order: Android Platform Anatomy Input Device Configuration Files (.idc)
  32. 41 COPYRIGHT © 2013 ALCATEL-LUCENT. ALL RIGHTS RESERVED. • Add

    ${driver_name}.idc to system: - In device.mk, add: - PRODUCT_COPY_FILES += device/company/my_device/${driver_name}.idc:system/usr/idc/${driver_name}.idc • Example of ${driver_name}.idc: Android Platform Anatomy Touchscreen Device Configuration File
  33. 46 COPYRIGHT © 2013 ALCATEL-LUCENT. ALL RIGHTS RESERVED. Android Platform

    Anatomy Audio HAL Define Android framework supported input/output devices Private API implementation Turn on ALSA driver control name
  34. 47 COPYRIGHT © 2013 ALCATEL-LUCENT. ALL RIGHTS RESERVED. Android Platform

    Anatomy Audio Policy (/etc/audio_policy.conf) List supported sampling rates, formats, devices … for each audio.<module>.so
  35. 54 COPYRIGHT © 2013 ALCATEL-LUCENT. ALL RIGHTS RESERVED. • Low-level

    kernel drivers work just like a charm up to Linux user-space. • For Java apps connectivity, each connection type must register a specific ConnectivityManager and associated ConnectivityService that handles device configuration, packet routing and HTTP(S) proxy settings. Android Platform Anatomy Network & Connectivity
  36. 56 COPYRIGHT © 2013 ALCATEL-LUCENT. ALL RIGHTS RESERVED. • Android

    SW architecture is ages away from your GNU/Linux experience. - Low-level drivers are Linux-compatible but that’s pretty much all about it. - One need trained experts to bring Android devices to life. • Android provides a HAL that unifies hardware interfaces. - Facilitate device porting. - But terribly lacks of documentation (same goes for the whole platform). • Porting devices to Android is an extremely complex task. - But it makes application developers happy by providing them a (nearly) seamless experience across all devices. Android Platform Anatomy Conclusion