Q4.11: Porting Android to new Platforms

download Q4.11: Porting Android to new Platforms

If you can't read please download the document

Transcript of Q4.11: Porting Android to new Platforms

Porting Android to new Platforms

Amit PundirAndroid Engineer, Linaro

Android Software Stack

Applications

ApplicationsApplicationFrameworksLibraries &RuntimeLinuxKernelAudioDisplay

HardwareAbstractionLayersFirmware BinariesWiFiBinderCameraLogger...GPSRadio (RIL)CameraMedia

NFSSensorsAudio...SkiaCore LibrariesDalvik VM...SQliteALSAFreetypeInputWebkitSystem Services

Power ManagerActivity ManagerPackage ManagerContent ManagerBattery ServiceWindow ManagerLocation ManagerAudio ServiceAlarm ManagerNetwork ManagerMedia Server...HomeSettingsMedia PlayerCameraDialer...

Android Open Source Project

AOSP is not a single project.

Hundreds of independent projects having own Git repositories.

Don't need to pull the projects one by one. Repo tool for the rescue.

AOSP manifest file to download a snapshot.

Android Documentation: Downloading the source tree http://source.android.com/source/downloading.html

AOSP Code Structure

bionicAndroid's C library.

bootableLegacy Bootloader/Recovery code for reference

buildAOSP Build framework

ctsAndroid's Compatibility Test Suit

dalvikDalvik Virtual Machine

developmentDevelopment tools #tutorials #monkey

deviceVendor specific configuration files

externalExternal projects used in AOSP

frameworksAndroid core application framework

hardwareHardware specific libraries/modules #HAL

kernelLinux Kernel

libcoreApache Harmony. Fee Java implementation. Used by Dalvik.

ndkNative Development Kit

packagesAOSP's stock applications

prebuiltPrebuilt binaries such as Toolchain

sdkAndroid's Software Development Kit

systemAndroid's core system libraries/binaries #init #toolbox #adb

Android Kernel

Android patches are not available mainline.

android-common project

Android patches on top of Linus's base tree.

Extract patches and apply them to your Target specific kernel.

Android Kernel Features

Binder

Android's IPC mechanism. Inspired from Open Binder project.

Ashmem or Anonymous Shared Memory

Shared memory allocator. Discards shared units under memory pressure.

Logger

Android's driver which logs data from user space.

Wakelocks

Prevents a system to enter suspend or low power states.

Out Of Memory handler

Aggressive OOM handler. Triggers before Kernel's default implementation.

Alarm

Android's alarm timer implementation on top of Kernel's RTC implementation.

RAM console

Logs last Kernel log. Accessible through /proc/last_kmsg

Paranoid network

Network administration through uid/pid e.g AID_NET_*

Common Android Hardware Abstraction Layers

libaudio.soAudioHardwareInterface implementation.

libgralloc.soGraphics Buffer Allocator hardware/libhardware/modules/gralloc/

libsensor.soSensor modules.

libcamera.soCameraHardwareInterface implementation.

libgps.soGPS module.

libstagefrighthw.soStagefright implementation for h/w codecs.

libril.soRadio interface layer module

......

HAL Module/Library loaders

Run time loadinghw_get_module()libgps, liblights, libgralloc, libsensors, liboverlays etc

dlopen()libstagefrighthw, libril etc

Build time linkinglibaudio, libcamera etc

Linux standard sysfs and /dev nodesPower management, Input devices etc

Device/Vendor specific
configuration files

Build config filesTarget build requirements are set by build/core/{main.mk, config.mk, product.mk, product_config.mk}

Build process looks for target specific config file BoardConfig.mk at device/*/$(TARGET_DEVICE) or vendor/*/$(TARGET_DEVICE)

TARGET_PRODUCT = TARGET_DEVICE = PRODUCT_DEVICE, where PRODUCT_DEVICE is defined in AndroidProducts.mk

Android Run time config files init.rc, init.TARGET_PRODUCT.rc, ueventd.rc, ueventd.TARGET_PRODUCT.rc, vold.fstab etc

Set optional PRODUCT_PACKAGES for Pre-loaded applications.

Generate Project manifest file. It is different from an Android Application Manifest file.

AOSP Build Process

Android Documentation: Building the system http://source.android.com/source/building.html

$ . build/envsetup.sh

Setting up build environment

$ lunch

Choose correct TARGET_PRODUCT

$ export USE_CCACHE = 1

will cache object files generated by the C/C++ compiler which can be used to speed up next build.

$ make -jX

where X = the number of CPU cores in your build machine + 1.

OR

$ mm

make alias which is handy while building AOSP projects independently.

Android Boot Process

KernelInitServiceManagersystemserverZygote......binderSystem Services

Activity Manager Power ManagerPackage Manager Content Manager Battery ServiceWindow Manager Location Manager Audio ServiceAlarm Manager Network Manager Media Server...SystemServerAndroidApplication

Android Debugging

Increase loglevel in init.rc

dmesg

Dump Kernel logs

logcat

Dump System logs

adb and ddms

Android debug bridge and tool for remote debugging.

dumpsys and dumpstate

Dump system services meminfo

/proc/last_kmsg

Last dmesg or kernel log to debug random crashes.

Traceview ?

http://android-developers.blogspot.com/2010/10/traceview-war-story.html

Thank You