If you can't read please download the document
Upload
linaro
View
2.158
Download
2
Embed Size (px)
Citation preview
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