Native Android Userspace part of the Embedded Android Workshop at Linaro Connect Asia 2013

30
1 Embedded Android Workshop Part 3 - Native Android user-space Linaro Connect Asia 2013 Karim Yaghmour @karimyaghmour

Transcript of Native Android Userspace part of the Embedded Android Workshop at Linaro Connect Asia 2013

Page 1: Native Android Userspace part of the Embedded Android Workshop at Linaro Connect Asia 2013

1

Embedded Android Workshop

Part 3 - Native Android user-space

Linaro Connect Asia 2013

Karim Yaghmour@karimyaghmour

Page 2: Native Android Userspace part of the Embedded Android Workshop at Linaro Connect Asia 2013

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-2013, Opersys inc.

These slides created by: Karim Yaghmour

Originals at: www.opersys.com/community/docs

Delivered and/or customized by

Page 3: Native Android Userspace part of the Embedded Android Workshop at Linaro Connect Asia 2013

3

About

● Author of:

● Introduced Linux Trace Toolkit in 1999● Originated Adeos and relayfs (kernel/relay.c)● Training, Custom Dev, Consulting, ...

Page 4: Native Android Userspace part of the Embedded Android Workshop at Linaro Connect Asia 2013

4

Native Android User-Space

● Filesystem layout● Architecture vs. filesystem● Build system and filesystem● adb● Command line● Init● ueventd● Boot logo● Bionic● Tiny Android● Legacy integration

Page 5: Native Android Userspace part of the Embedded Android Workshop at Linaro Connect Asia 2013

5

1. Filesystem layout

Page 6: Native Android Userspace part of the Embedded Android Workshop at Linaro Connect Asia 2013

6

● /acct => Control Group mount point (Documentation/cgroups.txt)● /cache => cache flash partition● /d => Symlink to /sys/kernel/debug● /data => Android's “/data” filesystem● /dev => Device nodes● /etc => Symlink to /system/etc● /mnt => Temporary mount point● /proc => procfs● /root => unused● /sbin => eventd and adbd● /sdcard => SD card mountpoint● /sys => sysfs● /system => Android's “/system” filesystem● /vendor => Symlink to /system/vendor

1.1. Root directory

Page 7: Native Android Userspace part of the Embedded Android Workshop at Linaro Connect Asia 2013

7

1.1. /system

● /app => Stock apps installed● /bin => Native binaries and daemons● /etc => Configuration files● /fonts => TTFs● /framework => Android framework .jar files● /lib => Native libraries● /usr => Miniature “/usr”● /xbin => Optional/Extra binaries

Page 8: Native Android Userspace part of the Embedded Android Workshop at Linaro Connect Asia 2013

8

1.2. /data

● /anr => ANR traces● /app => App install location● /app-private => Protected apps● /backup => For Backup Manager● /dalvik-cache => Dalvik DEX cache● /data => App data● /dontpanic => Last panic output (console + threads) for “dumpstate”● /local => Shell-writable space● /misc => Misc. data (wifi, vpn, bluetooth, ...)● /property => Persistent system properties (country, lang., ...)● /secure => Secure Android data available● /system => System data

Page 9: Native Android Userspace part of the Embedded Android Workshop at Linaro Connect Asia 2013

9

2. Architecture vs. filesystem

Page 10: Native Android Userspace part of the Embedded Android Workshop at Linaro Connect Asia 2013

10

3. Build system and filesystem

● Build templates● BUILD_EXECUTABLE = /system/bin● BUILD_SHARED_LIBRARY = /system/lib● BUILD_PACKAGE = /system/app

● Default rights and ownership● system/core/include/private/android_filesystem_config.h● User IDs / names● android_dirs struct● android_files struct

Page 11: Native Android Userspace part of the Embedded Android Workshop at Linaro Connect Asia 2013

11

4. adb

Page 12: Native Android Userspace part of the Embedded Android Workshop at Linaro Connect Asia 2013

12

4.1. What adb can do

● See online help for full details● Managing device connections● Remote commands:

● shell● log dumping● bug reports● port forwarding● dalvik debugging

Page 13: Native Android Userspace part of the Embedded Android Workshop at Linaro Connect Asia 2013

13

● Filesystem commands● push● pull● sync● install / uninstall

● State-altering commands● reboot● run as root● switching connection type● controlling the emulator

● Tunneling PPP

Page 14: Native Android Userspace part of the Embedded Android Workshop at Linaro Connect Asia 2013

14

5. Command line

● Shell:● NetBSD shell up to 2.3/GB● MirBSD Korn shell since 4.0/ICS

● Toolbox:● Traditional Linux commands● Global properties● Input events● Services control● Logging● ioctl● Device wiping● etc.

Page 15: Native Android Userspace part of the Embedded Android Workshop at Linaro Connect Asia 2013

15

● In aosp:● /system/core/toolbox

● In filesystem:● /system/bin/toolbox

● Provides

alarm date getevent insmod ls mv powerd renice schedtop smd top dd getprop ioctl lsmod nandread printenv rm sendevent start umount cat hd ionice lsof netstat ps rmdir setconsole stop uptime chmod df id kill mkdir newfs_msdos r rmmod setkey sync vmstat chown dmesg ifconfig ln readtty rotatefb setprop syren watchprops cmp exists iftop log mount notify reboot route sleep wipe

Page 16: Native Android Userspace part of the Embedded Android Workshop at Linaro Connect Asia 2013

16

● logcat● netcfg● debuggerd

Page 17: Native Android Userspace part of the Embedded Android Workshop at Linaro Connect Asia 2013

17

6. Init

Page 18: Native Android Userspace part of the Embedded Android Workshop at Linaro Connect Asia 2013

18

6.1. Config files

● Location:● /init.rc● /init.[board].rc

● Semantics:● actions

– Property triggers– Commands

● services (not related to system services or apps)– Parameters

Page 19: Native Android Userspace part of the Embedded Android Workshop at Linaro Connect Asia 2013

19

6.2. Global properties

● /dev/socket/property_service● /dev/__properties__● foo.bar.property● ro.*● persist.* => /data/property● ctl.*● net.change

Page 20: Native Android Userspace part of the Embedded Android Workshop at Linaro Connect Asia 2013

20

● Std files:● /system/build.prop● /default.prop

● Other files:● /system/default.prop● /data/local.prop

● Code:– property_get("dalvik.vm.heapsize", heapsizeOptsBuf+4, "16m");

Page 21: Native Android Userspace part of the Embedded Android Workshop at Linaro Connect Asia 2013

21

7. ueventd

Page 22: Native Android Userspace part of the Embedded Android Workshop at Linaro Connect Asia 2013

22

7.1. /ueventd.rc

/dev/null 0666 root root

/dev/zero 0666 root root

/dev/full 0666 root root

/dev/ptmx 0666 root root

/dev/tty 0666 root root

Page 23: Native Android Userspace part of the Embedded Android Workshop at Linaro Connect Asia 2013

23

8. Boot logo

$ cd device/acme/coyotepad

$ convert ­depth 8 acmelogo.png rgb:acmelogo.raw

$ rgb2565 ­rle < acmelogo.raw > acmelogo.rle

Page 24: Native Android Userspace part of the Embedded Android Workshop at Linaro Connect Asia 2013

24

9. Bionic

● In aosp:● /bionic

● In filesystem:● /system/lib

● Provides:● libc● libm● libdl● libstd++● libthread_db● linker

Page 25: Native Android Userspace part of the Embedded Android Workshop at Linaro Connect Asia 2013

25

10. Tiny Android

$ BUILD_TINY_ANDROID=true make ­j4

● 3MB filesystem● Minimal root fs● init● toolbox + shell● adb● bionic + utility libs● No “system/framework/”● No “system/app”

Page 26: Native Android Userspace part of the Embedded Android Workshop at Linaro Connect Asia 2013

26

Page 27: Native Android Userspace part of the Embedded Android Workshop at Linaro Connect Asia 2013

27

11. Legacy Integration

● What if I ... ?:● have been using my custom rootfs forever● really need glibc● have a huge stack based on “legacy Linux”● don't want to deal with AOSP's build system● want BusyBox● want to unify with a std Linux desktop● need things the AOSP doesn't provide● have a ton of Linux drivers and want those to be used by Android● ...

● Know this: filesystem integration is trivial:● Change build system to copy your custom rootfs● Change init scripts to start you own daemons● Use sockets to communicate

● Know this too: std Linux desktop integration is NOT

Page 28: Native Android Userspace part of the Embedded Android Workshop at Linaro Connect Asia 2013

28

Page 29: Native Android Userspace part of the Embedded Android Workshop at Linaro Connect Asia 2013

29

Page 30: Native Android Userspace part of the Embedded Android Workshop at Linaro Connect Asia 2013

30

Thank you ...

[email protected]