android os porting r3 090624233419 phpapp01

Upload: rammohan2b

Post on 02-Jun-2018

233 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/11/2019 Android Os Porting r3 090624233419 Phpapp01

    1/66

    Android Porting

    by Jollen Chen

    email: [email protected]

    blog: jollen.org/blogplurk: www.plurk.com/jollenchen

    Text

    Text

    www.jollen.tw

    http://www.plurk.com/jollenchenmailto:[email protected]://www.jollen.tw/http://www.jollen.tw/http://www.plurk.com/jollenchenhttp://www.plurk.com/jollenchenmailto:[email protected]:[email protected]:[email protected]:[email protected]
  • 8/11/2019 Android Os Porting r3 090624233419 Phpapp01

    2/66

    Section 1. Android Kernel

    www.jolle.tw

    http://www.jollen.org/http://www.jollen.org/
  • 8/11/2019 Android Os Porting r3 090624233419 Phpapp01

    3/66

    Android porting, Android hardware

    !product

    !

    !

    Android Porting

  • 8/11/2019 Android Os Porting r3 090624233419 Phpapp01

    4/66

  • 8/11/2019 Android Os Porting r3 090624233419 Phpapp01

    5/66

    new productAndroid

    !cupcake armv4/armv5/x86

    API Level

    !Android

    Vanilla Kernel Configs

    !Android framework

    Non-Vanilla Kernel

    !Merge Android framework

    Android Porting:

  • 8/11/2019 Android Os Porting r3 090624233419 Phpapp01

    6/66

    !Android frameworklibrary

    Android framework!ASHMEMwakelock

    shared library

    !Android framework

    !case study: FreeRunner

    Android Porting:

  • 8/11/2019 Android Os Porting r3 090624233419 Phpapp01

    7/66

    2007.11.5: Android

    2007.11.12: Adnroid SDK early look version

    2008.1.3: Adnroid Developer Challenge

    2008.2.13: Android SDK m5-rc15

    2008.5.12: Top 50 Android Application

    API Level

  • 8/11/2019 Android Os Porting r3 090624233419 Phpapp01

    8/66

    Phone

    Netbook

    Devices

    ARMv4/v5

    x86

    misc...

  • 8/11/2019 Android Os Porting r3 090624233419 Phpapp01

    9/66

    MMS

    WebView Touch events

    WebView SquirrelFish (JavaScript engine)

    IME

    Basic x86 support

    SIM Application Toolkit 1.0

    ...

    Cupcake

  • 8/11/2019 Android Os Porting r3 090624233419 Phpapp01

    10/66

    android-porting

  • 8/11/2019 Android Os Porting r3 090624233419 Phpapp01

    11/66

    android.git.kernel.org

    1. Cupcake x86 ports

    2. ./.repo/manifest.xml

    eee_701 platform x86 ports

    Android Source Code

  • 8/11/2019 Android Os Porting r3 090624233419 Phpapp01

    12/66

  • 8/11/2019 Android Os Porting r3 090624233419 Phpapp01

    13/66

    Android / armv4

  • 8/11/2019 Android Os Porting r3 090624233419 Phpapp01

    14/66

  • 8/11/2019 Android Os Porting r3 090624233419 Phpapp01

    15/66

    Media Framework

    Surface Manager

    Shared Libraries

    Applications

    Application Framework

    Dalvik VM

    System

    Image

    change

    Linux Kernel

    Application Developers

  • 8/11/2019 Android Os Porting r3 090624233419 Phpapp01

    16/66

    Product Branch Maintainer

    Media Framework

    Surface Manager

    Shared Libraries

    Applications

    Application Framework

    Dalvik VM

    Linux Kernel

    rebuild

  • 8/11/2019 Android Os Porting r3 090624233419 Phpapp01

    17/66

    Hardware Developing

    Media Framework

    Surface Manager

    Shared Libraries

    Applications

    Application Framework

    Dalvik VM

    Linux Kernel

    change

    change

  • 8/11/2019 Android Os Porting r3 090624233419 Phpapp01

    18/66

  • 8/11/2019 Android Os Porting r3 090624233419 Phpapp01

    19/66

    android-toolchain-20081019

    !http://android.git.kernel.org/pub/

    gcc 4.2.1 / binutils 2.17 / gdb 6.6

    ARMV5te+

    ABI: EABI, AAPCS

    --with-float=soft --with=fpu-vfp

    --enable-threads (single)

    Android Toolchain

    http://android.git.kernel.org/pub/http://android.git.kernel.org/pub/http://android.git.kernel.org/pub/
  • 8/11/2019 Android Os Porting r3 090624233419 Phpapp01

    20/66

    Binder

    Ashmem (Android shared memory)

    PMEM (Processor memory allocator)

    logcat (Android Logger)

    wakelock (Android Power Management)

    Alarm

    Android Kernel

  • 8/11/2019 Android Os Porting r3 090624233419 Phpapp01

    21/66

  • 8/11/2019 Android Os Porting r3 090624233419 Phpapp01

    22/66

  • 8/11/2019 Android Os Porting r3 090624233419 Phpapp01

    23/66

    Android IPC

    /proc/binder

    !state

    !stats

    !transactions

    !transation_log

    !failed_transation_log

    binder

  • 8/11/2019 Android Os Porting r3 090624233419 Phpapp01

    24/66

  • 8/11/2019 Android Os Porting r3 090624233419 Phpapp01

    25/66

    drivers/misc/pmem.c

    userspace driver

    PMEM

  • 8/11/2019 Android Os Porting r3 090624233419 Phpapp01

    26/66

    Android OS

    native program

  • 8/11/2019 Android Os Porting r3 090624233419 Phpapp01

    27/66

    Android

    Android source code (Cupcake)

    Toolchain

    EeePC

  • 8/11/2019 Android Os Porting r3 090624233419 Phpapp01

    28/66

    Hardware

    Kernel

    glibc & shared libs

    native C programs

    S!"#$%&'((

    Linux

  • 8/11/2019 Android Os Porting r3 090624233419 Phpapp01

    29/66

    Hardware

    Kernel

    Application

    Android Framework

    S!"#$%&'((

    JNI

    bionic & shared libs

    Android

  • 8/11/2019 Android Os Porting r3 090624233419 Phpapp01

    30/66

    S!"#$%&'((

    JNI

    onCreate()Activity

    onCreate()myActivity

    MediaPlayer

    OpenCore

    bionic

    Android

  • 8/11/2019 Android Os Porting r3 090624233419 Phpapp01

    31/66

    Section 2. Build Android

    www.jolle.tw

    http://www.jollen.org/http://www.jollen.org/
  • 8/11/2019 Android Os Porting r3 090624233419 Phpapp01

    32/66

    Build system (toolchain).

    Dalvik::JNI

    Dalvik::Interpreter

    Bionic

    System call

    Android

  • 8/11/2019 Android Os Porting r3 090624233419 Phpapp01

    33/66

    Makefile

    macros

    /build/core/combo

    darwin-x86.mk

    javac.mk

    linux-arm.mk

    linux-x86.mk

    select.mk

    target_linux-x86.mk

    windows-x86.mk

  • 8/11/2019 Android Os Porting r3 090624233419 Phpapp01

    34/66

    GLOBAL CFLAGS

  • 8/11/2019 Android Os Porting r3 090624233419 Phpapp01

    35/66

    GLOBAL CFLAGS for ARMv4

  • 8/11/2019 Android Os Porting r3 090624233419 Phpapp01

    36/66

    JNI Porting/dalvik/vm/arch

    generic/

    arm/

    x86

    CallEABI.S

    CallOldABI.S

    Call386ABI.S

  • 8/11/2019 Android Os Porting r3 090624233419 Phpapp01

    37/66

    ARM EABI

  • 8/11/2019 Android Os Porting r3 090624233419 Phpapp01

    38/66

    JNI Entry

  • 8/11/2019 Android Os Porting r3 090624233419 Phpapp01

    39/66

  • 8/11/2019 Android Os Porting r3 090624233419 Phpapp01

    40/66

    Assembly Code #2: armv4/armv5

  • 8/11/2019 Android Os Porting r3 090624233419 Phpapp01

    41/66

    Dalvik

    Interpreter/dalvik/vm/mterp

    common/

    armv4/

    armv5te/

    x86/

  • 8/11/2019 Android Os Porting r3 090624233419 Phpapp01

    42/66

  • 8/11/2019 Android Os Porting r3 090624233419 Phpapp01

    43/66

    Bionic/bionic

    libc/

    libdl/

    libm/

    libstdc++/

    libthread_db/

    linker/

  • 8/11/2019 Android Os Porting r3 090624233419 Phpapp01

    44/66

    Bionic::libc/bionic/libc

    arch-arm/

    arch-x86/

    kernel/

    arch-arm/asm/

    arch-x86/asm/

  • 8/11/2019 Android Os Porting r3 090624233419 Phpapp01

    45/66

    bionic/libc/kernel/kernel header files

    Android kernel header Linux kernel header

    userspace

    Android Generated Kernel Header

  • 8/11/2019 Android Os Porting r3 090624233419 Phpapp01

    46/66

    Android libraryshared library

    library

    opencore

    External Library

  • 8/11/2019 Android Os Porting r3 090624233419 Phpapp01

    47/66

    sonivox & OpenSSL

  • 8/11/2019 Android Os Porting r3 090624233419 Phpapp01

    48/66

    SurfaceHolder type SURFACE_TYPE_GPU GPU

    Graphics Processing Unit

    SurfaceHolder type SURFACE_TYPE_HARDWARE

    DMA

    userspace

    Android & Kernel

  • 8/11/2019 Android Os Porting r3 090624233419 Phpapp01

    49/66

    Surface Manager Media Framework

    SurfaceHolder type SURFACE_TYPE_GPU GPU

    Graphics Processing Unit

    SurfaceHolder type SURFACE_TYPE_HARDWARE

    DMA

    MediaPlayer OpenCore

    Android

  • 8/11/2019 Android Os Porting r3 090624233419 Phpapp01

    50/66

  • 8/11/2019 Android Os Porting r3 090624233419 Phpapp01

    51/66

    Media Framework

    Media Framework OpenCore

  • 8/11/2019 Android Os Porting r3 090624233419 Phpapp01

    52/66

    New Product File Tree

  • 8/11/2019 Android Os Porting r3 090624233419 Phpapp01

    53/66

    1. Get Google Android

    $ repo init -u git://android.git.kernel.org/platform/manifest.git -b cupcake$ repo sync

    2. Manifest file.

    ...

    ...

    3. Get EeePC platform.

    $ repo sync

    4. Build Android image.$ TARGET_ARCH=x86 TARGET_PRODUCT=eee_701DISABLE_DEXPREOPT=true make -j2 installer_img

    5. Create USB boot stick.

    Use make-live script. https://review.source.android.com/Gerrit#change,6475

    Android x86 port (target product = EeePC 701)

    https://review.source.android.com/Gerrit#https://review.source.android.com/Gerrit#https://review.source.android.com/Gerrit#
  • 8/11/2019 Android Os Porting r3 090624233419 Phpapp01

    54/66

    $(call inherit-product, $(SRC_TARGET_DIR)/product/generic.mk)

    PRODUCT_NAME := eee_701PRODUCT_DEVICE := eee_701PRODUCT_POLICY := android.policy_midPRODUCT_PROPERTY_OVERRIDES += \ ro.com.android.dataroaming=true

    Build EeePC 701 Product Tips # Google API issue

    Cupcake Google APIs add-ons

  • 8/11/2019 Android Os Porting r3 090624233419 Phpapp01

    55/66

    external/e2fsprogs/Android.mk:--- a/Android.mk

    +++ b/Android.mk

    @@ -1,3 +1,3 @@

    ifneq ($(TARGET_SIMULATOR),true)

    -# include $(call all-subdir-makefiles)

    + include $(call all-subdir-makefiles)

    endif

    Build EeePC 701 Product Tips # e2fsprogs issue

  • 8/11/2019 Android Os Porting r3 090624233419 Phpapp01

    56/66

    boot.img

    installer.img

    ramdisk.img

    system.img

    userdata.img

    Android Image Files

  • 8/11/2019 Android Os Porting r3 090624233419 Phpapp01

    57/66

  • 8/11/2019 Android Os Porting r3 090624233419 Phpapp01

    58/66

  • 8/11/2019 Android Os Porting r3 090624233419 Phpapp01

    59/66

    installer.img VDI

  • 8/11/2019 Android Os Porting r3 090624233419 Phpapp01

    60/66

    Android Kernerl Configs

  • 8/11/2019 Android Os Porting r3 090624233419 Phpapp01

    61/66

    Android Init Process

    device/system/init

    device/system/init/init.c

    /etc/init.rc

    mount file system (/etc/fstab)

  • 8/11/2019 Android Os Porting r3 090624233419 Phpapp01

    62/66

  • 8/11/2019 Android Os Porting r3 090624233419 Phpapp01

    63/66

    Zygote Process Startup

  • 8/11/2019 Android Os Porting r3 090624233419 Phpapp01

    64/66

    s3c2410 / s3c244x

    Neo FreeRunner

    Mokofly (coming...)

    Android FreeRunner

  • 8/11/2019 Android Os Porting r3 090624233419 Phpapp01

    65/66

  • 8/11/2019 Android Os Porting r3 090624233419 Phpapp01

    66/66