Leveraging Android's Linux Heritage
-
Upload
opersys-inc -
Category
Technology
-
view
1.648 -
download
0
description
Transcript of Leveraging Android's Linux Heritage
![Page 1: Leveraging Android's Linux Heritage](https://reader034.fdocuments.in/reader034/viewer/2022042714/555801f0d8b42a200d8b52b5/html5/thumbnails/1.jpg)
1
Leveraging Android's Linux Heritage
Android Builders Summit 2012
Karim Yaghmour@karimyaghmour
![Page 2: Leveraging Android's Linux Heritage](https://reader034.fdocuments.in/reader034/viewer/2022042714/555801f0d8b42a200d8b52b5/html5/thumbnails/2.jpg)
2
These slides are made available to you under a Creative Commons Share-Alike 3.0 license. The full terms of this license are here: https://creativecommons.org/licenses/by-sa/3.0/
Attribution requirements and misc., PLEASE READ:
● This slide must remain as-is in this specific location (slide #2), everything else you are free to change; including the logo :-)
● Use of figures in other documents must feature the below “Originals at” URL immediately under that figure and the below copyright notice where appropriate.
● You are free to fill in the “Delivered and/or customized by” space on the right as you see fit.
● You are FORBIDEN from using the default “About” slide as-is or any of its contents.
(C) Copyright 2010-2012, Opersys inc.
These slides created by: Karim Yaghmour
Originals at: www.opersys.com/community/docs
Delivered and/or customized by
![Page 3: Leveraging Android's Linux Heritage](https://reader034.fdocuments.in/reader034/viewer/2022042714/555801f0d8b42a200d8b52b5/html5/thumbnails/3.jpg)
3
About
● Author of:
● Introduced Linux Trace Toolkit in 1999● Originated Adeos and relayfs (kernel/relay.c)● Training, Custom Dev, Consulting, ...
![Page 4: Leveraging Android's Linux Heritage](https://reader034.fdocuments.in/reader034/viewer/2022042714/555801f0d8b42a200d8b52b5/html5/thumbnails/4.jpg)
4
“Android took GNU out the back door,shot him in the head, and
ran away with the penguin”
-- Surely from Tarantino's next flick
![Page 5: Leveraging Android's Linux Heritage](https://reader034.fdocuments.in/reader034/viewer/2022042714/555801f0d8b42a200d8b52b5/html5/thumbnails/5.jpg)
5
Agenda
● Goal● Rationale● Stack Comparison● Roadblocks● Where do I start?● Coexistence Approaches● Unresolved / Uncharted● Demo
![Page 6: Leveraging Android's Linux Heritage](https://reader034.fdocuments.in/reader034/viewer/2022042714/555801f0d8b42a200d8b52b5/html5/thumbnails/6.jpg)
6
1. Goal
● Opening as many cans of worms as possible● Can “Linux” and Android Coexist and Interact?
![Page 7: Leveraging Android's Linux Heritage](https://reader034.fdocuments.in/reader034/viewer/2022042714/555801f0d8b42a200d8b52b5/html5/thumbnails/7.jpg)
7
2. Rationale
● A ton of mature user-space packages available● Linux has been around for 20 years● Linux's user-space has been developed in the open
● A ton of “Linux”-centric stacks have been developed through the years● “Porting” to Android not always possible/desirable/realistic
● Android doesn't provide everything● Touch-based, consumer-oriented● Linux is very strong on backend/server side
● Android exhibits symptoms of “my way or the highway” design
![Page 8: Leveraging Android's Linux Heritage](https://reader034.fdocuments.in/reader034/viewer/2022042714/555801f0d8b42a200d8b52b5/html5/thumbnails/8.jpg)
8
3. Stack Comparison
● Android Concepts Recap● Overall Architecture EL● Overall Architecture Android
![Page 9: Leveraging Android's Linux Heritage](https://reader034.fdocuments.in/reader034/viewer/2022042714/555801f0d8b42a200d8b52b5/html5/thumbnails/9.jpg)
9
3.1. Android Concepts Recap
● Components● Intents● Component lifecycle● Manifest file● Processes and threads● Remote procedure calls
![Page 10: Leveraging Android's Linux Heritage](https://reader034.fdocuments.in/reader034/viewer/2022042714/555801f0d8b42a200d8b52b5/html5/thumbnails/10.jpg)
10
3.1.1. Components
● 1 App = N Components
● Apps can use components of other applications
● App processes are automagically started whenever any part is needed
● Ergo: N entry points, !1, and !main()
● Components:● Activities● Services● Broadcast Receivers● Content Providers
![Page 11: Leveraging Android's Linux Heritage](https://reader034.fdocuments.in/reader034/viewer/2022042714/555801f0d8b42a200d8b52b5/html5/thumbnails/11.jpg)
11
3.1.2. Intents
● Intent = asynchronous message w/ or w/o designated target
● Like a polymorphic Unix signal, but w/o required target
● Intents “payload” held in Intent Object● Intent Filters specified in Manifest file
![Page 12: Leveraging Android's Linux Heritage](https://reader034.fdocuments.in/reader034/viewer/2022042714/555801f0d8b42a200d8b52b5/html5/thumbnails/12.jpg)
12
3.1.3. Component lifecycle
● System automagically starts/stops/kills processes:● Entire system behaviour predicated on low memory
● System triggers Lifecycle callbacks when relevant
● Ergo: Must manage Component Lifecycle● Some Components are more complex to
manage than others
![Page 13: Leveraging Android's Linux Heritage](https://reader034.fdocuments.in/reader034/viewer/2022042714/555801f0d8b42a200d8b52b5/html5/thumbnails/13.jpg)
13
![Page 14: Leveraging Android's Linux Heritage](https://reader034.fdocuments.in/reader034/viewer/2022042714/555801f0d8b42a200d8b52b5/html5/thumbnails/14.jpg)
14
3.1.4. Manifest file
● Informs system about app’s components● XML format● Always called AndroidManifest.xml● Activity = <activity> ... static● Service = <service> ... static● Broadcast Receiver:
● Static = <receiver>● Dynamic = Context.registerReceiver()
● Content Provider = <provider> ... static
![Page 15: Leveraging Android's Linux Heritage](https://reader034.fdocuments.in/reader034/viewer/2022042714/555801f0d8b42a200d8b52b5/html5/thumbnails/15.jpg)
15
3.1.5. Processes and threads
● Processes● Default: all callbacks to any app Component are issued to the main process thread
● <activity>—<service>—<recipient>—<provider> have process attribute to override default
● Do NOT perform blocking/long operations in main process thread:
– Spawn threads instead
● Process termination/restart is at system’s discretion
● Therefore:
– Must manage Component Lifecycle
● Threads:● Create using the regular Java Thread Object
● Android API provides thread helper classes:
– Looper: for running a message loop with a thread
– Handler: for processing messages
– HandlerThread: for setting up a thread with a message loop
![Page 16: Leveraging Android's Linux Heritage](https://reader034.fdocuments.in/reader034/viewer/2022042714/555801f0d8b42a200d8b52b5/html5/thumbnails/16.jpg)
16
3.1.6. Remote procedure calls
● Android RPCs = Binder mechanism● No Sys V IPC due to in-kernel resource leakage● Binder is a low-level functionality, not used as-is● Instead: must define interface using Interface
Definition Language (IDL)● IDL fed to aidl Tool to generate Java interface
definitions
![Page 17: Leveraging Android's Linux Heritage](https://reader034.fdocuments.in/reader034/viewer/2022042714/555801f0d8b42a200d8b52b5/html5/thumbnails/17.jpg)
17
3.2. Overall Architecture - EL
![Page 18: Leveraging Android's Linux Heritage](https://reader034.fdocuments.in/reader034/viewer/2022042714/555801f0d8b42a200d8b52b5/html5/thumbnails/18.jpg)
18
3.3. Overall Architecture – Android
![Page 19: Leveraging Android's Linux Heritage](https://reader034.fdocuments.in/reader034/viewer/2022042714/555801f0d8b42a200d8b52b5/html5/thumbnails/19.jpg)
19
4. Roadblocks
● Filesystem● Android is non-FHS-compliant
● C library● Bionic vs. glibc
● Interconnect fabric● Intents vs. DBUS
● IPC● Binder vs. Sockets and other std Unix IPC
● Display management● SurfaceFlinger vs. X
● I/O● Framebuffer, keyboard, mouse, disk, ...
![Page 20: Leveraging Android's Linux Heritage](https://reader034.fdocuments.in/reader034/viewer/2022042714/555801f0d8b42a200d8b52b5/html5/thumbnails/20.jpg)
20
5. Where do I start?
● Android-side:● AOSP
● “Linux”-side:● Traditional distro
– Ubuntu, Fedora, Debian, Gentoo, ...● Embedded distro
– Yocto, Buildroot, LTIB, ...● Build Your Own● Cherry-picking
![Page 21: Leveraging Android's Linux Heritage](https://reader034.fdocuments.in/reader034/viewer/2022042714/555801f0d8b42a200d8b52b5/html5/thumbnails/21.jpg)
21
6. Coexistence Approaches
● Single filesystem● Build system integration● Build-time aggregation● Image repackaging
● chroot jails● Have a look at AlwaysInnovating Gregoire Gentil's ELC presentation● Patching to lots of pieces of the OS● Use of one FB for each OS or chvt
● Virtualization / Paravirtualization● QEMU● XEN?
![Page 22: Leveraging Android's Linux Heritage](https://reader034.fdocuments.in/reader034/viewer/2022042714/555801f0d8b42a200d8b52b5/html5/thumbnails/22.jpg)
22
7. Been there done that
● BusyBox in CyanogenMod● Gstreamer vs. Stagefright● UML Android● Don't know how they do it:
● Alien Dalvik: Android on Meego
● ...
![Page 23: Leveraging Android's Linux Heritage](https://reader034.fdocuments.in/reader034/viewer/2022042714/555801f0d8b42a200d8b52b5/html5/thumbnails/23.jpg)
23
8. Unresolved / Uncharted
● Binder from glibc
● Intent <-> DBUS bridge
● Running Android apps in X
● Running X apps in Android
“The easier thing to do, which would work on just about all Android phones without having to modify the system software at all, would be to port an X server to the NDK, using a SurfaceFlinger Surface as its root window.
You could do a generic "X11WrapperApp" that has you XSurfaceFlinger bundled and launches whatever X based app you want, and have it all play nice together.
A bit more work would be to just do an implementation of xlib that sits on top of a native Android window (opengl ES 2 if you like) without any server in the middle, and again bundle this and the X based app of your choice and you have something that is a first class app on the phone without any need for modifying the OS.”
![Page 24: Leveraging Android's Linux Heritage](https://reader034.fdocuments.in/reader034/viewer/2022042714/555801f0d8b42a200d8b52b5/html5/thumbnails/24.jpg)
24
9. Demos
● All:● AOSP● BYO glibc-based rootfs
● Demo 1: BusyBox● Demo 2: Client-Server app talking through socket
● glibc client● bionic server
● Demo 3: Surprise!
![Page 25: Leveraging Android's Linux Heritage](https://reader034.fdocuments.in/reader034/viewer/2022042714/555801f0d8b42a200d8b52b5/html5/thumbnails/25.jpg)
25
9.1. Demo 1 - BusyBox
● Configure, build and “install” BusyBox● Get it copied into final RAM disk image● Modify AOSP to:
● Make sure /lib/* is executable● Path start with “/bin”● adb shell is BusyBox, not Toolbox
![Page 26: Leveraging Android's Linux Heritage](https://reader034.fdocuments.in/reader034/viewer/2022042714/555801f0d8b42a200d8b52b5/html5/thumbnails/26.jpg)
26
9.2. Demo 2 - Architecture
![Page 27: Leveraging Android's Linux Heritage](https://reader034.fdocuments.in/reader034/viewer/2022042714/555801f0d8b42a200d8b52b5/html5/thumbnails/27.jpg)
27
![Page 28: Leveraging Android's Linux Heritage](https://reader034.fdocuments.in/reader034/viewer/2022042714/555801f0d8b42a200d8b52b5/html5/thumbnails/28.jpg)
28
9.3. Demo 3 – LTT, the revenge
● Patch kernel● Cross-build ltt-ctl● Modify AOSP to log to LTT