SlideShare ist ein Scribd-Unternehmen logo
1 von 47
Downloaden Sie, um offline zu lesen
Leveraging Android's
   Linux Heritage
      AnDevCon III

     Karim Yaghmour
     @karimyaghmour



                      1
These slides are made available to you under a Creative Commons          Delivered and/or customized by
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
                                                                                  2
About
●   Author of:




●   Introduced Linux Trace Toolkit in 1999
●   Originated Adeos and relayfs (kernel/relay.c)
●   Training, Custom Dev, Consulting, ...
                                              3
“Android took GNU out the back door,
      shot him in the head, and
     ran away with the penguin”

 -- Surely from Tarantino's next flick




                                   4
Agenda
●   Goal
●   Rationale
●   Stack Comparison
●   Roadblocks
●   Where do I start?
●   Coexistence Approaches
●   Unresolved / Uncharted
●   Demo
                                 5
1. Goal
●   Opening as many cans of worms as possible
●   Can “Linux” and Android Coexist and Interact?




                                        6
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



                                                                  7
3. Stack Comparison
●   Android Concepts Recap
●   Overall Architecture EL
●   Overall Architecture Android




                                   8
3.1. Android Concepts Recap
●   Components
●   Intents
●   Component lifecycle
●   Manifest file
●   Processes and threads
●   Remote procedure calls



                             9
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


                                                    10
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




                                                11
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

                                             12
13
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
                                               14
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

                                                                         15
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


                                           16
3.2. Overall Architecture - EL




                         17
3.3. Overall Architecture – Android




                            18
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, ...
                                                    19
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
                                                  20
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?

                                                            21
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
●   ...



                                           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.”
                                                                     24
9. Tools
●   GNU cross-development toolchain:
    ●   gcc - compiler
    ●   as - assembler
    ●   ld - linker
    ●   gdb/gdbserver - debugger
    ●   etc.
●   C library: uClibc, eglibc or glibc


                                         25
10. Embedded Linux Workspace
●   Need to organize the components used during
    cross-platform development. Workspace layout:
      bootldr:       target bootloader (s)
      build-tools:   toolchain build packages and sources
      debug:         debugging tools
      doc:           project documentation
      images:        binary images ready to be used on target
      kernel:        sources and build directories for target kernels
      project:       your own custom code for the target
      rootfs:        root filesystem as seen on the target
      sysapps:       sources for target's system applications
      tmp:           temporary data and experiments
      tools:         toolchain and all other tools required to build
                     software for the target.

                                                           26
10.1. Workspace env. vars. script
●   Complete workspace script (devex)
    export PROJECT=emblinux
    export PRJROOT=/home/karim/${PROJECT}
    export TARGET=arm-none-linux-gnueabi
    export PATH=${PATH}:[CODESOURCERY_DIR]/bin
    cd $PRJROOT
●   To use this script:
     $ .⌴ devex
●   Possible values for $TARGET:
     ●   ARM:    arm-linux, arm-unknown-linux-gnueabi
     ●   MIPS:   mips-linux, mipsel-unknown-linux-gnu
     ●   I386:   i386-linux, i586-geode-linux-uclibc
                                                 27
11. Basic root filesystem structure
●   Unix FS structured for multi-user systems
●   Some directories not necessary for embedded
●   Filesystem Hierarchy Standard (FHS):
    ●   /bin    =>   Essential user binaries
    ●   /boot   =>   Bootloader and kernel images
    ●   /dev    =>   Device files
    ●   /etc    =>   System configuration
    ●   /home   =>   User home directories
    ●   /lib    =>   Essential shared libs and kernel modules
    ●   /mnt    =>   Temporary mount point
    ●   /opt    =>   Add-on software packages
    ●   /sbin   =>   Essential system binaries
    ●   /tmp    =>   Temporary files
    ●   /usr    =>   Secondary hierarchy (mostly user apps)
    ●   /var    =>   Variable data generated by daemons
                                                     28
●   Non-essential multi-user dirs:
    ●   /home, /mnt, /opt, /root
●   Depends on bootloader:
    ●   /boot
●   Traditionally “essential”:
    ●   /bin, /dev, /etc, /lib, /proc, /sbin, /usr, /tmp, /var
●   Careful with “/etc”, Android needs it to point to
    “/system/etc” for Dbus config ... Just hack it.
●   Contain their own hierarchy:
    ●   /usr, /var                                     29
●   What are all these binaries directories for?
    ●   /bin     =>   Essential binaries for user and admin
    ●   /sbin    =>   Essential binaries for admin
    ●   /usr/bin =>   Non-essential user and admin binaries
    ●   /usr/sbin=>   Non-essential admin binaries
●   What are all those libraries directories for?
    ●   /lib     =>   Essential system libraries
    ●   /usr/lib =>   Non-essential libraries
●   The kernel does not force FS layout. Layout is
    “universally” agree upon (i.e. FHS.)


                                                   30
●   To start working on rootfs:
    $ cd ${PRJROOT}/rootfs
●   Create core rootfs directories:
    $ mkdir bin lib sbin usr var
●   Create the /usr hierarchy:
    $ mkdir usr/{bin,lib,sbin}
●   Create the /var hierarchy:
    $ mkdir var/{lib,lock,log,run,tmp}
    $ chmod 1777 var/tmp




                                         31
12. Libraries
1.glibc
2.uClibc




                           32
12.1. glibc
●   glibc components:
    ●   Actual shared libraries:
        –   Format: libLIB_NAME-GLIBC_VER.so
        –   Examples: libm-2.3.2.so, libc-2.3.2.so
    ●   Major revision version symbolic links:
        –   Format: libLIB_NAME.so.MAJOR_REV_VER
        –   Examples: libdl.so.2, libc.so.6
    ●   Version-independent symbolic links to the major
        revision version symbolic links:
        –   Format: libLIB_NAME.so
        –   Examples: libdl.so, libm.so
    ●   Static library archives:
        –   Format: libLIB_NAME.a
        –   Examples: libdl.a, libm.a
                                                     33
●   For target, need:
    ●   The actual shared libs
    ●   The major revision version symbolic links
●   Also need dynamic linker:
    ●   Actual linker: ld-GLIBC_VER.so
    ●   Symbolic link to linker:
        –   x86, ARM, SH, m68k   => ld-linux.so.MAJOR_REV_VER
        –   MIPS, PPC            => ld.so.MAJOR_REV_VER
●   Must determine exact library components required.
●   BELS table 6.2 contains complete list


                                                  34
●   Most important components:
    ●   ld     =>   the dynamic linker
    ●   libc   =>   the C library
    ●   libm =>     the math library
    ●   libdl =>    the shared objects manipulation library
●   Must determine exact dependencies of your
    applications.
●   Native ldd is not cross-platform-capable
●   Can use readelf or uclibc-ldd:
                                                 35
●   Copying all libraries:
    $ cp -d [CODESOURCERY_DIR]/arm-none-linux-gnueabi/libc/lib/* 
    > ${PRJROOT}/rootfs/lib

●   Stripping all target libraries for space efficiency:
    $ arm-none-linux-gnueabi-strip ${PRJROOT}/rootfs/lib/*.so*




                                                    36
12.2. uClibc
●   Same naming conventions as glibc
●   Implements most of the glibc components:
    ●   ld, libc, libcrypt, libdl, libm, libpthread, libresolv, libutil.
●   uClibc libraries can coexist with glibc libraries in
    target's /lib directory.
●   Copying all uClibc components:
    $ cd ${PREFIX}/uclibc/lib
    $ cp *-*.so ${PRJROOT}/rootfs/lib
    $ cp -d *.so.[*0-9] ${PRJROOT}/rootfs/lib
●   No need to strip uClibc libraries, they are stripped
    by the uClibc build script

                                                        37
13. Main system applications
●   Unix systems rely on a common set of commands
●   Standard distros have one binary per command
●   May compile each relevant command one-by-one
    or use packages that provide many commands in
    a single binary:
    1.Busybox
    2.Distro




                                       38
13.1. BusyBox
●   Main package used in embedded Linux to provide
    core set of Unix commands: busybox.net
     [, [[, acpid, add-shell, addgroup, adduser, adjtimex, arp, arping, ash, awk, base64, basename, beep, blkid, blockdev,
     bootchartd, brctl, bunzip2, bzcat, bzip2, cal, cat, catv, chat, chattr, chgrp, chmod, chown, chpasswd, chpst, chroot, chrt,
     chvt, cksum, clear, cmp, comm, cp, cpio, crond, crontab, cryptpw, cttyhack, cut, date, dc, dd, deallocvt, delgroup, deluser,
     depmod, devmem, df, dhcprelay, diff, dirname, dmesg, dnsd, dnsdomainname, dos2unix, du, dumpkmap, dumpleases,
     echo, ed, egrep, eject, env, envdir, envuidgid, ether-wake, expand, expr, fakeidentd, false, fbset, fbsplash, fdflush, fdformat,
     fdisk, fgconsole, fgrep, find, findfs, flock, fold, free, freeramdisk, fsck, fsck.minix, fsync, ftpd, ftpget, ftpput, fuser, getopt,
     getty, grep, gunzip, gzip, halt, hd, hdparm, head, hexdump, hostid, hostname, httpd, hush, hwclock, id, ifconfig, ifdown,
     ifenslave, ifplugd, ifup, inetd, init, insmod, install, ionice, iostat, ip, ipaddr, ipcalc, ipcrm, ipcs, iplink, iproute, iprule, iptunnel,
     kbd_mode, kill, killall, killall5, klogd, last, length, less, linux32, linux64, linuxrc, ln, loadfont, loadkmap, logger, login,
     logname, logread, losetup, lpd, lpq, lpr, ls, lsattr, lsmod, lspci, lsusb, lzcat, lzma, lzop, lzopcat, makedevs, makemime, man,
     md5sum, mdev, mesg, microcom, mkdir, mkdosfs, mke2fs, mkfifo, mkfs.ext2, mkfs.minix, mkfs.vfat, mknod, mkpasswd,
     mkswap, mktemp, modinfo, modprobe, more, mount, mountpoint, mpstat, mt, mv, nameif, nbd-client, nc, netstat, nice,
     nmeter, nohup, nslookup, ntpd, od, openvt, passwd, patch, pgrep, pidof, ping, ping6, pipe_progress, pivot_root, pkill, pmap,
     popmaildir, poweroff, powertop, printenv, printf, ps, pscan, pwd, raidautorun, rdate, rdev, readahead, readlink, readprofile,
     realpath, reboot, reformime, remove-shell, renice, reset, resize, rev, rm, rmdir, rmmod, route, rpm, rpm2cpio, rtcwake, run-
     parts, runlevel, runsv, runsvdir, rx, script, scriptreplay, sed, sendmail, seq, setarch, setconsole, setfont, setkeycodes,
     setlogcons, setsid, setuidgid, sh, sha1sum, sha256sum, sha512sum, showkey, slattach, sleep, smemcap, softlimit, sort,
     split, start-stop-daemon, stat, strings, stty, su, sulogin, sum, sv, svlogd, swapoff, swapon, switch_root, sync, sysctl, syslogd,
     tac, tail, tar, tcpsvd, tee, telnet, telnetd, test, tftp, tftpd, time, timeout, top, touch, tr, traceroute, traceroute6, true, tty, ttysize,
     tunctl, udhcpc, udhcpd, udpsvd, umount, uname, unexpand, uniq, unix2dos, unlzma, unlzop, unxz, unzip, uptime, usleep,
     uudecode, uuencode, vconfig, vi, vlock, volname, wall, watch, watchdog, wc, wget, which, who, whoami, xargs, xz, xzcat,
     yes, zcat, zcip

                                                                                                           39
●   Download BusyBox (1.18.3) to your $
    {PRJROOT}/sysapps directory and extract it there.
●   Move to the directory for the rest of the setup:
    $ cd ${PRJROOT}/sysapps/busybox-1.18.3

●   Configuration of BusyBox's options:
    $ make menuconfig




                                             40
41
●   “Busybox Settings”:
    ●   “Build Options” -> Cross-compiler prefix:
               ${TARGET}-
    ●   “Installation Options” -> Installation prefix:
               ${PRJROOT}/rootfs
●   Build:
    $ make

●   Install:
    $ make install

                                                    42
14. 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!

                                        43
14.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




                                            44
14.2. Demo 2 - Architecture




                       45
14.3. Demo 3 – LTT, the revenge
●   Patch kernel
●   Cross-build ltt-ctl
●   Modify AOSP to log to LTT




                                46
Thank you ...


         VZADC3


karim.yaghmour@opersys.com




                         47

Weitere ähnliche Inhalte

Was ist angesagt?

Embedded Android Workshop part I ESC SV 2012
Embedded Android Workshop part I ESC SV 2012Embedded Android Workshop part I ESC SV 2012
Embedded Android Workshop part I ESC SV 2012Opersys inc.
 
Embedded Android Workshop
Embedded Android WorkshopEmbedded Android Workshop
Embedded Android WorkshopOpersys inc.
 
Android Variants, Hacks, Tricks and Resources
Android Variants, Hacks, Tricks and ResourcesAndroid Variants, Hacks, Tricks and Resources
Android Variants, Hacks, Tricks and ResourcesOpersys inc.
 
Android On Development Boards at AnDevCon3
Android On Development Boards at AnDevCon3Android On Development Boards at AnDevCon3
Android On Development Boards at AnDevCon3Opersys 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 AnDevConIIOpersys inc.
 
Leveraging Android's Linux Heritage at ELC-E 2011
Leveraging Android's Linux Heritage at ELC-E 2011Leveraging Android's Linux Heritage at ELC-E 2011
Leveraging Android's Linux Heritage at ELC-E 2011Opersys inc.
 
Inside Android's UI
Inside Android's UIInside Android's UI
Inside Android's UIOpersys inc.
 
Leveraging Android's Linux Heritage at Android Open 2011
Leveraging Android's Linux Heritage at Android Open 2011Leveraging Android's Linux Heritage at Android Open 2011
Leveraging Android's Linux Heritage at Android Open 2011Opersys inc.
 
Android Internals at Linaro Connect Asia 2013
Android Internals at Linaro Connect Asia 2013Android Internals at Linaro Connect Asia 2013
Android Internals at Linaro Connect Asia 2013Opersys inc.
 
Embedded Android Workshop at Android Open 2011
Embedded Android Workshop at Android Open 2011Embedded Android Workshop at Android Open 2011
Embedded Android Workshop at Android Open 2011Opersys inc.
 
Embedded Android Workshop with Marshmallow
Embedded Android Workshop with MarshmallowEmbedded Android Workshop with Marshmallow
Embedded Android Workshop with MarshmallowOpersys inc.
 
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 2013Opersys inc.
 
Embedded Android Workshop at Embedded Linux Conference Europe 2011
Embedded Android Workshop at Embedded Linux Conference Europe 2011Embedded Android Workshop at Embedded Linux Conference Europe 2011
Embedded Android Workshop at Embedded Linux Conference Europe 2011Opersys inc.
 
Scheduling in Android
Scheduling in AndroidScheduling in Android
Scheduling in AndroidOpersys inc.
 
Embedded Android Workshop
Embedded Android WorkshopEmbedded Android Workshop
Embedded Android WorkshopOpersys inc.
 
Android Platform Debugging and Development
Android Platform Debugging and DevelopmentAndroid Platform Debugging and Development
Android Platform Debugging and DevelopmentOpersys inc.
 
Android Things Internals
Android Things InternalsAndroid Things Internals
Android Things InternalsOpersys inc.
 

Was ist angesagt? (20)

Embedded Android Workshop part I ESC SV 2012
Embedded Android Workshop part I ESC SV 2012Embedded Android Workshop part I ESC SV 2012
Embedded Android Workshop part I ESC SV 2012
 
Embedded Android Workshop
Embedded Android WorkshopEmbedded Android Workshop
Embedded Android Workshop
 
Android Variants, Hacks, Tricks and Resources
Android Variants, Hacks, Tricks and ResourcesAndroid Variants, Hacks, Tricks and Resources
Android Variants, Hacks, Tricks and Resources
 
Android On Development Boards at AnDevCon3
Android On Development Boards at AnDevCon3Android On Development Boards at AnDevCon3
Android On Development Boards at AnDevCon3
 
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
 
Leveraging Android's Linux Heritage at ELC-E 2011
Leveraging Android's Linux Heritage at ELC-E 2011Leveraging Android's Linux Heritage at ELC-E 2011
Leveraging Android's Linux Heritage at ELC-E 2011
 
Cyborgstack
CyborgstackCyborgstack
Cyborgstack
 
Inside Android's UI
Inside Android's UIInside Android's UI
Inside Android's UI
 
Leveraging Android's Linux Heritage at Android Open 2011
Leveraging Android's Linux Heritage at Android Open 2011Leveraging Android's Linux Heritage at Android Open 2011
Leveraging Android's Linux Heritage at Android Open 2011
 
Android Internals at Linaro Connect Asia 2013
Android Internals at Linaro Connect Asia 2013Android Internals at Linaro Connect Asia 2013
Android Internals at Linaro Connect Asia 2013
 
Embedded Android Workshop at Android Open 2011
Embedded Android Workshop at Android Open 2011Embedded Android Workshop at Android Open 2011
Embedded Android Workshop at Android Open 2011
 
Embedded Android Workshop with Marshmallow
Embedded Android Workshop with MarshmallowEmbedded Android Workshop with Marshmallow
Embedded Android Workshop with Marshmallow
 
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
 
Embedded Android Workshop at Embedded Linux Conference Europe 2011
Embedded Android Workshop at Embedded Linux Conference Europe 2011Embedded Android Workshop at Embedded Linux Conference Europe 2011
Embedded Android Workshop at Embedded Linux Conference Europe 2011
 
Scheduling in Android
Scheduling in AndroidScheduling in Android
Scheduling in Android
 
Embedded Android Workshop
Embedded Android WorkshopEmbedded Android Workshop
Embedded Android Workshop
 
Android Platform Debugging and Development
Android Platform Debugging and DevelopmentAndroid Platform Debugging and Development
Android Platform Debugging and Development
 
Android Things Internals
Android Things InternalsAndroid Things Internals
Android Things Internals
 
Porting Android
Porting AndroidPorting Android
Porting Android
 
Android Internals
Android InternalsAndroid Internals
Android Internals
 

Ähnlich wie Leveraging Android's Linux Heritage at AnDevCon3

Leveraging Android's Linux Heritage at AnDevCon IV
Leveraging Android's Linux Heritage at AnDevCon IVLeveraging Android's Linux Heritage at AnDevCon IV
Leveraging Android's Linux Heritage at AnDevCon IVOpersys inc.
 
Leveraging Android's Linux Heritage at AnDevCon VI
Leveraging Android's Linux Heritage at AnDevCon VILeveraging Android's Linux Heritage at AnDevCon VI
Leveraging Android's Linux Heritage at AnDevCon VIOpersys inc.
 
Leveraging Android's Linux Heritage at AnDevCon V
Leveraging Android's Linux Heritage at AnDevCon VLeveraging Android's Linux Heritage at AnDevCon V
Leveraging Android's Linux Heritage at AnDevCon VOpersys inc.
 
Android for Embedded Linux Developers
Android for Embedded Linux DevelopersAndroid for Embedded Linux Developers
Android for Embedded Linux DevelopersOpersys inc.
 
Is Android the New Embedded Linux? at AnDevCon VI
Is Android the New Embedded Linux? at AnDevCon VIIs Android the New Embedded Linux? at AnDevCon VI
Is Android the New Embedded Linux? at AnDevCon VIOpersys inc.
 
Is Android the New Embedded Linux? at AnDevCon V
Is Android the New Embedded Linux? at AnDevCon VIs Android the New Embedded Linux? at AnDevCon V
Is Android the New Embedded Linux? at AnDevCon VOpersys inc.
 
Extending Android's Platform Toolsuite
Extending Android's Platform ToolsuiteExtending Android's Platform Toolsuite
Extending Android's Platform ToolsuiteOpersys inc.
 
Native Android Userspace part of the Embedded Android Workshop at Linaro Conn...
Native Android Userspace part of the Embedded Android Workshop at Linaro Conn...Native Android Userspace part of the Embedded Android Workshop at Linaro Conn...
Native Android Userspace part of the Embedded Android Workshop at Linaro Conn...Opersys inc.
 
embedded-linux-120203.pdf
embedded-linux-120203.pdfembedded-linux-120203.pdf
embedded-linux-120203.pdftwtester
 
Inside Android's UI / ABS 2013
Inside Android's UI / ABS 2013Inside Android's UI / ABS 2013
Inside Android's UI / ABS 2013Opersys inc.
 
Is Android the New Embedded Linux? at AnDevCon IV
Is Android the New Embedded Linux? at AnDevCon IVIs Android the New Embedded Linux? at AnDevCon IV
Is Android the New Embedded Linux? at AnDevCon IVOpersys inc.
 
Begining Android Development
Begining Android DevelopmentBegining Android Development
Begining Android DevelopmentHayi Nukman
 
Electron JS | Build cross-platform desktop applications with web technologies
Electron JS | Build cross-platform desktop applications with web technologiesElectron JS | Build cross-platform desktop applications with web technologies
Electron JS | Build cross-platform desktop applications with web technologiesBethmi Gunasekara
 
Embedded Android Workshop with Lollipop
Embedded Android Workshop with LollipopEmbedded Android Workshop with Lollipop
Embedded Android Workshop with LollipopOpersys inc.
 
Unmanned Aerial Vehicles: Exploit Automation with the Metasploit Framework
Unmanned Aerial Vehicles: Exploit Automation with the Metasploit FrameworkUnmanned Aerial Vehicles: Exploit Automation with the Metasploit Framework
Unmanned Aerial Vehicles: Exploit Automation with the Metasploit Frameworkegypt
 
Android Jump Start
Android Jump StartAndroid Jump Start
Android Jump StartConFoo
 
Running Code in the Android Stack at ELCE 2013
Running Code in the Android Stack at ELCE 2013Running Code in the Android Stack at ELCE 2013
Running Code in the Android Stack at ELCE 2013Opersys inc.
 
Is Android the New King of Embedded OSes at Embedded World 2014
Is Android the New King of Embedded OSes at Embedded World 2014Is Android the New King of Embedded OSes at Embedded World 2014
Is Android the New King of Embedded OSes at Embedded World 2014Opersys inc.
 

Ähnlich wie Leveraging Android's Linux Heritage at AnDevCon3 (20)

Leveraging Android's Linux Heritage at AnDevCon IV
Leveraging Android's Linux Heritage at AnDevCon IVLeveraging Android's Linux Heritage at AnDevCon IV
Leveraging Android's Linux Heritage at AnDevCon IV
 
Leveraging Android's Linux Heritage at AnDevCon VI
Leveraging Android's Linux Heritage at AnDevCon VILeveraging Android's Linux Heritage at AnDevCon VI
Leveraging Android's Linux Heritage at AnDevCon VI
 
Leveraging Android's Linux Heritage at AnDevCon V
Leveraging Android's Linux Heritage at AnDevCon VLeveraging Android's Linux Heritage at AnDevCon V
Leveraging Android's Linux Heritage at AnDevCon V
 
Android for Embedded Linux Developers
Android for Embedded Linux DevelopersAndroid for Embedded Linux Developers
Android for Embedded Linux Developers
 
Is Android the New Embedded Linux? at AnDevCon VI
Is Android the New Embedded Linux? at AnDevCon VIIs Android the New Embedded Linux? at AnDevCon VI
Is Android the New Embedded Linux? at AnDevCon VI
 
Is Android the New Embedded Linux? at AnDevCon V
Is Android the New Embedded Linux? at AnDevCon VIs Android the New Embedded Linux? at AnDevCon V
Is Android the New Embedded Linux? at AnDevCon V
 
Extending Android's Platform Toolsuite
Extending Android's Platform ToolsuiteExtending Android's Platform Toolsuite
Extending Android's Platform Toolsuite
 
Native Android Userspace part of the Embedded Android Workshop at Linaro Conn...
Native Android Userspace part of the Embedded Android Workshop at Linaro Conn...Native Android Userspace part of the Embedded Android Workshop at Linaro Conn...
Native Android Userspace part of the Embedded Android Workshop at Linaro Conn...
 
embedded-linux-120203.pdf
embedded-linux-120203.pdfembedded-linux-120203.pdf
embedded-linux-120203.pdf
 
Inside Android's UI / ABS 2013
Inside Android's UI / ABS 2013Inside Android's UI / ABS 2013
Inside Android's UI / ABS 2013
 
Is Android the New Embedded Linux? at AnDevCon IV
Is Android the New Embedded Linux? at AnDevCon IVIs Android the New Embedded Linux? at AnDevCon IV
Is Android the New Embedded Linux? at AnDevCon IV
 
Begining Android Development
Begining Android DevelopmentBegining Android Development
Begining Android Development
 
Android Attacks
Android AttacksAndroid Attacks
Android Attacks
 
Electron JS | Build cross-platform desktop applications with web technologies
Electron JS | Build cross-platform desktop applications with web technologiesElectron JS | Build cross-platform desktop applications with web technologies
Electron JS | Build cross-platform desktop applications with web technologies
 
Embedded Android Workshop with Lollipop
Embedded Android Workshop with LollipopEmbedded Android Workshop with Lollipop
Embedded Android Workshop with Lollipop
 
Unmanned Aerial Vehicles: Exploit Automation with the Metasploit Framework
Unmanned Aerial Vehicles: Exploit Automation with the Metasploit FrameworkUnmanned Aerial Vehicles: Exploit Automation with the Metasploit Framework
Unmanned Aerial Vehicles: Exploit Automation with the Metasploit Framework
 
Android Jump Start
Android Jump StartAndroid Jump Start
Android Jump Start
 
Running Code in the Android Stack at ELCE 2013
Running Code in the Android Stack at ELCE 2013Running Code in the Android Stack at ELCE 2013
Running Code in the Android Stack at ELCE 2013
 
Is Android the New King of Embedded OSes at Embedded World 2014
Is Android the New King of Embedded OSes at Embedded World 2014Is Android the New King of Embedded OSes at Embedded World 2014
Is Android the New King of Embedded OSes at Embedded World 2014
 
Android Internals
Android InternalsAndroid Internals
Android Internals
 

Mehr von Opersys inc.

Android Automotive
Android AutomotiveAndroid Automotive
Android AutomotiveOpersys inc.
 
Android 10 Internals Update
Android 10 Internals UpdateAndroid 10 Internals Update
Android 10 Internals UpdateOpersys inc.
 
Android Security Internals
Android Security InternalsAndroid Security Internals
Android Security InternalsOpersys inc.
 
Embedded Android Workshop with Pie
Embedded Android Workshop with PieEmbedded Android Workshop with Pie
Embedded Android Workshop with PieOpersys inc.
 
Android's HIDL: Treble in the HAL
Android's HIDL: Treble in the HALAndroid's HIDL: Treble in the HAL
Android's HIDL: Treble in the HALOpersys inc.
 
Android Treble: Blessing or Trouble?
Android Treble: Blessing or Trouble?Android Treble: Blessing or Trouble?
Android Treble: Blessing or Trouble?Opersys inc.
 
Embedded Android Workshop with Oreo
Embedded Android Workshop with OreoEmbedded Android Workshop with Oreo
Embedded Android Workshop with OreoOpersys inc.
 
Embedded Android Workshop with Nougat
Embedded Android Workshop with NougatEmbedded Android Workshop with Nougat
Embedded Android Workshop with NougatOpersys inc.
 
Embedded Android Workshop with Nougat
Embedded Android Workshop with NougatEmbedded Android Workshop with Nougat
Embedded Android Workshop with NougatOpersys inc.
 
Android Things: Android for IoT
Android Things: Android for IoTAndroid Things: Android for IoT
Android Things: Android for IoTOpersys inc.
 
Android Things Internals
Android Things InternalsAndroid Things Internals
Android Things InternalsOpersys inc.
 
Scheduling in Android
Scheduling in AndroidScheduling in Android
Scheduling in AndroidOpersys inc.
 
Brillo / Weave Internals
Brillo / Weave InternalsBrillo / Weave Internals
Brillo / Weave InternalsOpersys inc.
 
Android Platform Debugging and Development
Android Platform Debugging and DevelopmentAndroid Platform Debugging and Development
Android Platform Debugging and DevelopmentOpersys inc.
 
Memory Management in Android
Memory Management in AndroidMemory Management in Android
Memory Management in AndroidOpersys inc.
 
Embedded Android Workshop with Nougat
Embedded Android Workshop with NougatEmbedded Android Workshop with Nougat
Embedded Android Workshop with NougatOpersys inc.
 
Brillo / Weave Internals
Brillo / Weave InternalsBrillo / Weave Internals
Brillo / Weave InternalsOpersys inc.
 
Android Platform Debugging and Development
Android Platform Debugging and DevelopmentAndroid Platform Debugging and Development
Android Platform Debugging and DevelopmentOpersys inc.
 
Memory Management in Android
Memory Management in AndroidMemory Management in Android
Memory Management in AndroidOpersys inc.
 

Mehr von Opersys inc. (20)

Android Automotive
Android AutomotiveAndroid Automotive
Android Automotive
 
Android 10 Internals Update
Android 10 Internals UpdateAndroid 10 Internals Update
Android 10 Internals Update
 
Android Security Internals
Android Security InternalsAndroid Security Internals
Android Security Internals
 
Embedded Android Workshop with Pie
Embedded Android Workshop with PieEmbedded Android Workshop with Pie
Embedded Android Workshop with Pie
 
Android's HIDL: Treble in the HAL
Android's HIDL: Treble in the HALAndroid's HIDL: Treble in the HAL
Android's HIDL: Treble in the HAL
 
Android Treble: Blessing or Trouble?
Android Treble: Blessing or Trouble?Android Treble: Blessing or Trouble?
Android Treble: Blessing or Trouble?
 
Embedded Android Workshop with Oreo
Embedded Android Workshop with OreoEmbedded Android Workshop with Oreo
Embedded Android Workshop with Oreo
 
Embedded Android Workshop with Nougat
Embedded Android Workshop with NougatEmbedded Android Workshop with Nougat
Embedded Android Workshop with Nougat
 
Embedded Android Workshop with Nougat
Embedded Android Workshop with NougatEmbedded Android Workshop with Nougat
Embedded Android Workshop with Nougat
 
Android Things: Android for IoT
Android Things: Android for IoTAndroid Things: Android for IoT
Android Things: Android for IoT
 
Android Things Internals
Android Things InternalsAndroid Things Internals
Android Things Internals
 
Scheduling in Android
Scheduling in AndroidScheduling in Android
Scheduling in Android
 
Brillo / Weave Internals
Brillo / Weave InternalsBrillo / Weave Internals
Brillo / Weave Internals
 
Android Platform Debugging and Development
Android Platform Debugging and DevelopmentAndroid Platform Debugging and Development
Android Platform Debugging and Development
 
Memory Management in Android
Memory Management in AndroidMemory Management in Android
Memory Management in Android
 
Embedded Android Workshop with Nougat
Embedded Android Workshop with NougatEmbedded Android Workshop with Nougat
Embedded Android Workshop with Nougat
 
Brillo / Weave Internals
Brillo / Weave InternalsBrillo / Weave Internals
Brillo / Weave Internals
 
Project Ara
Project AraProject Ara
Project Ara
 
Android Platform Debugging and Development
Android Platform Debugging and DevelopmentAndroid Platform Debugging and Development
Android Platform Debugging and Development
 
Memory Management in Android
Memory Management in AndroidMemory Management in Android
Memory Management in Android
 

Kürzlich hochgeladen

Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxhariprasad279825
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxNavinnSomaal
 
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo DayH2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo DaySri Ambati
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfRankYa
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 

Kürzlich hochgeladen (20)

Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptx
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
 
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo DayH2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdf
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 

Leveraging Android's Linux Heritage at AnDevCon3

  • 1. Leveraging Android's Linux Heritage AnDevCon III Karim Yaghmour @karimyaghmour 1
  • 2. These slides are made available to you under a Creative Commons Delivered and/or customized by 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 2
  • 3. About ● Author of: ● Introduced Linux Trace Toolkit in 1999 ● Originated Adeos and relayfs (kernel/relay.c) ● Training, Custom Dev, Consulting, ... 3
  • 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 4
  • 5. Agenda ● Goal ● Rationale ● Stack Comparison ● Roadblocks ● Where do I start? ● Coexistence Approaches ● Unresolved / Uncharted ● Demo 5
  • 6. 1. Goal ● Opening as many cans of worms as possible ● Can “Linux” and Android Coexist and Interact? 6
  • 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 7
  • 8. 3. Stack Comparison ● Android Concepts Recap ● Overall Architecture EL ● Overall Architecture Android 8
  • 9. 3.1. Android Concepts Recap ● Components ● Intents ● Component lifecycle ● Manifest file ● Processes and threads ● Remote procedure calls 9
  • 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 10
  • 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 11
  • 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 12
  • 13. 13
  • 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 14
  • 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 15
  • 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 16
  • 18. 3.3. Overall Architecture – Android 18
  • 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, ... 19
  • 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 20
  • 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? 21
  • 22. 22
  • 23. 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 ● ... 23
  • 24. 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.” 24
  • 25. 9. Tools ● GNU cross-development toolchain: ● gcc - compiler ● as - assembler ● ld - linker ● gdb/gdbserver - debugger ● etc. ● C library: uClibc, eglibc or glibc 25
  • 26. 10. Embedded Linux Workspace ● Need to organize the components used during cross-platform development. Workspace layout: bootldr: target bootloader (s) build-tools: toolchain build packages and sources debug: debugging tools doc: project documentation images: binary images ready to be used on target kernel: sources and build directories for target kernels project: your own custom code for the target rootfs: root filesystem as seen on the target sysapps: sources for target's system applications tmp: temporary data and experiments tools: toolchain and all other tools required to build software for the target. 26
  • 27. 10.1. Workspace env. vars. script ● Complete workspace script (devex) export PROJECT=emblinux export PRJROOT=/home/karim/${PROJECT} export TARGET=arm-none-linux-gnueabi export PATH=${PATH}:[CODESOURCERY_DIR]/bin cd $PRJROOT ● To use this script: $ .⌴ devex ● Possible values for $TARGET: ● ARM: arm-linux, arm-unknown-linux-gnueabi ● MIPS: mips-linux, mipsel-unknown-linux-gnu ● I386: i386-linux, i586-geode-linux-uclibc 27
  • 28. 11. Basic root filesystem structure ● Unix FS structured for multi-user systems ● Some directories not necessary for embedded ● Filesystem Hierarchy Standard (FHS): ● /bin => Essential user binaries ● /boot => Bootloader and kernel images ● /dev => Device files ● /etc => System configuration ● /home => User home directories ● /lib => Essential shared libs and kernel modules ● /mnt => Temporary mount point ● /opt => Add-on software packages ● /sbin => Essential system binaries ● /tmp => Temporary files ● /usr => Secondary hierarchy (mostly user apps) ● /var => Variable data generated by daemons 28
  • 29. Non-essential multi-user dirs: ● /home, /mnt, /opt, /root ● Depends on bootloader: ● /boot ● Traditionally “essential”: ● /bin, /dev, /etc, /lib, /proc, /sbin, /usr, /tmp, /var ● Careful with “/etc”, Android needs it to point to “/system/etc” for Dbus config ... Just hack it. ● Contain their own hierarchy: ● /usr, /var 29
  • 30. What are all these binaries directories for? ● /bin => Essential binaries for user and admin ● /sbin => Essential binaries for admin ● /usr/bin => Non-essential user and admin binaries ● /usr/sbin=> Non-essential admin binaries ● What are all those libraries directories for? ● /lib => Essential system libraries ● /usr/lib => Non-essential libraries ● The kernel does not force FS layout. Layout is “universally” agree upon (i.e. FHS.) 30
  • 31. To start working on rootfs: $ cd ${PRJROOT}/rootfs ● Create core rootfs directories: $ mkdir bin lib sbin usr var ● Create the /usr hierarchy: $ mkdir usr/{bin,lib,sbin} ● Create the /var hierarchy: $ mkdir var/{lib,lock,log,run,tmp} $ chmod 1777 var/tmp 31
  • 33. 12.1. glibc ● glibc components: ● Actual shared libraries: – Format: libLIB_NAME-GLIBC_VER.so – Examples: libm-2.3.2.so, libc-2.3.2.so ● Major revision version symbolic links: – Format: libLIB_NAME.so.MAJOR_REV_VER – Examples: libdl.so.2, libc.so.6 ● Version-independent symbolic links to the major revision version symbolic links: – Format: libLIB_NAME.so – Examples: libdl.so, libm.so ● Static library archives: – Format: libLIB_NAME.a – Examples: libdl.a, libm.a 33
  • 34. For target, need: ● The actual shared libs ● The major revision version symbolic links ● Also need dynamic linker: ● Actual linker: ld-GLIBC_VER.so ● Symbolic link to linker: – x86, ARM, SH, m68k => ld-linux.so.MAJOR_REV_VER – MIPS, PPC => ld.so.MAJOR_REV_VER ● Must determine exact library components required. ● BELS table 6.2 contains complete list 34
  • 35. Most important components: ● ld => the dynamic linker ● libc => the C library ● libm => the math library ● libdl => the shared objects manipulation library ● Must determine exact dependencies of your applications. ● Native ldd is not cross-platform-capable ● Can use readelf or uclibc-ldd: 35
  • 36. Copying all libraries: $ cp -d [CODESOURCERY_DIR]/arm-none-linux-gnueabi/libc/lib/* > ${PRJROOT}/rootfs/lib ● Stripping all target libraries for space efficiency: $ arm-none-linux-gnueabi-strip ${PRJROOT}/rootfs/lib/*.so* 36
  • 37. 12.2. uClibc ● Same naming conventions as glibc ● Implements most of the glibc components: ● ld, libc, libcrypt, libdl, libm, libpthread, libresolv, libutil. ● uClibc libraries can coexist with glibc libraries in target's /lib directory. ● Copying all uClibc components: $ cd ${PREFIX}/uclibc/lib $ cp *-*.so ${PRJROOT}/rootfs/lib $ cp -d *.so.[*0-9] ${PRJROOT}/rootfs/lib ● No need to strip uClibc libraries, they are stripped by the uClibc build script 37
  • 38. 13. Main system applications ● Unix systems rely on a common set of commands ● Standard distros have one binary per command ● May compile each relevant command one-by-one or use packages that provide many commands in a single binary: 1.Busybox 2.Distro 38
  • 39. 13.1. BusyBox ● Main package used in embedded Linux to provide core set of Unix commands: busybox.net [, [[, acpid, add-shell, addgroup, adduser, adjtimex, arp, arping, ash, awk, base64, basename, beep, blkid, blockdev, bootchartd, brctl, bunzip2, bzcat, bzip2, cal, cat, catv, chat, chattr, chgrp, chmod, chown, chpasswd, chpst, chroot, chrt, chvt, cksum, clear, cmp, comm, cp, cpio, crond, crontab, cryptpw, cttyhack, cut, date, dc, dd, deallocvt, delgroup, deluser, depmod, devmem, df, dhcprelay, diff, dirname, dmesg, dnsd, dnsdomainname, dos2unix, du, dumpkmap, dumpleases, echo, ed, egrep, eject, env, envdir, envuidgid, ether-wake, expand, expr, fakeidentd, false, fbset, fbsplash, fdflush, fdformat, fdisk, fgconsole, fgrep, find, findfs, flock, fold, free, freeramdisk, fsck, fsck.minix, fsync, ftpd, ftpget, ftpput, fuser, getopt, getty, grep, gunzip, gzip, halt, hd, hdparm, head, hexdump, hostid, hostname, httpd, hush, hwclock, id, ifconfig, ifdown, ifenslave, ifplugd, ifup, inetd, init, insmod, install, ionice, iostat, ip, ipaddr, ipcalc, ipcrm, ipcs, iplink, iproute, iprule, iptunnel, kbd_mode, kill, killall, killall5, klogd, last, length, less, linux32, linux64, linuxrc, ln, loadfont, loadkmap, logger, login, logname, logread, losetup, lpd, lpq, lpr, ls, lsattr, lsmod, lspci, lsusb, lzcat, lzma, lzop, lzopcat, makedevs, makemime, man, md5sum, mdev, mesg, microcom, mkdir, mkdosfs, mke2fs, mkfifo, mkfs.ext2, mkfs.minix, mkfs.vfat, mknod, mkpasswd, mkswap, mktemp, modinfo, modprobe, more, mount, mountpoint, mpstat, mt, mv, nameif, nbd-client, nc, netstat, nice, nmeter, nohup, nslookup, ntpd, od, openvt, passwd, patch, pgrep, pidof, ping, ping6, pipe_progress, pivot_root, pkill, pmap, popmaildir, poweroff, powertop, printenv, printf, ps, pscan, pwd, raidautorun, rdate, rdev, readahead, readlink, readprofile, realpath, reboot, reformime, remove-shell, renice, reset, resize, rev, rm, rmdir, rmmod, route, rpm, rpm2cpio, rtcwake, run- parts, runlevel, runsv, runsvdir, rx, script, scriptreplay, sed, sendmail, seq, setarch, setconsole, setfont, setkeycodes, setlogcons, setsid, setuidgid, sh, sha1sum, sha256sum, sha512sum, showkey, slattach, sleep, smemcap, softlimit, sort, split, start-stop-daemon, stat, strings, stty, su, sulogin, sum, sv, svlogd, swapoff, swapon, switch_root, sync, sysctl, syslogd, tac, tail, tar, tcpsvd, tee, telnet, telnetd, test, tftp, tftpd, time, timeout, top, touch, tr, traceroute, traceroute6, true, tty, ttysize, tunctl, udhcpc, udhcpd, udpsvd, umount, uname, unexpand, uniq, unix2dos, unlzma, unlzop, unxz, unzip, uptime, usleep, uudecode, uuencode, vconfig, vi, vlock, volname, wall, watch, watchdog, wc, wget, which, who, whoami, xargs, xz, xzcat, yes, zcat, zcip 39
  • 40. Download BusyBox (1.18.3) to your $ {PRJROOT}/sysapps directory and extract it there. ● Move to the directory for the rest of the setup: $ cd ${PRJROOT}/sysapps/busybox-1.18.3 ● Configuration of BusyBox's options: $ make menuconfig 40
  • 41. 41
  • 42. “Busybox Settings”: ● “Build Options” -> Cross-compiler prefix: ${TARGET}- ● “Installation Options” -> Installation prefix: ${PRJROOT}/rootfs ● Build: $ make ● Install: $ make install 42
  • 43. 14. 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! 43
  • 44. 14.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 44
  • 45. 14.2. Demo 2 - Architecture 45
  • 46. 14.3. Demo 3 – LTT, the revenge ● Patch kernel ● Cross-build ltt-ctl ● Modify AOSP to log to LTT 46
  • 47. Thank you ... VZADC3 karim.yaghmour@opersys.com 47