Your SlideShare is downloading. ×
0
Android forEmbedded Linux Developers      AnDevCon – March 9th 2011   Karim Yaghmour / @karimyaghmour
About ...●   Author of:●   Introduced Linux Trace Toolkit in 1999●   Originated Adeos and relayfs (kernel/relay.c)
1. Motivation2. Stack Comparison3. Android-Specific Concepts4. Useful Embedded Linux Tricks5. Pros and Cons
1. Motivation●   Embedded Linux developers:    ●   Developing Android apps    ●   Porting apps    ●   Creating custom Andr...
2. Stack Comparison●   Starting point●   Architecture●   Requirements●   Development approach●   Development tools●   Deve...
2.1. Starting point - EL●   Usually:    ●   Bare/custom hardware    ●   Create/building custom stack components    ●   Lot...
2.1. Starting point - Android●   Usually – App dev:    ●   Functional consumer-ready device    ●   Fully-functional develo...
2.2. Architecture - EL
2.2. Architecture - Android
2.3. Requirements - EL●   Minimal:    ●   Linux workstation    ●   GNU cross-development toolchain    ●   Internet connect...
2.3. Requirements - Android●   Minimal:    ●   Windows / Mac / Linux workstation    ●   JDK    ●   Android SDK    ●   Ecli...
2.4. Development approach - EL1.Get a functional toolchain2.Generate and “install” bootloader3.Generate and “install” kern...
2.4. Development approach - Android1.Create new project in Eclipse2.Write application3.Use emulator to debug4.Test applica...
2.5. Development tools - EL●   GNU cross-development toolchain:    ●   gcc - compiler    ●   as - assembler    ●   ld - li...
2.5. Development tools - Android●   SDK:    ●   android – manage AVDs and SDK components    ●   apkbuilder – creating .apk...
2.6. Development environment - EL●   Editor/IDE:    ●   vi    ●   emacs    ●   Eclipse    ●   K Develop●   CLI●   Serial p...
2.6. Development env. - Android●   Mainly:    ●   Eclipse    ●   Emulator●   Maybe:    ●   Favourite editor    ●   CLI    ...
2.7. Bootloader - EL●   U-Boot: PPC, ARM, x86, MIPS, SuperH, ...    ●   CLI interface, serial-based    ●   Environment var...
2.7. Bootloader - Android●   aosp/bootable/bootloader    ●   Custom bootloader for Android    ●   USB-based    ●   Impleme...
2.8. Kernel – EL●   Stock kernel from kernel.org●   May require porting to custom hardware
2.8. Kernel - Android●   Android-specific patches:    ●   Wakelocks    ●   lowmem handler    ●   Binder    ●   Ashmem – an...
2.9. Root filesystem - EL●   /bin    =>   Essential user binaries●   /boot   =>   Bootloader and kernel images●   /dev    ...
2.9. Root filesystem - Android●   Mainly    ●   /data    => User data    ●   /system => System components●   Also found:  ...
2.10. Startup - EL●   Software taking part in the systems startup:    ●   Bootloader    ●   Kernel    ●   Init process●   ...
●   Kernel:    ●   Early startup code is very hardware dependent    ●   Initializes environment for the running of C code ...
2.10. Startup - Android●   Components involved    ●   Bootloader    ●   Kernel    ●   Init    ●   Zygote    ●   System Ser...
●   Flash layout:       0x000003860000­0x000003900000 : "misc"       0x000003900000­0x000003e00000 : "recovery"       0x00...
●   Androids init - opens, parses, and runs /init.rc:    ●   Create mountpoints and mount filesystems    ●   Set up filesy...
2.11. Default applications - EL●   Busybox     [, [[, acpid, add-shell, addgroup, adduser, adjtimex, arp, arping, ash, awk...
2.11. Default applications - Android    ● System Server    ● Toolbox    ● Native daemons    ● Stock Android apps/packages/...
2.12. Application development - EL●   Most apps:    ●   C library    ●   Unix systems programming●   Window-based apps:   ...
2.12. Application dev. - Android●   Android API
2.13. Application debugging - EL●   gdb●   strace●   IDE integration
2.13. Application debugging - Android●   adb●   ddms●   monkeyrunner●   traceview●   logcat●   Eclipse integration
3. Android-specific Concepts●   App fundamentals●   Framework components●   Native development
3.1. App fundamentals●   Components●   Intents●   Component lifecycle●   Manifest file●   Processes and threads●   Remote ...
3.1.1. Components●   1 App = N Components●   Apps can use components of other applications●   App processes are automagica...
3.1.2. Intents●   Intent = asynchronous message w/ or w/o    designated target●   Like a polymorphic Unix signal, but w/o ...
3.1.3. Component lifecycle●   System automagically starts/stops/kills    processes:    ●   Entire system behaviour predica...
3.1.4. Manifest file●   Informs system about app’s components●   XML format●   Always called AndroidManifest.xml●   Activi...
3.1.5. Processes and threads●   Processes    ●   Default: all callbacks to any app Component are issued to the main proces...
3.1.6. Remote procedure calls●   Apparently System V IPC is evil ...●   Android RPCs = Binder mechanism●   Binder is a low...
3.2. Framework components●   UI●   Data storage●   Security/Permissions●   ... and much more ... :    ●    Graphics    ●  ...
3.2.1. UI●   Everything based on hierarchy of Views and    ViewGroups (layouts)●   Declared in XML or dynamically through ...
3.2.2. Data storage●   Shared preferences    ●   Private primitive key-pair values●   Internal storage    ●   Private data...
3.2.3. Security/Permissions●   Most security enforced at process level: UID, GID●   Permissions enforce restrictions on:  ...
3.3. Native development●   What it can and cannot do●   Getting and installing the NDK●   Using the NDK●   Implementing fu...
3.3.1. What it can and cannot do●   Useful for:    ●   Porting existing body of code to Android    ●   Developing optimize...
3.3.2. Getting and installing the NDK●   What’s in the NDK?    ●   Development tools    ●   Stable native APIs system head...
3.3.3. Using the NDK1.Place native code under <project>/jni/...2.Create <project>/jni/Android.mk to describe native code  ...
3.3.4. Implementing fully native apps●   Android 2.3 and up●   Native lifecycle management●   Still runs within context of...
4. Useful Embedded Linux Tricks●   crosstool-ng●   Busybox●   uClibc
4.1. crosstool-ng●   Cross-development toolchain generator●   Successor to crosstool●   Available at:     http://ymorin.is...
4.2. Busybox●   Replicate Linux CLI experience     [, [[, acpid, add-shell, addgroup, adduser, adjtimex, arp, arping, ash,...
●   Some features of interest:    ●   color-coded file lists    ●   tab completion    ●   "home", "end"    ●   grep, sed, ...
●   Download BusyBox (1.18.3)●   Move to the directory for the rest of the setup:    $ cd busybox-1.18.3●   Configuration ...
●   Cheat sheet:       Commands to get the new Busybox onto the rootfs:       adb shell mount -o remount,rw rootfs /      ...
4.3. uClibc●   Originates from uClinux effort●   Support both CPUs that have and those that    lack an MMU and/or an FPU.●...
5. Pros and Cons●   Target application type:    ●   Stock Android vs. Custom Android●   Development language●   Licensing●...
Thank you ...karim.yaghmour@opersys.com     www.opersys.com
Upcoming SlideShare
Loading in...5
×

Android for Embedded Linux Developers

13,090

Published on

Android for Embedded Linux Developers Talk given by Karim Yaghmour at AnDevCon March 2011

Published in: Technology
0 Comments
7 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
13,090
On Slideshare
0
From Embeds
0
Number of Embeds
10
Actions
Shares
0
Downloads
698
Comments
0
Likes
7
Embeds 0
No embeds

No notes for slide

Transcript of "Android for Embedded Linux Developers"

  1. 1. Android forEmbedded Linux Developers AnDevCon – March 9th 2011 Karim Yaghmour / @karimyaghmour
  2. 2. About ...● Author of:● Introduced Linux Trace Toolkit in 1999● Originated Adeos and relayfs (kernel/relay.c)
  3. 3. 1. Motivation2. Stack Comparison3. Android-Specific Concepts4. Useful Embedded Linux Tricks5. Pros and Cons
  4. 4. 1. Motivation● Embedded Linux developers: ● Developing Android apps ● Porting apps ● Creating custom Android device● Android developers: ● Leverage Linux heritage ● Learn embedded Linux tricks ● Understand relation to embedded Linux
  5. 5. 2. Stack Comparison● Starting point● Architecture● Requirements● Development approach● Development tools● Development environment● Bootloader● Kernel● Root filesystem● Startup● Default applications● Application development
  6. 6. 2.1. Starting point - EL● Usually: ● Bare/custom hardware ● Create/building custom stack components ● Lots of low-level work ahead (drivers, etc.) ● No tools to start with
  7. 7. 2.1. Starting point - Android● Usually – App dev: ● Functional consumer-ready device ● Fully-functional development environment ● Distribution system for your app: Market● Exceptionally – Device dev: ● Bare/custom hardware ● Create/building custom stack components ● Lots of low-level work ahead (drivers, etc.) ● Fewer tools to start with
  8. 8. 2.2. Architecture - EL
  9. 9. 2.2. Architecture - Android
  10. 10. 2.3. Requirements - EL● Minimal: ● Linux workstation ● GNU cross-development toolchain ● Internet connection – download packages● Extras: ● Distribution (free or $) ● JTAG debugger
  11. 11. 2.3. Requirements - Android● Minimal: ● Windows / Mac / Linux workstation ● JDK ● Android SDK ● Eclipse● Extras: ● Android NDK ● Android Open Source Project
  12. 12. 2.4. Development approach - EL1.Get a functional toolchain2.Generate and “install” bootloader3.Generate and “install” kernel4.Create a basic functional root filesystem5.Configure target to boot over NFS6. ... Develop ...7.Write root filesystem to flash8.Ship
  13. 13. 2.4. Development approach - Android1.Create new project in Eclipse2.Write application3.Use emulator to debug4.Test application on real device(S)5.Ship
  14. 14. 2.5. Development tools - EL● GNU cross-development toolchain: ● gcc - compiler ● as - assembler ● ld - linker ● gdb/gdbserver - debugger ● etc.● C library: uClibc, eglibc or glibc● JTAG debugger
  15. 15. 2.5. Development tools - Android● SDK: ● android – manage AVDs and SDK components ● apkbuilder – creating .apk packages ● dx – converting .jar to .dex ● adb – debug bridge ● emulator – QEMU-based ARM emulator ● ...● Eclipse w/ ADT plugin● NDK: GNU toolchain for native binaries
  16. 16. 2.6. Development environment - EL● Editor/IDE: ● vi ● emacs ● Eclipse ● K Develop● CLI● Serial port emulator: minicom, C-Kermit, ...
  17. 17. 2.6. Development env. - Android● Mainly: ● Eclipse ● Emulator● Maybe: ● Favourite editor ● CLI ● adb
  18. 18. 2.7. Bootloader - EL● U-Boot: PPC, ARM, x86, MIPS, SuperH, ... ● CLI interface, serial-based ● Environment variables, including built-in scripts ● Evolved from forks and merges (8xxrom / PPCBoot / ARMBoot) ● Very versatile and flexible bootloader ● Actively maintained ● Very mature ● Supports a wide range of boot methods: TFTP, DHCP, IDE, SCSI, DOC, JFFS2, ... ● Fairly well documented ● Distributed under the terms of the GPL
  19. 19. 2.7. Bootloader - Android● aosp/bootable/bootloader ● Custom bootloader for Android ● USB-based ● Implements the “fastboot” protocol ● Controlled via “fastboot” cli tool on host● aosp/bootable/recovery ● UI-based recovery boot program ● Accessed through magic key sequence at boot ● Usually manufacturer specific variant
  20. 20. 2.8. Kernel – EL● Stock kernel from kernel.org● May require porting to custom hardware
  21. 21. 2.8. Kernel - Android● Android-specific patches: ● Wakelocks ● lowmem handler ● Binder ● Ashmem – anynoymous shared memory ● RAM console ● Logger ● ...
  22. 22. 2.9. Root filesystem - EL● /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● /proc => Virtual filesystem for kernel information● /sbin => Essential system binaries● /sys => Virtual filesystem for device access and information● /tmp => Temporary files● /usr => Secondary hierarchy (mostly user apps)● /var => Variable data generated by daemons
  23. 23. 2.9. Root filesystem - Android● Mainly ● /data => User data ● /system => System components● Also found: ● /cache ● /mnt ● /sbin ● Etc.
  24. 24. 2.10. Startup - EL● Software taking part in the systems startup: ● Bootloader ● Kernel ● Init process● Bootloader: ● First to run ● Initializes hardware to a known state ● Places kernel parameters for the kernel to find ● Loads kernel and jumps to it
  25. 25. ● Kernel: ● Early startup code is very hardware dependent ● Initializes environment for the running of C code ● Jumps to the architecture-independent start_kernel() function. ● Initializes high-level kernel subsystems ● Mounts root filesystem ● Starts the init process● The init process takes care of loading all the user applications and starting the various daemons.
  26. 26. 2.10. Startup - Android● Components involved ● Bootloader ● Kernel ● Init ● Zygote ● System Server ● Activity Manager ● Launcher (Home)
  27. 27. ● Flash layout: 0x000003860000­0x000003900000 : "misc" 0x000003900000­0x000003e00000 : "recovery" 0x000003e00000­0x000004300000 : "boot" Kernel 0x000004300000­0x00000c300000 : "system" /system 0x00000c300000­0x0000183c0000 : "userdata" /data 0x0000183c0000­0x00001dd20000 : "cache" /cache 0x00001dd20000­0x00001df20000 : "kpanic" 0x00001df20000­0x00001df60000 : "dinfo" 0x00001df60000­0x00001dfc0000 : "setupdata" 0x00001dfc0000­0x00001e040000 : "splash1" 0x000000300000­0x000001680000 : "modem" From Acer Liquid-E
  28. 28. ● Androids init - opens, parses, and runs /init.rc: ● Create mountpoints and mount filesystems ● Set up filesystem permissions ● Set OOM adjustments properties ● Start daemons: – adbd – servicemanager (binder) – vold – netd – rild – app_process -Xzygote (Zygote) – mediaserver – ...
  29. 29. 2.11. Default applications - EL● Busybox [, [[, 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
  30. 30. 2.11. Default applications - Android ● System Server ● Toolbox ● Native daemons ● Stock Android apps/packages/apps /packages/providers /packages/inputmethodsAccountsAndSettings Launcher2 ApplicationProvider LatinIMEAlarmClock Mms CalendarProvider OpenWnnBluetooth Music ContactsProvider PinyinIMEBrowser PackageInstaller DownloadProviderCalculator Protips DrmProviderCalendar Provision GoogleContactsProviderCamera QuickSearchBox MediaProviderCertInstaller Settings TelephonyProviderContacts SoundRecorder UserDictionaryProviderDeskClock SpeechRecorderEmail StkGallery VoiceDialerHTMLViewer
  31. 31. 2.12. Application development - EL● Most apps: ● C library ● Unix systems programming● Window-based apps: ● X window ● Toolkits: – Qt / GTK ● Windowing systems: – Qt Framework (formerly Qtopia) – Gnome / KDE / Unity / etc.
  32. 32. 2.12. Application dev. - Android● Android API
  33. 33. 2.13. Application debugging - EL● gdb● strace● IDE integration
  34. 34. 2.13. Application debugging - Android● adb● ddms● monkeyrunner● traceview● logcat● Eclipse integration
  35. 35. 3. Android-specific Concepts● App fundamentals● Framework components● Native development
  36. 36. 3.1. App fundamentals● Components● Intents● Component lifecycle● Manifest file● Processes and threads● Remote procedure calls
  37. 37. 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
  38. 38. 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
  39. 39. 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
  40. 40. 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
  41. 41. 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
  42. 42. 3.1.6. Remote procedure calls● Apparently System V IPC is evil ...● Android RPCs = Binder mechanism● 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
  43. 43. 3.2. Framework components● UI● Data storage● Security/Permissions● ... and much more ... : ● Graphics ● Audio and Video ● Location and Maps ● Bluetooth ● NFC
  44. 44. 3.2.1. UI● Everything based on hierarchy of Views and ViewGroups (layouts)● Declared in XML or dynamically through Java● UI components: ● Widgets ● Event handlers ● Menus ● Dialogs ● Notifications ● ...
  45. 45. 3.2.2. Data storage● Shared preferences ● Private primitive key-pair values● Internal storage ● Private data on device memory● External storage ● Public data on shared external device (SD)● SQLite DB ● Private DB● Network connection ● Web-based storage (REST)
  46. 46. 3.2.3. Security/Permissions● Most security enforced at process level: UID, GID● Permissions enforce restrictions on: ● Per-process operations ● Per-URI access● Applications are sandboxed● Specific permissions required to “exit” sandbox● Decision to grant access based on: ● Certificates ● User prompts● All permissions must be declared statically
  47. 47. 3.3. Native development● What it can and cannot do● Getting and installing the NDK● Using the NDK● Implementing fully native apps
  48. 48. 3.3.1. What it can and cannot do● Useful for: ● Porting existing body of code to Android ● Developing optimized native apps, especially for gaming● Provides: ● Tools and build files to generate native code libraries from C/C++ ● Way to embed native libs into .apk ● Set of stable (forward-compatible) native libs ● Documentation, samples and tutorials● Enables: ● Calling native code from Java using JNI ● Implementing fully native apps (since 2.3)● Doesnt allow you to: ● Compile traditional Linux/Unix apps as-is
  49. 49. 3.3.2. Getting and installing the NDK● What’s in the NDK? ● Development tools ● Stable native APIs system headers ● Documentation - IMPORTANT ● Samples● Getting the NDK ● http://developer.android.com/sdk/ndk/index.html● Prerequisites ● Windows, Mac or Linux ● Complete SDK ● make (GNU’s) and awk ● For Windows, Cygwin 1.7 or higher● NDK set up: ● Make sure prerequisites are installed ● Download and install NDK
  50. 50. 3.3.3. Using the NDK1.Place native code under <project>/jni/...2.Create <project>/jni/Android.mk to describe native code to NDK3.Optional: create <project>/jni/Application.mk for describing which natives sources are required by app4.Build native code: • cd <project> • <ndk>/ndk-build5.Compile app with SDK. Native code will be shared lib in .apk file.
  51. 51. 3.3.4. Implementing fully native apps● Android 2.3 and up● Native lifecycle management● Still runs within context of dedicated Dalvik VM● Can use JNI to call on Java functions● Limited API: ● Activity lifecycle management ● Input events and sensors ● Window management ● Direct access to assets● Make sure your activity is called: “android.app.NativeActivity”
  52. 52. 4. Useful Embedded Linux Tricks● crosstool-ng● Busybox● uClibc
  53. 53. 4.1. crosstool-ng● Cross-development toolchain generator● Successor to crosstool● Available at: http://ymorin.is-a-geek.org/projects/crosstool● Downloads, patches, builds, installs, etc.● Comprises 23 steps● Menuconfig-based● Supports uClibc, glibc and eglibc● Supports ARM, Blackfin, MIPS, PowerPC, SH, …● Fairly well maintained
  54. 54. 4.2. Busybox● Replicate Linux CLI experience [, [[, 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
  55. 55. ● Some features of interest: ● color-coded file lists ● tab completion ● "home", "end" ● grep, sed, wc, more, less ● vi ● ifconfig ● httpd ● sendmail ● tftp ● top ● ...
  56. 56. ● Download BusyBox (1.18.3)● Move to the directory for the rest of the setup: $ cd busybox-1.18.3● Configuration of BusyBoxs options: $ make menuconfig● Options that must be set: ● “Build Options” -> “Do you want to build BusyBox with a Cross Compiler?” ● Cross-compiler prefix: arm-unknown-linux-gnueabi- ● “Installation Options” -> “Dont use /usr” ● Installation prefix: ${PRJROOT}/rootfs● Build: $ make● Install: $ make install
  57. 57. ● Cheat sheet: Commands to get the new Busybox onto the rootfs: adb shell mount -o remount,rw rootfs / adb shell mkdir /bin adb push busybox /bin/ adb shell /bin/busybox --install /bin adb shell To do after going into the shell: /bin/ash export PATH=/bin:$PATH
  58. 58. 4.3. uClibc● Originates from uClinux effort● Support both CPUs that have and those that lack an MMU and/or an FPU.● Allows both static and dynamic linking● Most applications that build with glibc will build and work the same with uClibc.● Available from: http://uclibc.org/
  59. 59. 5. Pros and Cons● Target application type: ● Stock Android vs. Custom Android● Development language● Licensing● Branding: ● Do you care about the CTS?
  60. 60. Thank you ...karim.yaghmour@opersys.com www.opersys.com
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×