SlideShare ist ein Scribd-Unternehmen logo
1 von 31
Downloaden Sie, um offline zu lesen
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)

Weitere ähnliche Inhalte

Was ist angesagt?

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
Opersys inc.
 
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
Opersys inc.
 

Was ist angesagt? (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
 

Andere mochten auch

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
Benjamin Zores
 
ABS 2014 - Android Kit Kat Internals
ABS 2014 - Android Kit Kat InternalsABS 2014 - Android Kit Kat Internals
ABS 2014 - Android Kit Kat Internals
Benjamin Zores
 

Andere mochten auch (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
 

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

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
 
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
Sunil Sam
 
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
 
Android Internals and Toolchain
Android Internals and ToolchainAndroid Internals and Toolchain
Android Internals and Toolchain
Vladimir Kotov
 

Ähnlich wie 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
 

Kürzlich hochgeladen

Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
vu2urc
 

Kürzlich hochgeladen (20)

From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
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
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation Strategies
 
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
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
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)
 
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
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
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...
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
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
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
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...
 
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 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