SlideShare a Scribd company logo
1 of 31
Download to read offline
Porting Android ICS to a custom board
                   A war story




Matthias Brugger
ELCE 2012 – Porting Android ICS




Outline

    ●
        Android beyond smartphones?
    ●
        Why a war story
    ●
        Our custom board
    ●
        Android building system
    ●
        Lessons learned
        ●
          Add device
        ●
          Bootloader/Kernel integration
        ●
          Powersupply
        ●
          Button
        ●
          Touchscreen calibration
        ●
          Wi-Fi
        ●
          Sound
        ●
          HW acceleration
ELCE 2012 – Porting Android ICS




Android beyond smartphones?

    ✔ Easy to implement applications (SDK, API, Java)
    ✔ Human-Machine-Interface
      ✔ well defined
      ✔ tested in the wild
    ✔ Reliability of the system
    ► good for HMI centred embedded systems


    ✗ Integrate native application
    ✗ Porting to a new board can be a war story
ELCE 2012 – Porting Android ICS




Why is it a war story

     ●
         Little documentation
     ●
         Small community
     ●
         Vendor specific communities
     ●
         Developing process of Android
     ●
         A huge jungle of programming languages
ELCE 2012 – Porting Android ICS




Why is it a war story

     ●
         Android is Linux, but... Android is not Linux!
         ●
           Patched Kernel adds new features
         ●
           Userspace varies widely
           ●
             Own libc (bionic)
           ●
             Lots of basic building blocks are not integrated
             ●
               XWindows
             ●
               Busybox
           ●
             Core system is executed on dalvikVM
           ●
             IPC implementation (binder) varies from SystemV
           ●
             Building blocks are compiled to dynamic libraries
             which are loaded by the core system in different ways and layers
ELCE 2012 – Porting Android ICS




Why is it a war story
ELCE 2012 – Porting Android ICS




Our custom board
ELCE 2012 – Porting Android ICS




Our custom board

    ●
        One button only
    ●
        No phone
    ●
        No battery monitor
    ●
        Ethernet
    ●
        Wifi
    ●
        Touchscreen
    ●
        Sound
    ●
        HW acceleration from OMAP3
ELCE 2012 – Porting Android ICS




Android building system

  ●
      Important folders
      ●
        build
      ●
        frameworks/base
      ●
        external
      ●
        hardware
      ●
        device
      ●
        out/target/product/<product_name>
ELCE 2012 – Porting Android ICS




           Lessons learned
ELCE 2012 – Porting Android ICS




Lesson learned I: Add device to our build
  ●
      Devices are found under device/<manufactor>/<board> folder
      ●
        <device_name>.mk
        ●
          Define which basic packages to install for the board
        ●
          Inherit from default product (in build/target/product)
        ●
          Add the proper device:
      ●
        device.mk
        ●
          Define files that have to be copyed to the rootfs
        ●
          Define where to find the overlay
      ●
        BoardConfig.mk
        ●
          Define build flags
      ●
        vendorsetup.sh
        ●
          Add “lunch” menu option
ELCE 2012 – Porting Android ICS




Lessons Learned II: Bootloader/Kernel integration
  ●
      Problems
      ●
        In AOSP precompiled Kernel image
      ●
        Specific compiler needed?

  ●
      Solution
      ●
        We add a “wrapper” in the Makefile
      ●
        After building the android “userspace” build
        ●
          Bootloader
        ●
          Kernel
        ●
          Copy kernel modules to out/target/product

  ●
      Extra boot parameter:
      ●
        androidboot.console=ttyO2
      ●
        init=/init
ELCE 2012 – Porting Android ICS




Lessons Learned III: Powersupply
  ●
      Boot hangs on splash screen
  ●
      Have a look with logcat what's going on
ELCE 2012 – Porting Android ICS




Lessons Learned III: Powersupply
  E/BatteryService( 1008): Could not open /sys/class/power_supply
  (…)
  I/SystemServer( 1008): Battery Service
  W/dalvikvm( 1008): No implementation found for native Lcom/android/server/BatteryService;.native_update ()V
  W/dalvikvm( 1008): threadid=11: thread exiting with uncaught exception (group=0x409e11f8)
  I/Process ( 1008): Sending signal. PID: 1008 SIG: 9
  E/AndroidRuntime( 1008): *** FATAL EXCEPTION IN SYSTEM PROCESS: android.server.ServerThread
  E/AndroidRuntime( 1008): java.lang.UnsatisfiedLinkError: native_update
  E/AndroidRuntime( 1008): at com.android.server.BatteryService.native_update(Native Method)
  E/AndroidRuntime( 1008): at com.android.server.BatteryService.update(BatteryService.java:233)
  E/AndroidRuntime( 1008): at com.android.server.BatteryService.<init>(BatteryService.java:148)
  E/AndroidRuntime( 1008): at com.android.server.ServerThread.run(SystemServer.java:196)
  I/Zygote ( 967): Exit zygote because system server (1008) has terminated
  E/installd( 913): eof
  E/installd( 913): failed to read size
  I/installd( 913): closing connection
  I/installd( 913): new connection
  I/ServiceManager( 903): service 'gfxinfo' died
  I/ServiceManager( 903): service 'activity' died
  I/ServiceManager( 903): service 'cpuinfo' died
  I/ServiceManager( 903): service 'sensorservice' died
  I/ServiceManager( 903): service 'meminfo' died
  I/ServiceManager( 903): service 'account' died
  I/ServiceManager( 903): service 'usagestats' died
  I/ServiceManager( 903): service 'permission' died
  I/ServiceManager( 903): service 'hardware' died
  I/ServiceManager( 903): service 'content' died
  (...)
ELCE 2012 – Porting Android ICS




Lessons Learned III: Powersupply
ELCE 2012 – Porting Android ICS




Lessons Learned III: Powersupply
  ●
      What has happened?
      ●
        When JNI is loaded, it registers the low level services (e.g. BatteryService)
        ●
          read values from sysfs
        ●
          BatteryService JNI registers function native_update at BatteryService.java

      ●
          But...
          ●
            BatteryService JNI interface doesn't find “/sys/class/power_supply”
          ●
            Returns error, which is ignored by JNI_OnLoad

      ●
          SystemServer thread creates BatteryService when executed
          ●
            BatteryService tries to update values invoking native_update
          ●
            No JNI interface registered – SystemServer dies...
ELCE 2012 – Porting Android ICS




Lessons Learned III: Powersupply
  ●
      Solution
        ●
          No working battery monitor in our system
          → No power supply class in kernel
        ●
           Adding the power supply class
          ●
             Shows battery empty warning in status bar
        ●
           Add the “test power driver”
          ●
             Shows Battery at 50% charging fixed

  ●
      Has influence on the behaviour of the Power Manager
ELCE 2012 – Porting Android ICS




Lessons Learned IV: Button Integration
  ●
      Can be found in frameworks/base/services/input:
      ●
        Android scans /dev/input folder in a loop
      ●
        Polls for events using epoll
      ●
        Identifies touchscreens, joysticks, mice, keyboards automatically

      ●
          Key Layout File (/system/usr/keylayout) maps raw input key to
          internal Android key representation
      ●
          Key Char Map File (/system/usr/keychars) describes
          action for internal Android key
ELCE 2012 – Porting Android ICS




Lessons Learned IV: Button Integration
  ●
      Our case
      ●
        Just one button, no external keyboard
  ●
      Two alternatives:
      ●
        Define own Key Layout/Key Char Map files
      ●
        Configure key code in kernel appropriately
      ●
        Beware Key Layout File uses numeric number of key code
      ●
        Not all values in Key Layout have a define in include/linux/input.h
ELCE 2012 – Porting Android ICS




Lessons Learned V: Touchscreen calibration
  ●
      Detection and input analogous to button integration
  ●
      Driver sends X-Y-coordinates

  ●
      Callibrate the touchscreen
      ●
        We have to reach all parts of the screen easily
        ●
           Turn on show touches in Settings/Developer options
        ●
           Adjust max and min values of your touchscreen in the plattform data
ELCE 2012 – Porting Android ICS




Lessons Learned VI: Wi-Fi

  ●
    Example of complexity of Android source code
    ●
      Different libraries and services
    ●
      5 different folders with userspace code
  ●
    Uses wpa_supplicant to connect to a protected WLAN
    ●
      Enhanced with Android specific commands
      ●
        START, STOP, SCAN-ACTIVE, SCAN-PASSIVE, RSSI, LINKSPEED, …
ELCE 2012 – Porting Android ICS




Lessons Learned VI: Wi-Fi
ELCE 2012 – Porting Android ICS




Lessons Learned VI: Wi-Fi
  ●
      Integration
      ●
        Legacy implementation reads wpa supplicant config file
        ●
          /data/misc/wifi/wpa_supplicant.conf → product specific
        ●
          /system/etc/wifi/wpa_supplicant.conf → template

      ●
          Kernel and firmware module
          ●
            In BoardConfig.mk define:
            ●
              WIFI_DRIVER_MODULE_PATH
            ●
              WIFI_DRIVER_MODULE_NAME
            ●
              WIFI_FIRMWARE_LOADER
          ●
            Hardware legacy layer in charge of loading/unloading
            kernel module and firmware; starts/stops wpa_supplicant

      ●
          Start wpa_supplicant and dhcp for wlan
            ●
              service wpa_supplicant /system/bin/wpa_supplicant -Dwext -iwlan0
            ●
              service dhcpcd_wlan0 /system/bin/dhcpcd -ABKL
ELCE 2012 – Porting Android ICS




Lessons Learned VII: Audio
  ●
      Audio player is stagefright
  ●
      AudioFlinger interfaces hardware abstraction
      ●
        Uses struct audio_hw_device in hardware/libhardware/include
  ●
      audio.primary.<device_name>
      ●
        Encapsulates the hardware - custom implementation
ELCE 2012 – Porting Android ICS




Lessons Learned VIII: Hardware Acceleration
  ●
      Two possibilities
      ●
        Integrate mulitmedia framework supporting HW acceleration
        ✔ Has bindings for HW accelerator
        ✔ Might have more codecs then stagefright


          ✗ Maintenace might be costly


      ●
          Integrate HW acceleration support in existing Android multimedia framework
          ✔ Should be easy to maintain


          ✗ Need to create bindings for the HW accelerator
ELCE 2012 – Porting Android ICS




Lessons Learned VIII: Hardware Acceleration
  libmediaplayerservice:
ELCE 2012 – Porting Android ICS




Lessons Learned VIII: Hardware Acceleration
  ●
      Add own multimedia framework
      ●
        Register your framework as MediaPlayerInterface
      ●
        Create player instance in MediaPlayerService
      ●
        Implement new MetadataRetriever in MetadataRetrieverClient

  ●
      Implement wrapper
      ●
        Audio sink using AudioTrack
      ●
        Video sink using Surface
ELCE 2012 – Porting Android ICS




Lessons Learned VIII: Hardware Acceleration
  libsurfaceflinger:
ELCE 2012 – Porting Android ICS




Lessons Learned VI: Hardware Acceleration
  libstagefright:
Porting Android ICS to a custom board
                A war story




matthias.bgg@gmail.com
A War Story: Porting Android 4.0 to a Custom Board (ELCE 2012)

More Related Content

What's hot

Understanding the Android System Server
Understanding the Android System ServerUnderstanding the Android System Server
Understanding the Android System ServerOpersys inc.
 
Android crash debugging
Android crash debuggingAndroid crash debugging
Android crash debuggingAshish Agrawal
 
Workshop su Android Kernel Hacking
Workshop su Android Kernel HackingWorkshop su Android Kernel Hacking
Workshop su Android Kernel HackingDeveler S.r.l.
 
Inside Android's UI
Inside Android's UIInside Android's UI
Inside Android's UIOpersys inc.
 
Android for Embedded Linux Developers
Android for Embedded Linux DevelopersAndroid for Embedded Linux Developers
Android for Embedded Linux DevelopersOpersys inc.
 
Working with the AOSP - Linaro Connect Asia 2013
Working with the AOSP - Linaro Connect Asia 2013Working with the AOSP - Linaro Connect Asia 2013
Working with the AOSP - Linaro Connect Asia 2013Opersys inc.
 
Android Security, From the Ground Up
Android Security, From the Ground UpAndroid Security, From the Ground Up
Android Security, From the Ground UpOpersys inc.
 
Android On Development Boards at AnDevCon3
Android On Development Boards at AnDevCon3Android On Development Boards at AnDevCon3
Android On Development Boards at AnDevCon3Opersys inc.
 
Embedded Android Workshop with Marshmallow
Embedded Android Workshop with MarshmallowEmbedded Android Workshop with Marshmallow
Embedded Android Workshop with MarshmallowOpersys inc.
 
Android is NOT just 'Java on Linux'
Android is NOT just 'Java on Linux'Android is NOT just 'Java on Linux'
Android is NOT just 'Java on Linux'Tetsuyuki Kobayashi
 
Android Variants, Hacks, Tricks and Resources
Android Variants, Hacks, Tricks and ResourcesAndroid Variants, Hacks, Tricks and Resources
Android Variants, Hacks, Tricks and ResourcesOpersys inc.
 
Android Hacks, Variants, Tricks and Resources ESC SV 2012
Android Hacks, Variants, Tricks and Resources ESC SV 2012Android Hacks, Variants, Tricks and Resources ESC SV 2012
Android Hacks, Variants, Tricks and Resources ESC SV 2012Opersys inc.
 
Customizing AOSP For Different Embedded Devices And Integration at Applicatio...
Customizing AOSP For Different Embedded Devices And Integration at Applicatio...Customizing AOSP For Different Embedded Devices And Integration at Applicatio...
Customizing AOSP For Different Embedded Devices And Integration at Applicatio...ijafrc
 
Android Variants, Hacks, Tricks and Resources presented at AnDevConII
Android Variants, Hacks, Tricks and Resources presented at AnDevConIIAndroid Variants, Hacks, Tricks and Resources presented at AnDevConII
Android Variants, Hacks, Tricks and Resources presented at AnDevConIIOpersys inc.
 
Booting Android: bootloaders, fastboot and boot images
Booting Android: bootloaders, fastboot and boot imagesBooting Android: bootloaders, fastboot and boot images
Booting Android: bootloaders, fastboot and boot imagesChris Simmonds
 

What's hot (20)

Porting Android
Porting AndroidPorting Android
Porting Android
 
Understanding the Android System Server
Understanding the Android System ServerUnderstanding the Android System Server
Understanding the Android System Server
 
Android crash debugging
Android crash debuggingAndroid crash debugging
Android crash debugging
 
Workshop su Android Kernel Hacking
Workshop su Android Kernel HackingWorkshop su Android Kernel Hacking
Workshop su Android Kernel Hacking
 
Inside Android's UI
Inside Android's UIInside Android's UI
Inside Android's UI
 
Android for Embedded Linux Developers
Android for Embedded Linux DevelopersAndroid for Embedded Linux Developers
Android for Embedded Linux Developers
 
Working with the AOSP - Linaro Connect Asia 2013
Working with the AOSP - Linaro Connect Asia 2013Working with the AOSP - Linaro Connect Asia 2013
Working with the AOSP - Linaro Connect Asia 2013
 
Android Security, From the Ground Up
Android Security, From the Ground UpAndroid Security, From the Ground Up
Android Security, From the Ground Up
 
Android Internals
Android InternalsAndroid Internals
Android Internals
 
Android On Development Boards at AnDevCon3
Android On Development Boards at AnDevCon3Android On Development Boards at AnDevCon3
Android On Development Boards at AnDevCon3
 
How To Build Android for ARM Chip boards
How To Build Android for ARM Chip boardsHow To Build Android for ARM Chip boards
How To Build Android for ARM Chip boards
 
Embedded Android Workshop with Marshmallow
Embedded Android Workshop with MarshmallowEmbedded Android Workshop with Marshmallow
Embedded Android Workshop with Marshmallow
 
Android is NOT just 'Java on Linux'
Android is NOT just 'Java on Linux'Android is NOT just 'Java on Linux'
Android is NOT just 'Java on Linux'
 
Android Variants, Hacks, Tricks and Resources
Android Variants, Hacks, Tricks and ResourcesAndroid Variants, Hacks, Tricks and Resources
Android Variants, Hacks, Tricks and Resources
 
Android Hacks, Variants, Tricks and Resources ESC SV 2012
Android Hacks, Variants, Tricks and Resources ESC SV 2012Android Hacks, Variants, Tricks and Resources ESC SV 2012
Android Hacks, Variants, Tricks and Resources ESC SV 2012
 
Customizing AOSP For Different Embedded Devices And Integration at Applicatio...
Customizing AOSP For Different Embedded Devices And Integration at Applicatio...Customizing AOSP For Different Embedded Devices And Integration at Applicatio...
Customizing AOSP For Different Embedded Devices And Integration at Applicatio...
 
Android Variants, Hacks, Tricks and Resources presented at AnDevConII
Android Variants, Hacks, Tricks and Resources presented at AnDevConIIAndroid Variants, Hacks, Tricks and Resources presented at AnDevConII
Android Variants, Hacks, Tricks and Resources presented at AnDevConII
 
Hacking Android OS
Hacking Android OSHacking Android OS
Hacking Android OS
 
Booting Android: bootloaders, fastboot and boot images
Booting Android: bootloaders, fastboot and boot imagesBooting Android: bootloaders, fastboot and boot images
Booting Android: bootloaders, fastboot and boot images
 
Embedded Android : System Development - Part III
Embedded Android : System Development - Part IIIEmbedded Android : System Development - Part III
Embedded Android : System Development - Part III
 

Viewers also liked

ABS 2013: Android Jelly Bean Device Porting Walkthrough
ABS 2013: Android Jelly Bean Device Porting WalkthroughABS 2013: Android Jelly Bean Device Porting Walkthrough
ABS 2013: Android Jelly Bean Device Porting WalkthroughBenjamin Zores
 
ABS 2014 - Android Kit Kat Internals
ABS 2014 - Android Kit Kat InternalsABS 2014 - Android Kit Kat Internals
ABS 2014 - Android Kit Kat InternalsBenjamin Zores
 
Apache Any23 - Anything to Triples
Apache Any23 - Anything to TriplesApache Any23 - Anything to Triples
Apache Any23 - Anything to TriplesMichele Mostarda
 
Script writing & story board (Grade 10 Movie Project - Class work)
Script writing & story board (Grade 10 Movie Project - Class work)Script writing & story board (Grade 10 Movie Project - Class work)
Script writing & story board (Grade 10 Movie Project - Class work)Jess Hugo
 
M Dot Extinction: The Next Evolution of Mobile Web
M Dot Extinction: The Next Evolution of Mobile WebM Dot Extinction: The Next Evolution of Mobile Web
M Dot Extinction: The Next Evolution of Mobile WebMobify
 
AUDIENCE - 4 Keys to the Future of Mobile Video
AUDIENCE - 4 Keys to the Future of Mobile Video AUDIENCE - 4 Keys to the Future of Mobile Video
AUDIENCE - 4 Keys to the Future of Mobile Video Liam Boogar-Azoulay
 
Y&R Global CEO David Sable on Mobile Disruption at 2016 Mobile World Congress
Y&R Global CEO David Sable on Mobile Disruption at 2016 Mobile World CongressY&R Global CEO David Sable on Mobile Disruption at 2016 Mobile World Congress
Y&R Global CEO David Sable on Mobile Disruption at 2016 Mobile World CongressYoung & Rubicam
 
Mobile Is Eating the World (2016)
Mobile Is Eating the World (2016)Mobile Is Eating the World (2016)
Mobile Is Eating the World (2016)a16z
 
Mobile-First SEO - The Marketers Edition #3XEDigital
Mobile-First SEO - The Marketers Edition #3XEDigitalMobile-First SEO - The Marketers Edition #3XEDigital
Mobile-First SEO - The Marketers Edition #3XEDigitalAleyda Solís
 
UX, ethnography and possibilities: for Libraries, Museums and Archives
UX, ethnography and possibilities: for Libraries, Museums and ArchivesUX, ethnography and possibilities: for Libraries, Museums and Archives
UX, ethnography and possibilities: for Libraries, Museums and ArchivesNed Potter
 

Viewers also liked (10)

ABS 2013: Android Jelly Bean Device Porting Walkthrough
ABS 2013: Android Jelly Bean Device Porting WalkthroughABS 2013: Android Jelly Bean Device Porting Walkthrough
ABS 2013: Android Jelly Bean Device Porting Walkthrough
 
ABS 2014 - Android Kit Kat Internals
ABS 2014 - Android Kit Kat InternalsABS 2014 - Android Kit Kat Internals
ABS 2014 - Android Kit Kat Internals
 
Apache Any23 - Anything to Triples
Apache Any23 - Anything to TriplesApache Any23 - Anything to Triples
Apache Any23 - Anything to Triples
 
Script writing & story board (Grade 10 Movie Project - Class work)
Script writing & story board (Grade 10 Movie Project - Class work)Script writing & story board (Grade 10 Movie Project - Class work)
Script writing & story board (Grade 10 Movie Project - Class work)
 
M Dot Extinction: The Next Evolution of Mobile Web
M Dot Extinction: The Next Evolution of Mobile WebM Dot Extinction: The Next Evolution of Mobile Web
M Dot Extinction: The Next Evolution of Mobile Web
 
AUDIENCE - 4 Keys to the Future of Mobile Video
AUDIENCE - 4 Keys to the Future of Mobile Video AUDIENCE - 4 Keys to the Future of Mobile Video
AUDIENCE - 4 Keys to the Future of Mobile Video
 
Y&R Global CEO David Sable on Mobile Disruption at 2016 Mobile World Congress
Y&R Global CEO David Sable on Mobile Disruption at 2016 Mobile World CongressY&R Global CEO David Sable on Mobile Disruption at 2016 Mobile World Congress
Y&R Global CEO David Sable on Mobile Disruption at 2016 Mobile World Congress
 
Mobile Is Eating the World (2016)
Mobile Is Eating the World (2016)Mobile Is Eating the World (2016)
Mobile Is Eating the World (2016)
 
Mobile-First SEO - The Marketers Edition #3XEDigital
Mobile-First SEO - The Marketers Edition #3XEDigitalMobile-First SEO - The Marketers Edition #3XEDigital
Mobile-First SEO - The Marketers Edition #3XEDigital
 
UX, ethnography and possibilities: for Libraries, Museums and Archives
UX, ethnography and possibilities: for Libraries, Museums and ArchivesUX, ethnography and possibilities: for Libraries, Museums and Archives
UX, ethnography and possibilities: for Libraries, Museums and Archives
 

Similar to A War Story: Porting Android 4.0 to a Custom Board (ELCE 2012)

Robot controlled car using Wireless Module
 Robot controlled car using Wireless Module Robot controlled car using Wireless Module
Robot controlled car using Wireless Moduleshreyaseksambe
 
OWF12/PAUG Conf Days Alternative to google's android emulator, daniel fages, ...
OWF12/PAUG Conf Days Alternative to google's android emulator, daniel fages, ...OWF12/PAUG Conf Days Alternative to google's android emulator, daniel fages, ...
OWF12/PAUG Conf Days Alternative to google's android emulator, daniel fages, ...Paris Open Source Summit
 
Android Things, from mobile apps to physical world
Android Things, from mobile apps to physical worldAndroid Things, from mobile apps to physical world
Android Things, from mobile apps to physical worldStefano Sanna
 
Android Things, from mobile apps to physical world - Stefano Sanna - Giovanni...
Android Things, from mobile apps to physical world - Stefano Sanna - Giovanni...Android Things, from mobile apps to physical world - Stefano Sanna - Giovanni...
Android Things, from mobile apps to physical world - Stefano Sanna - Giovanni...Codemotion
 
Android Things, from mobile apps to physical world by Giovanni Di Gialluca an...
Android Things, from mobile apps to physical world by Giovanni Di Gialluca an...Android Things, from mobile apps to physical world by Giovanni Di Gialluca an...
Android Things, from mobile apps to physical world by Giovanni Di Gialluca an...Codemotion
 
Ami device driver_services ver. 1.1
Ami device driver_services ver.  1.1Ami device driver_services ver.  1.1
Ami device driver_services ver. 1.1Sunil Sam
 
ios-mobile-app-development-intro
ios-mobile-app-development-introios-mobile-app-development-intro
ios-mobile-app-development-introRemesh Govind M
 
Droidcon uk2012 androvm
Droidcon uk2012 androvmDroidcon uk2012 androvm
Droidcon uk2012 androvmdfages
 
Android internals
Android internalsAndroid internals
Android internalsrabah3
 
Software Update Mechanisms: Selecting the Best Solutin for Your Embedded Linu...
Software Update Mechanisms: Selecting the Best Solutin for Your Embedded Linu...Software Update Mechanisms: Selecting the Best Solutin for Your Embedded Linu...
Software Update Mechanisms: Selecting the Best Solutin for Your Embedded Linu...ICS
 
iphone application development
iphone application developmentiphone application development
iphone application developmentarpitnot4u
 
[Android Codefest Germany] Adding x86 target to your Android app by Xavier Ha...
[Android Codefest Germany] Adding x86 target to your Android app by Xavier Ha...[Android Codefest Germany] Adding x86 target to your Android app by Xavier Ha...
[Android Codefest Germany] Adding x86 target to your Android app by Xavier Ha...BeMyApp
 
Accessing Hardware on Android
Accessing Hardware on AndroidAccessing Hardware on Android
Accessing Hardware on AndroidGary Bisson
 
Android Internals and Toolchain
Android Internals and ToolchainAndroid Internals and Toolchain
Android Internals and ToolchainVladimir Kotov
 

Similar to A War Story: Porting Android 4.0 to a Custom Board (ELCE 2012) (20)

Android Attacks
Android AttacksAndroid Attacks
Android Attacks
 
Robot controlled car using Wireless Module
 Robot controlled car using Wireless Module Robot controlled car using Wireless Module
Robot controlled car using Wireless Module
 
OWF12/PAUG Conf Days Alternative to google's android emulator, daniel fages, ...
OWF12/PAUG Conf Days Alternative to google's android emulator, daniel fages, ...OWF12/PAUG Conf Days Alternative to google's android emulator, daniel fages, ...
OWF12/PAUG Conf Days Alternative to google's android emulator, daniel fages, ...
 
Android Things, from mobile apps to physical world
Android Things, from mobile apps to physical worldAndroid Things, from mobile apps to physical world
Android Things, from mobile apps to physical world
 
Using the NDK and Renderscript
Using the NDK and RenderscriptUsing the NDK and Renderscript
Using the NDK and Renderscript
 
Android Things, from mobile apps to physical world - Stefano Sanna - Giovanni...
Android Things, from mobile apps to physical world - Stefano Sanna - Giovanni...Android Things, from mobile apps to physical world - Stefano Sanna - Giovanni...
Android Things, from mobile apps to physical world - Stefano Sanna - Giovanni...
 
Android Things, from mobile apps to physical world by Giovanni Di Gialluca an...
Android Things, from mobile apps to physical world by Giovanni Di Gialluca an...Android Things, from mobile apps to physical world by Giovanni Di Gialluca an...
Android Things, from mobile apps to physical world by Giovanni Di Gialluca an...
 
Android My Seminar
Android My SeminarAndroid My Seminar
Android My Seminar
 
Ami device driver_services ver. 1.1
Ami device driver_services ver.  1.1Ami device driver_services ver.  1.1
Ami device driver_services ver. 1.1
 
Android presentation
Android presentationAndroid presentation
Android presentation
 
ios-mobile-app-development-intro
ios-mobile-app-development-introios-mobile-app-development-intro
ios-mobile-app-development-intro
 
Droidcon uk2012 androvm
Droidcon uk2012 androvmDroidcon uk2012 androvm
Droidcon uk2012 androvm
 
Android architechture
Android architechtureAndroid architechture
Android architechture
 
Android internals
Android internalsAndroid internals
Android internals
 
Software Update Mechanisms: Selecting the Best Solutin for Your Embedded Linu...
Software Update Mechanisms: Selecting the Best Solutin for Your Embedded Linu...Software Update Mechanisms: Selecting the Best Solutin for Your Embedded Linu...
Software Update Mechanisms: Selecting the Best Solutin for Your Embedded Linu...
 
iphone application development
iphone application developmentiphone application development
iphone application development
 
[Android Codefest Germany] Adding x86 target to your Android app by Xavier Ha...
[Android Codefest Germany] Adding x86 target to your Android app by Xavier Ha...[Android Codefest Germany] Adding x86 target to your Android app by Xavier Ha...
[Android Codefest Germany] Adding x86 target to your Android app by Xavier Ha...
 
Accessing Hardware on Android
Accessing Hardware on AndroidAccessing Hardware on Android
Accessing Hardware on Android
 
Mobile Java
Mobile JavaMobile Java
Mobile Java
 
Android Internals and Toolchain
Android Internals and ToolchainAndroid Internals and Toolchain
Android Internals and Toolchain
 

Recently uploaded

2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsJoaquim Jorge
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)wesley chun
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century educationjfdjdjcjdnsjd
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FMESafe Software
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024The Digital Insurer
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProduct Anonymous
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...DianaGray10
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 

Recently uploaded (20)

2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 

A War Story: Porting Android 4.0 to a Custom Board (ELCE 2012)

  • 1. Porting Android ICS to a custom board A war story Matthias Brugger
  • 2. ELCE 2012 – Porting Android ICS Outline ● Android beyond smartphones? ● Why a war story ● Our custom board ● Android building system ● Lessons learned ● Add device ● Bootloader/Kernel integration ● Powersupply ● Button ● Touchscreen calibration ● Wi-Fi ● Sound ● HW acceleration
  • 3. ELCE 2012 – Porting Android ICS Android beyond smartphones? ✔ Easy to implement applications (SDK, API, Java) ✔ Human-Machine-Interface ✔ well defined ✔ tested in the wild ✔ Reliability of the system ► good for HMI centred embedded systems ✗ Integrate native application ✗ Porting to a new board can be a war story
  • 4. ELCE 2012 – Porting Android ICS Why is it a war story ● Little documentation ● Small community ● Vendor specific communities ● Developing process of Android ● A huge jungle of programming languages
  • 5. ELCE 2012 – Porting Android ICS Why is it a war story ● Android is Linux, but... Android is not Linux! ● Patched Kernel adds new features ● Userspace varies widely ● Own libc (bionic) ● Lots of basic building blocks are not integrated ● XWindows ● Busybox ● Core system is executed on dalvikVM ● IPC implementation (binder) varies from SystemV ● Building blocks are compiled to dynamic libraries which are loaded by the core system in different ways and layers
  • 6. ELCE 2012 – Porting Android ICS Why is it a war story
  • 7. ELCE 2012 – Porting Android ICS Our custom board
  • 8. ELCE 2012 – Porting Android ICS Our custom board ● One button only ● No phone ● No battery monitor ● Ethernet ● Wifi ● Touchscreen ● Sound ● HW acceleration from OMAP3
  • 9. ELCE 2012 – Porting Android ICS Android building system ● Important folders ● build ● frameworks/base ● external ● hardware ● device ● out/target/product/<product_name>
  • 10. ELCE 2012 – Porting Android ICS Lessons learned
  • 11. ELCE 2012 – Porting Android ICS Lesson learned I: Add device to our build ● Devices are found under device/<manufactor>/<board> folder ● <device_name>.mk ● Define which basic packages to install for the board ● Inherit from default product (in build/target/product) ● Add the proper device: ● device.mk ● Define files that have to be copyed to the rootfs ● Define where to find the overlay ● BoardConfig.mk ● Define build flags ● vendorsetup.sh ● Add “lunch” menu option
  • 12. ELCE 2012 – Porting Android ICS Lessons Learned II: Bootloader/Kernel integration ● Problems ● In AOSP precompiled Kernel image ● Specific compiler needed? ● Solution ● We add a “wrapper” in the Makefile ● After building the android “userspace” build ● Bootloader ● Kernel ● Copy kernel modules to out/target/product ● Extra boot parameter: ● androidboot.console=ttyO2 ● init=/init
  • 13. ELCE 2012 – Porting Android ICS Lessons Learned III: Powersupply ● Boot hangs on splash screen ● Have a look with logcat what's going on
  • 14. ELCE 2012 – Porting Android ICS Lessons Learned III: Powersupply E/BatteryService( 1008): Could not open /sys/class/power_supply (…) I/SystemServer( 1008): Battery Service W/dalvikvm( 1008): No implementation found for native Lcom/android/server/BatteryService;.native_update ()V W/dalvikvm( 1008): threadid=11: thread exiting with uncaught exception (group=0x409e11f8) I/Process ( 1008): Sending signal. PID: 1008 SIG: 9 E/AndroidRuntime( 1008): *** FATAL EXCEPTION IN SYSTEM PROCESS: android.server.ServerThread E/AndroidRuntime( 1008): java.lang.UnsatisfiedLinkError: native_update E/AndroidRuntime( 1008): at com.android.server.BatteryService.native_update(Native Method) E/AndroidRuntime( 1008): at com.android.server.BatteryService.update(BatteryService.java:233) E/AndroidRuntime( 1008): at com.android.server.BatteryService.<init>(BatteryService.java:148) E/AndroidRuntime( 1008): at com.android.server.ServerThread.run(SystemServer.java:196) I/Zygote ( 967): Exit zygote because system server (1008) has terminated E/installd( 913): eof E/installd( 913): failed to read size I/installd( 913): closing connection I/installd( 913): new connection I/ServiceManager( 903): service 'gfxinfo' died I/ServiceManager( 903): service 'activity' died I/ServiceManager( 903): service 'cpuinfo' died I/ServiceManager( 903): service 'sensorservice' died I/ServiceManager( 903): service 'meminfo' died I/ServiceManager( 903): service 'account' died I/ServiceManager( 903): service 'usagestats' died I/ServiceManager( 903): service 'permission' died I/ServiceManager( 903): service 'hardware' died I/ServiceManager( 903): service 'content' died (...)
  • 15. ELCE 2012 – Porting Android ICS Lessons Learned III: Powersupply
  • 16. ELCE 2012 – Porting Android ICS Lessons Learned III: Powersupply ● What has happened? ● When JNI is loaded, it registers the low level services (e.g. BatteryService) ● read values from sysfs ● BatteryService JNI registers function native_update at BatteryService.java ● But... ● BatteryService JNI interface doesn't find “/sys/class/power_supply” ● Returns error, which is ignored by JNI_OnLoad ● SystemServer thread creates BatteryService when executed ● BatteryService tries to update values invoking native_update ● No JNI interface registered – SystemServer dies...
  • 17. ELCE 2012 – Porting Android ICS Lessons Learned III: Powersupply ● Solution ● No working battery monitor in our system → No power supply class in kernel ● Adding the power supply class ● Shows battery empty warning in status bar ● Add the “test power driver” ● Shows Battery at 50% charging fixed ● Has influence on the behaviour of the Power Manager
  • 18. ELCE 2012 – Porting Android ICS Lessons Learned IV: Button Integration ● Can be found in frameworks/base/services/input: ● Android scans /dev/input folder in a loop ● Polls for events using epoll ● Identifies touchscreens, joysticks, mice, keyboards automatically ● Key Layout File (/system/usr/keylayout) maps raw input key to internal Android key representation ● Key Char Map File (/system/usr/keychars) describes action for internal Android key
  • 19. ELCE 2012 – Porting Android ICS Lessons Learned IV: Button Integration ● Our case ● Just one button, no external keyboard ● Two alternatives: ● Define own Key Layout/Key Char Map files ● Configure key code in kernel appropriately ● Beware Key Layout File uses numeric number of key code ● Not all values in Key Layout have a define in include/linux/input.h
  • 20. ELCE 2012 – Porting Android ICS Lessons Learned V: Touchscreen calibration ● Detection and input analogous to button integration ● Driver sends X-Y-coordinates ● Callibrate the touchscreen ● We have to reach all parts of the screen easily ● Turn on show touches in Settings/Developer options ● Adjust max and min values of your touchscreen in the plattform data
  • 21. ELCE 2012 – Porting Android ICS Lessons Learned VI: Wi-Fi ● Example of complexity of Android source code ● Different libraries and services ● 5 different folders with userspace code ● Uses wpa_supplicant to connect to a protected WLAN ● Enhanced with Android specific commands ● START, STOP, SCAN-ACTIVE, SCAN-PASSIVE, RSSI, LINKSPEED, …
  • 22. ELCE 2012 – Porting Android ICS Lessons Learned VI: Wi-Fi
  • 23. ELCE 2012 – Porting Android ICS Lessons Learned VI: Wi-Fi ● Integration ● Legacy implementation reads wpa supplicant config file ● /data/misc/wifi/wpa_supplicant.conf → product specific ● /system/etc/wifi/wpa_supplicant.conf → template ● Kernel and firmware module ● In BoardConfig.mk define: ● WIFI_DRIVER_MODULE_PATH ● WIFI_DRIVER_MODULE_NAME ● WIFI_FIRMWARE_LOADER ● Hardware legacy layer in charge of loading/unloading kernel module and firmware; starts/stops wpa_supplicant ● Start wpa_supplicant and dhcp for wlan ● service wpa_supplicant /system/bin/wpa_supplicant -Dwext -iwlan0 ● service dhcpcd_wlan0 /system/bin/dhcpcd -ABKL
  • 24. ELCE 2012 – Porting Android ICS Lessons Learned VII: Audio ● Audio player is stagefright ● AudioFlinger interfaces hardware abstraction ● Uses struct audio_hw_device in hardware/libhardware/include ● audio.primary.<device_name> ● Encapsulates the hardware - custom implementation
  • 25. ELCE 2012 – Porting Android ICS Lessons Learned VIII: Hardware Acceleration ● Two possibilities ● Integrate mulitmedia framework supporting HW acceleration ✔ Has bindings for HW accelerator ✔ Might have more codecs then stagefright ✗ Maintenace might be costly ● Integrate HW acceleration support in existing Android multimedia framework ✔ Should be easy to maintain ✗ Need to create bindings for the HW accelerator
  • 26. ELCE 2012 – Porting Android ICS Lessons Learned VIII: Hardware Acceleration libmediaplayerservice:
  • 27. ELCE 2012 – Porting Android ICS Lessons Learned VIII: Hardware Acceleration ● Add own multimedia framework ● Register your framework as MediaPlayerInterface ● Create player instance in MediaPlayerService ● Implement new MetadataRetriever in MetadataRetrieverClient ● Implement wrapper ● Audio sink using AudioTrack ● Video sink using Surface
  • 28. ELCE 2012 – Porting Android ICS Lessons Learned VIII: Hardware Acceleration libsurfaceflinger:
  • 29. ELCE 2012 – Porting Android ICS Lessons Learned VI: Hardware Acceleration libstagefright:
  • 30. Porting Android ICS to a custom board A war story matthias.bgg@gmail.com