SlideShare uma empresa Scribd logo
1 de 31
Baixar para ler 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)

Mais conteúdo relacionado

Mais procurados

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
 

Mais procurados (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
 

Destaque

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
 

Destaque (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
 

Semelhante a 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
 

Semelhante a 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
 

Último

MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MIND CTI
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesrafiqahmad00786416
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobeapidays
 
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...apidays
 
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
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxRustici Software
 
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
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsNanddeep Nachan
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native ApplicationsWSO2
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoffsammart93
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?Igalia
 
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
 
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot ModelNavi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot ModelDeepika Singh
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherRemote DBA Services
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024The Digital Insurer
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProduct Anonymous
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...apidays
 
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Zilliz
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businesspanagenda
 

Último (20)

MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
 
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
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 
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...
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectors
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
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
 
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot ModelNavi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 

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