SlideShare a Scribd company logo
Android Hacks,
Variants, Tricks and
     Resources
About me
●   Author of:




●   Introduced Linux Trace Toolkit in 1999
●   Originated Adeos and relayfs (kernel/relay.c)

                                          2
Agenda
●   AOSP's limitations
●   Tearing AOSP apart
●   Forks
●   Ports
●   Mods
●   Melds



                             3
AOSP's limits
●   Rigid
●   Closed dev model
●   Fits Google's prerogatives
●   Excludes a lot of stuff
●   ... IOW, doesn't always fit what you need




                                          4
Tearing AOSP apart
●   Forks
●   Ports
●   Mods
●   Melds




                                 5
Forks
●   Cyanogenmod
●   Replicant
●   MIUI




                          6
Cyanogenmod
●   After-market handset firmware
●   Requires rooted phone
●   http://www.cyanogenmod.com
●   Advertized features:
    ●   Lockscreen Gestures
    ●   Phone Goggles
    ●   OpenVPN
    ●   Incognito mode
    ●   Themes support
    ●   DSP Equalizer
                                    7
8
●   More interestingly:
    ●   http://wiki.cyanogenmod.com/
    ●   https://github.com/CyanogenMod
    ●   Includes Busybox
    ●   Custom Launcher (ADWLauncher)
    ●   Lots of tiny tweaks and mods ... worth doing a “diff”




                                                  9
Replicant
●   Android distro that is 100% Free Software
●   http://replicant.us/
●   Includes FDroid free software app store




                                        10
MIUI
●   Closed-source fork with slick UI enhancements
●   Many translations
●   http://en.miui.com/
●   Advertized features:
    ●   Home screen
    ●   Dialer
    ●   SMS
    ●   Contacts
    ●   Themes
    ●   Camera
    ●   Gallery
    ●   Net disk, File manager, Traffic monitor, Backup, Notes, ...
                                                                 11
12
Ports
●   RIM Playbook
●   BlueStacks
●   Alien Dalvik




                           13
RIM Playbook




               14
BlueStacks




             15
Alien Dalvik (Myriad Group)




                       16
Mods
●   XDA Developers
●   ...




                            17
Melds
●   Stock glibc stack
●   Custom stacks




                                18
Melding with glibc stack

1.Rationale
2.Architecture
3.Tools
4.Embedded Linux Workspace
5.Basic root filesystem structure
6.Libraries
7.Kernel modules
8.Device files
9.Main system applications
10. Auto-generating filesystems
                                    19
1. Rationale
●   Port existing Linux apps
●   Create glibc-based apps to coexist with
    Android's Bionic-based user-space
●   Avoid having to deal with AOSP's build system
●   Avoid having having to deal w/ Bionic's quirks
    and limitations
●   Benefit from standard GNU world


                                         20
2. Architecture




                  21
22
3. Tools
●   GNU cross-development toolchain:
    ●   gcc - compiler
    ●   as - assembler
    ●   ld - linker
    ●   gdb/gdbserver - debugger
    ●   etc.
●   C library: uClibc, eglibc or glibc


                                         23
4. 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.

                                                           24
4.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
                                                 25
5. 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
                                                     26
●   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                                     27
●   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.)


                                                   28
●   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




                                         29
6. Libraries
1.glibc
2.uClibc




                          30
6.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
                                                     31
●   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


                                                  32
●   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:
                                                 33
●   Using readelf:
    $ arm­linux­readelf ­a ${PRJROOT}/rootfs/bin/busybox 
    > | grep "Shared library"
     0x00000001 (NEEDED)             Shared library: [libc.so.0]
●   Using uclibc-ldd:
    $ arm­uclibc­ldd ${PRJROOT}/rootfs/bin/busybox
    libc.so.0 => /home/karim/example­sys/tools/uclibc/lib/libc.so.0
    /lib/ld­uClibc.so.0 => /lib/ld­uClibc.so.0
●   Copying important libraries to target rootfs:
    $ cd ${TARGET_PREFIX}/lib
    $ for file in libc libcrypt libdl libm 
    > libpthread libresolv libutil
    > do
    > cp $file­*.so ${PRJROOT}/rootfs/lib
    > cp ­d $file.so.[*0­9] ${PRJROOT}/rootfs/lib
    > done
    $ cp ­d ld*.so* ${PRJROOT}/rootfs/lib

                                                       34
●   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*




                                                    35
6.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 important libraries to target rootfs:
    $ cd ${PREFIX}/uclibc/lib
    $ for file in libuClibc ld­uClibc libc libdl 
    > libcrypt libm libresolv libutil
    > do
    > cp $file­*.so ${PRJROOT}/rootfs/lib
    > cp ­d $file.so.[*0­9] ${PRJROOT}/rootfs/lib
    > done



                                                        36
●   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
7. Kernel modules
●   Kernel modules are located in /lib/modules, so they
    must be installed in $
    {PRJROOT}/rootfs/lib/modules.
●   Copying modules built earlier:
    $ cp ­a ${PRJROOT}/images/modules­2.6.37/* 
    > ${PRJROOT}/rootfs
●   Module loading customization (/etc/modprobe.conf
    or /etc/modprobe.d/)




                                                   38
8. Device files
●   All devices in Linux are seen as files (except
    Ethernet interfaces.)
●   Typical workstation distros use udev
●   Keep a copy of Documentation/devices.txt handy
●   See BELS table 6.3 for core set of /dev entries
●   Properties of each /dev node:
    ●   Filename (node name)
    ●   Type (char / block)
    ●   Major number (What type of device?)
    ●   Minor number (Which instance of the device?)
    ●   Permission bits
●   No need to create these entries since AOSP does
    it for us                             39
9. 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




                                       40
9.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

                                                                                                           41
●   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




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

●   Install:
    $ make install

                                                    44
●   Only one binary has been installed: /bin/busybox
●   All commands are symbolic links to /bin/busybox
●   Determining the command issued done through
    main's argv[] and argc.
●   Creating arbitrary links doesn't work
●   BusyBox can be told to create hard-links
●   Full command doc on web and in package
●   Customizing the paths for the various shells:
    # Set path
    PATH=/bin:/sbin:/usr/bin:/usr/sbin
    export PATH


                                         45
10. Auto-generating FSes/distros
●   Yocto
●   Buildroot
●   PTXdist
●   OpenWRT
●   LTIB
●   OpenEmbedded
●   Gentoo


                              46
Thank you ...


karim.yaghmour@opersys.com

More Related Content

PDF
Android Variants, Hacks, Tricks and Resources presented at AnDevConII
PDF
Android Hacks, Variants, Tricks and Resources ESC SV 2012
PDF
Headless Android
PDF
BeagleBoard Workshop ESC Boston 2011
PDF
Porting Android
PDF
Leveraging Android's Linux Heritage at AnDevCon3
PDF
Embedded Android Workshop at ELC Europe
PDF
Headless Android at AnDevCon3
Android Variants, Hacks, Tricks and Resources presented at AnDevConII
Android Hacks, Variants, Tricks and Resources ESC SV 2012
Headless Android
BeagleBoard Workshop ESC Boston 2011
Porting Android
Leveraging Android's Linux Heritage at AnDevCon3
Embedded Android Workshop at ELC Europe
Headless Android at AnDevCon3

What's hot (20)

PDF
Android On Development Boards at AnDevCon3
PDF
Embedded Android Workshop
PDF
Android Internals at Linaro Connect Asia 2013
PDF
Leveraging Android's Linux Heritage
PDF
Android jumpstart at ESC Boston 2011
PDF
Working with the AOSP - Linaro Connect Asia 2013
PDF
Understanding the Android System Server
PDF
Inside Android's UI
PDF
Porting Android
PDF
Android Jumpstart ESC SV 2012 Part I
PDF
Embedded Android Workshop part I ESC SV 2012
PDF
Using and Customizing the Android Framework / part 4 of Embedded Android Work...
PDF
Embedded Android Workshop with Marshmallow
PDF
Android for Embedded Linux Developers
PDF
Leveraging Android's Linux Heritage at AnDevCon IV
PDF
Scheduling in Android
PDF
Leveraging Android's Linux Heritage at ELC-E 2011
PDF
Cyborgstack
PDF
Android Internals
PDF
Android Internals
Android On Development Boards at AnDevCon3
Embedded Android Workshop
Android Internals at Linaro Connect Asia 2013
Leveraging Android's Linux Heritage
Android jumpstart at ESC Boston 2011
Working with the AOSP - Linaro Connect Asia 2013
Understanding the Android System Server
Inside Android's UI
Porting Android
Android Jumpstart ESC SV 2012 Part I
Embedded Android Workshop part I ESC SV 2012
Using and Customizing the Android Framework / part 4 of Embedded Android Work...
Embedded Android Workshop with Marshmallow
Android for Embedded Linux Developers
Leveraging Android's Linux Heritage at AnDevCon IV
Scheduling in Android
Leveraging Android's Linux Heritage at ELC-E 2011
Cyborgstack
Android Internals
Android Internals

Viewers also liked (19)

PDF
Android Platform Debugging and Development
PDF
Android Platform Debugging and Development
PDF
Android Storage - Internal and External Storages
PDF
Memory Management in Android
PDF
Embedded Android Workshop with Nougat
ODP
Enhancing and modifying_the_core_android_os
PDF
Android Platform Debugging and Development
PDF
Android Platform Debugging and Development at ABS 2014
PDF
Is Android the New King of Embedded OSes at Embedded World 2014
PDF
Android Platform Debugging and Development
PDF
Leveraging Android's Linux Heritage at AnDevCon VI
PDF
Customizing Android's UI
PDF
Memory Management in Android
PDF
Project Ara
PDF
Brillo / Weave Internals
PDF
Memory Management in Android
PDF
Embedded Android Workshop with Nougat
ODP
Android crash debugging
PDF
Scheduling in Android
Android Platform Debugging and Development
Android Platform Debugging and Development
Android Storage - Internal and External Storages
Memory Management in Android
Embedded Android Workshop with Nougat
Enhancing and modifying_the_core_android_os
Android Platform Debugging and Development
Android Platform Debugging and Development at ABS 2014
Is Android the New King of Embedded OSes at Embedded World 2014
Android Platform Debugging and Development
Leveraging Android's Linux Heritage at AnDevCon VI
Customizing Android's UI
Memory Management in Android
Project Ara
Brillo / Weave Internals
Memory Management in Android
Embedded Android Workshop with Nougat
Android crash debugging
Scheduling in Android

Similar to Android Variants, Hacks, Tricks and Resources (20)

PDF
Leveraging Android's Linux Heritage at AnDevCon V
PDF
Native Android Userspace part of the Embedded Android Workshop at Linaro Conn...
PDF
Building
PDF
Leveraging Android's Linux Heritage at Android Open 2011
PDF
Lecture1 Introduction
PDF
Embedded Operating System - Linux
PDF
Discover System Facilities inside Your Android Phone
ZIP
Embedded Linux Odp
PDF
Reusing your existing software on Android
PDF
Embedded Linux - Building toolchain
PDF
Tutorial: Cross-compiling Linux Kernels on x86_64
PDF
Android on Intel Architecture: ROM Cooking Tutorial
PDF
Is Android the New Embedded Embedded Linux? at Embedded World 2013
PDF
Porting Android ABS 2011
PDF
Linux introduction (eng)
PDF
Module 4 Embedded Linux
PDF
Android is NOT just 'Java on Linux'
PDF
Root file system for embedded systems
Leveraging Android's Linux Heritage at AnDevCon V
Native Android Userspace part of the Embedded Android Workshop at Linaro Conn...
Building
Leveraging Android's Linux Heritage at Android Open 2011
Lecture1 Introduction
Embedded Operating System - Linux
Discover System Facilities inside Your Android Phone
Embedded Linux Odp
Reusing your existing software on Android
Embedded Linux - Building toolchain
Tutorial: Cross-compiling Linux Kernels on x86_64
Android on Intel Architecture: ROM Cooking Tutorial
Is Android the New Embedded Embedded Linux? at Embedded World 2013
Porting Android ABS 2011
Linux introduction (eng)
Module 4 Embedded Linux
Android is NOT just 'Java on Linux'
Root file system for embedded systems

More from Opersys inc. (19)

PDF
Android Automotive
PDF
Android 10 Internals Update
PDF
Android Security Internals
PDF
Embedded Android Workshop with Pie
PDF
Android's HIDL: Treble in the HAL
PDF
Android Treble: Blessing or Trouble?
PDF
Embedded Android Workshop with Oreo
PDF
Android Things Internals
PDF
Android Platform Debugging and Development
PDF
Embedded Android Workshop with Nougat
PDF
Android Things: Android for IoT
PDF
Android Things Internals
PDF
Brillo / Weave Internals
PDF
Memory Management in Android
PDF
Brillo/Weave Internals
PDF
Android Platform Debugging and Development
PDF
Embedded Android Workshop with Marshmallow
PDF
Memory Management in Android
PDF
Project Ara
Android Automotive
Android 10 Internals Update
Android Security Internals
Embedded Android Workshop with Pie
Android's HIDL: Treble in the HAL
Android Treble: Blessing or Trouble?
Embedded Android Workshop with Oreo
Android Things Internals
Android Platform Debugging and Development
Embedded Android Workshop with Nougat
Android Things: Android for IoT
Android Things Internals
Brillo / Weave Internals
Memory Management in Android
Brillo/Weave Internals
Android Platform Debugging and Development
Embedded Android Workshop with Marshmallow
Memory Management in Android
Project Ara

Recently uploaded (20)

PDF
Chapter 3 Spatial Domain Image Processing.pdf
PPTX
Spectroscopy.pptx food analysis technology
PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
PDF
MIND Revenue Release Quarter 2 2025 Press Release
PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
PPTX
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
PDF
Spectral efficient network and resource selection model in 5G networks
PDF
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
PDF
Approach and Philosophy of On baking technology
PDF
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
PDF
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
PDF
NewMind AI Weekly Chronicles - August'25 Week I
PDF
Encapsulation theory and applications.pdf
PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PDF
cuic standard and advanced reporting.pdf
PDF
The Rise and Fall of 3GPP – Time for a Sabbatical?
PPTX
Big Data Technologies - Introduction.pptx
PDF
Electronic commerce courselecture one. Pdf
PDF
Encapsulation_ Review paper, used for researhc scholars
PDF
Unlocking AI with Model Context Protocol (MCP)
Chapter 3 Spatial Domain Image Processing.pdf
Spectroscopy.pptx food analysis technology
Agricultural_Statistics_at_a_Glance_2022_0.pdf
MIND Revenue Release Quarter 2 2025 Press Release
Digital-Transformation-Roadmap-for-Companies.pptx
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
Spectral efficient network and resource selection model in 5G networks
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
Approach and Philosophy of On baking technology
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
NewMind AI Weekly Chronicles - August'25 Week I
Encapsulation theory and applications.pdf
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
cuic standard and advanced reporting.pdf
The Rise and Fall of 3GPP – Time for a Sabbatical?
Big Data Technologies - Introduction.pptx
Electronic commerce courselecture one. Pdf
Encapsulation_ Review paper, used for researhc scholars
Unlocking AI with Model Context Protocol (MCP)

Android Variants, Hacks, Tricks and Resources

  • 2. About me ● Author of: ● Introduced Linux Trace Toolkit in 1999 ● Originated Adeos and relayfs (kernel/relay.c) 2
  • 3. Agenda ● AOSP's limitations ● Tearing AOSP apart ● Forks ● Ports ● Mods ● Melds 3
  • 4. AOSP's limits ● Rigid ● Closed dev model ● Fits Google's prerogatives ● Excludes a lot of stuff ● ... IOW, doesn't always fit what you need 4
  • 5. Tearing AOSP apart ● Forks ● Ports ● Mods ● Melds 5
  • 6. Forks ● Cyanogenmod ● Replicant ● MIUI 6
  • 7. Cyanogenmod ● After-market handset firmware ● Requires rooted phone ● http://www.cyanogenmod.com ● Advertized features: ● Lockscreen Gestures ● Phone Goggles ● OpenVPN ● Incognito mode ● Themes support ● DSP Equalizer 7
  • 8. 8
  • 9. More interestingly: ● http://wiki.cyanogenmod.com/ ● https://github.com/CyanogenMod ● Includes Busybox ● Custom Launcher (ADWLauncher) ● Lots of tiny tweaks and mods ... worth doing a “diff” 9
  • 10. Replicant ● Android distro that is 100% Free Software ● http://replicant.us/ ● Includes FDroid free software app store 10
  • 11. MIUI ● Closed-source fork with slick UI enhancements ● Many translations ● http://en.miui.com/ ● Advertized features: ● Home screen ● Dialer ● SMS ● Contacts ● Themes ● Camera ● Gallery ● Net disk, File manager, Traffic monitor, Backup, Notes, ... 11
  • 12. 12
  • 13. Ports ● RIM Playbook ● BlueStacks ● Alien Dalvik 13
  • 16. Alien Dalvik (Myriad Group) 16
  • 17. Mods ● XDA Developers ● ... 17
  • 18. Melds ● Stock glibc stack ● Custom stacks 18
  • 19. Melding with glibc stack 1.Rationale 2.Architecture 3.Tools 4.Embedded Linux Workspace 5.Basic root filesystem structure 6.Libraries 7.Kernel modules 8.Device files 9.Main system applications 10. Auto-generating filesystems 19
  • 20. 1. Rationale ● Port existing Linux apps ● Create glibc-based apps to coexist with Android's Bionic-based user-space ● Avoid having to deal with AOSP's build system ● Avoid having having to deal w/ Bionic's quirks and limitations ● Benefit from standard GNU world 20
  • 22. 22
  • 23. 3. Tools ● GNU cross-development toolchain: ● gcc - compiler ● as - assembler ● ld - linker ● gdb/gdbserver - debugger ● etc. ● C library: uClibc, eglibc or glibc 23
  • 24. 4. 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. 24
  • 25. 4.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 25
  • 26. 5. 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 26
  • 27. 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 27
  • 28. 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.) 28
  • 29. 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 29
  • 31. 6.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 31
  • 32. 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 32
  • 33. 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: 33
  • 34. Using readelf: $ arm­linux­readelf ­a ${PRJROOT}/rootfs/bin/busybox  > | grep "Shared library"  0x00000001 (NEEDED)             Shared library: [libc.so.0] ● Using uclibc-ldd: $ arm­uclibc­ldd ${PRJROOT}/rootfs/bin/busybox libc.so.0 => /home/karim/example­sys/tools/uclibc/lib/libc.so.0 /lib/ld­uClibc.so.0 => /lib/ld­uClibc.so.0 ● Copying important libraries to target rootfs: $ cd ${TARGET_PREFIX}/lib $ for file in libc libcrypt libdl libm  > libpthread libresolv libutil > do > cp $file­*.so ${PRJROOT}/rootfs/lib > cp ­d $file.so.[*0­9] ${PRJROOT}/rootfs/lib > done $ cp ­d ld*.so* ${PRJROOT}/rootfs/lib 34
  • 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* 35
  • 36. 6.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 important libraries to target rootfs: $ cd ${PREFIX}/uclibc/lib $ for file in libuClibc ld­uClibc libc libdl  > libcrypt libm libresolv libutil > do > cp $file­*.so ${PRJROOT}/rootfs/lib > cp ­d $file.so.[*0­9] ${PRJROOT}/rootfs/lib > done 36
  • 37. 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. 7. Kernel modules ● Kernel modules are located in /lib/modules, so they must be installed in $ {PRJROOT}/rootfs/lib/modules. ● Copying modules built earlier: $ cp ­a ${PRJROOT}/images/modules­2.6.37/*  > ${PRJROOT}/rootfs ● Module loading customization (/etc/modprobe.conf or /etc/modprobe.d/) 38
  • 39. 8. Device files ● All devices in Linux are seen as files (except Ethernet interfaces.) ● Typical workstation distros use udev ● Keep a copy of Documentation/devices.txt handy ● See BELS table 6.3 for core set of /dev entries ● Properties of each /dev node: ● Filename (node name) ● Type (char / block) ● Major number (What type of device?) ● Minor number (Which instance of the device?) ● Permission bits ● No need to create these entries since AOSP does it for us 39
  • 40. 9. 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 40
  • 41. 9.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 41
  • 42. 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 42
  • 43. 43
  • 44. “Busybox Settings”: ● “Build Options” -> Cross-compiler prefix: ${TARGET}­ ● “Installation Options” -> Installation prefix: ${PRJROOT}/rootfs ● Build: $ make ● Install: $ make install 44
  • 45. Only one binary has been installed: /bin/busybox ● All commands are symbolic links to /bin/busybox ● Determining the command issued done through main's argv[] and argc. ● Creating arbitrary links doesn't work ● BusyBox can be told to create hard-links ● Full command doc on web and in package ● Customizing the paths for the various shells: # Set path PATH=/bin:/sbin:/usr/bin:/usr/sbin export PATH 45
  • 46. 10. Auto-generating FSes/distros ● Yocto ● Buildroot ● PTXdist ● OpenWRT ● LTIB ● OpenEmbedded ● Gentoo 46