Slide 1

Slide 1 text

ROM COOKING

Slide 2

Slide 2 text

AGENDA 01 Android 02 Architecture 03 Hardware Support 04 AOSP 05 Build Demo: Add a kernel module Android style

Slide 3

Slide 3 text

ANDROID STORY … in a nutshell

Slide 4

Slide 4 text

2003 Android Inc. 2005 Google 2008 1st gPhone ! ANDROID STORY History

Slide 5

Slide 5 text

ANDROID STORY Initial target

Slide 6

Slide 6 text

ANDROID STORY Multiple targets

Slide 7

Slide 7 text

ANDROID STORY and more...

Slide 8

Slide 8 text

ANDROID STORY Releases 1.5 3.x 1.6 2.x April 30, 2009 September 15, 2009 October 2009 May 2010 December 2010 Febuary 2011 FAST & CURIOUS 4.x October 2011 July 2012 November 2012 July 2013 ... ...

Slide 9

Slide 9 text

ANDROID STORY Figures 1 M Apps 75 % market share 900 M Devices 50G dls ! Smartphones IDC 2013 1.5M/day

Slide 10

Slide 10 text

:’( TRADEMARK Android is a ANDROID STORY Android is my name

Slide 11

Slide 11 text

ANDROID STORY Android Compliancy Compatibility Test Suite Compatibility Definition Document CDD Let Google test it when you already did everything Compatibility Test Suite manual testing CTS CTS man. Big G.

Slide 12

Slide 12 text

but it’s open source NOT an OPEN SOURCE PROJECT Android is ANDROID STORY Android, an open source project ?

Slide 13

Slide 13 text

is the GOOGLE ANDROID STORY Open Handset Aliance

Slide 14

Slide 14 text

ANDROID ARCHITECTURE underneath Android !

Slide 15

Slide 15 text

Sensors Camera Bluetooth GSM, 3G, 4G, LTE GPS Touchscreen ANDROID DEVICE ANDROID ARCHITECTURE So much features

Slide 16

Slide 16 text

as ANDROID kernel LINUX ANDROID ARCHITECTURE Mon coeur

Slide 17

Slide 17 text

ANDROID ARCHITECTURE The big picture

Slide 18

Slide 18 text

ANDROID ARCHITECTURE The big picture

Slide 19

Slide 19 text

IPC BINDER POWER MANAGEMENT WAKELOCK MORE TIMER, OOM, LOGGER ... ANDROID ARCHITECTURE Linux modifications

Slide 20

Slide 20 text

ANDROID HARDWARE SUPPORT Closed as hell !

Slide 21

Slide 21 text

GPL for the kernel ! Apache Framework & Apps ANDROID HARDWARE SUPPORT Open source licensing

Slide 22

Slide 22 text

ANDROID HARDWARE SUPPORT Hardware Abstraction Layer 9000

Slide 23

Slide 23 text

ANDROID HARDWARE SUPPORT Camera

Slide 24

Slide 24 text

DRIVERS ARE CLOSED SOURCE DRIVERS ARE NOT AVAILABLE DRIVERS ARE F**ING ESSENTIALS ! ANDROID HARDWARE SUPPORT U.S. Route 66

Slide 25

Slide 25 text

ANDROID OPEN SOURCE PROJECT Use the source, Luke.

Slide 26

Slide 26 text

Google made a tool called “repo” ! ANDROID OPEN SOURCE PROJECT repo Everything is available through git repositories.

Slide 27

Slide 27 text

Branch switching is risky in my opinion ANDROID OPEN SOURCE PROJECT Tree of life repo init -u https://android.googlesource.com/platform/manifest -b android-4.3.1_r1

Slide 28

Slide 28 text

This will take hours (if it didn’t fail), enjoy. ANDROID OPEN SOURCE PROJECT Sync repo sync

Slide 29

Slide 29 text

ANDROID OPEN SOURCE PROJECT Folders 1/4 Google Android libc implementation Bootloader & recovery Build system Compatibility Test Suite bionic/ bootable/ build/ cts/

Slide 30

Slide 30 text

ANDROID OPEN SOURCE PROJECT Folders 2/4 Dev tools, debug applications... Configuration for each target device External libraries Android framework develope ment/ device/ external/ framework/

Slide 31

Slide 31 text

ANDROID OPEN SOURCE PROJECT Folders 3/4 Java implementation (Apache Harmony) Native Development Kit Results of your build Android base applications (sms, camera…) libcore/ ndk/ out/ packages/

Slide 32

Slide 32 text

ANDROID OPEN SOURCE PROJECT Folders 4/4 Binaries (toolchain, gdbserver…) Software developement kit Base : init, toolbox, logcat... Vendor directory (libs, apps) prebuilt/ sdk/ system/ vendor/

Slide 33

Slide 33 text

BUILD ANDROID make -j42

Slide 34

Slide 34 text

« the definition of open: mkdir android cd android repo init repo sync make » ANDY RUBIN Android’s dad BUILD ANDROID What a classy first tweet !

Slide 35

Slide 35 text

that simple NOT REALLY Sorry Andy but it’s BUILD ANDROID make : command not found

Slide 36

Slide 36 text

Ubuntu 10.04 for builds BUILD ANDROID sources.android.com a LOT of dependencies must be installed you can chroot it !

Slide 37

Slide 37 text

BUILD ANDROID prepare the environment #source build/envsetup.sh including device/samsung/maguro/vendorsetup.sh including device/samsung/tuna/vendorsetup.sh including device/ti/panda/vendorsetup.sh including sdk/bash_completion/adb.bash Example : device/samsung/maguro/vendorsetup.sh add_lunch_combo full_maguro-userdebug

Slide 38

Slide 38 text

BUILD ANDROID Lunch time #lunch You're building on Linux Lunch menu... pick a combo: 1. full-eng 2. full_x86-eng 3. vbox_x86-eng 4. full_maguro-userdebug 5. full_tuna-userdebug 6. full_panda-eng Which would you like? [full-eng]

Slide 39

Slide 39 text

BUILD ANDROID sources.android.com # make –j18

Slide 40

Slide 40 text

on your phone WON’T BOOT This build BUILD ANDROID #FAIL

Slide 41

Slide 41 text

BUILD ANDROID https://developers.google.com/android/nexus/drivers

Slide 42

Slide 42 text

Congratulations ! COOKING YOUR OWN ROM You are now proud owners of the skill : BUILD ANDROID #WIN

Slide 43

Slide 43 text

YOU BUILD 100% AOSP EXPERIENCE YOU CAN MODIFY EVERYTHING YOU CAN ADD ANYTHING BUILD ANDROID Start coding !

Slide 44

Slide 44 text

KERNEL MODULE The Android way !

Slide 45

Slide 45 text

MIX ANDROID KERNEL Dance with the *

Slide 46

Slide 46 text

MIX ANDROID KERNEL init dev # in init.rc on boot insmod /system/lib/modules/droidcon.ko chown system system /dev/droidcon chmod 0600 /dev/droidcon # in ./device///device.mk PRODUCT_COPY_FILES := \ device///droidcon.ko: system/lib/modules/droidcon.ko

Slide 47

Slide 47 text

MIX ANDROID KERNEL /dev/droidcon test adb shell # ls -l /dev/droidcon crw------- system system 249, 0 droidcon # echo Hello > /dev/droidcon # cat /dev/droidcon hELLO #

Slide 48

Slide 48 text

MIX ANDROID KERNEL Dance with the *

Slide 49

Slide 49 text

MIX ANDROID KERNEL hardware/droidcon/lib # in libdroidcon.h ssize_t droidcon_getdata(void *buf, size_t count); ssize_t droidcon_putdata(const void *buf, size_t count); void droidcon_clear(void); # This is the (often closed) part where we should do all the complicated code

Slide 50

Slide 50 text

MIX ANDROID KERNEL Dance with the *

Slide 51

Slide 51 text

MIX ANDROID KERNEL frameworks/base/core/java/android/droidcon/ #LibDroidcon.java package android.droidcon; public class LibDroidcon { public native static void clear(); public native static String getData() throws DroidconException; public native static void putData(String in) throws DroidconException; static { System.loadLibrary("droidcon_jni"); } }

Slide 52

Slide 52 text

MIX ANDROID KERNEL hardware/droidcon/jni/ #android_droidcon_LibDroidcon.c JNIEXPORT void JNICALL Java_android_droidcon_LibDroidcon_putData(JNIEnv *env, jclass cls, jstring string) { int ret; const char *buff = (*env)->GetStringUTFChars(env, string, NULL); int length = (*env)->GetStringLength(env, string); ret = droidcon_putdata(buff, length); if (ret < 0) { ThrowDroidconException(env, "fail to put data"); } (*env)->ReleaseStringUTFChars(env, string, buff); }

Slide 53

Slide 53 text

MIX ANDROID KERNEL Dance with the *

Slide 54

Slide 54 text

MIX ANDROID KERNEL framework/base/droidcon/java/android/droidcon/ #IDroidconManager.aidl package android.droidcon; /** {@hide} */ interface IDroidconManager { void clear(); String getData(); void putData(String data); }

Slide 55

Slide 55 text

MIX ANDROID KERNEL frameworks/base/services/java/com/android/server/ #DroidconService.java class DroidconService extends IDroidconManager.Stub { public String getData() { enforceAccessPermission(); try { return LibDroidcon.getData(); } catch(DroidconException e) { Slog.d(TAG, "cannot getdata"); } return null; } ... private void enforceAccessPermission() { … } }

Slide 56

Slide 56 text

MIX ANDROID KERNEL Hacking SystemServer.java #SystemServer.java ... public void run() { ... try { Slog.i(TAG, "Droidcon Service"); droidconService = new DroidconService(context); ServiceManager.addService(Context.DROIDCON_SERVICE, droidconService); } catch (Throwable e) { reportWtf("starting Droidcon Service", e); } ...

Slide 57

Slide 57 text

MIX ANDROID KERNEL Dance with the *

Slide 58

Slide 58 text

MIX ANDROID KERNEL framework/base/droidcon/java/android/droidcon # DroidconManager.java public class DroidconManager { IDroidconManager mService; public DroidconManager(IDroidconManager service) { mService = service; } public String getData() { try { return mService.getData(); } catch (RemoteException e) { e.printStackTrace(); } return null; } }

Slide 59

Slide 59 text

MIX ANDROID KERNEL Hacking ContextImpl.java # DroidconManager.java class ContextImpl extends Context { static { ... registerService(DROIDCON_SERVICE, new ServiceFetcher() { public Object createService(ContextImpl ctx){ IBinder b = ServiceManager .getService (DROIDCON_SERVICE); IDroidconManager service = IDroidconManager.Stub.asInterface(b); return new DroidconManager(service); }}); } ...

Slide 60

Slide 60 text

and configure our IDE BUILD OUR SDK We can now MIX ANDROID KERNEL make update-api ; make sdk

Slide 61

Slide 61 text

MIX ANDROID KERNEL Code an awesome app ! DroidconManager droidconManager; droidconManager = (DroidconManager) this.getSystemService(DROIDCON_SERVICE); droidconManager.putData(“Hello Droidcon London!”);

Slide 62

Slide 62 text

MIX ANDROID KERNEL TADAM !

Slide 63

Slide 63 text

Thank You for your time ! Now let’s finish this hackathon ! Build your own ROM Use the Sources Buy devices with AOSP support SYLVAIN GALAND @sylvaingaland http://slvn.fr/+ [email protected] Thanks Cédric Cabessa for the awesome open source droidcon device !