android custom kernel/rom design

45
Android Custom Kernel/ROM design Muhammad Najmi Ahmad Zabidi IIUM MOSC 2014 Menara SSM Kuala Lumpur, Malaysia 24-25 September 2014 Muhammad Najmi MOSC 2014 1/37

Upload: muhammad-najmi-ahmad-zabidi

Post on 20-Aug-2015

1.852 views

Category:

Software


5 download

TRANSCRIPT

Page 1: Android Custom Kernel/ROM design

Android Custom Kernel/ROMdesign

Muhammad Najmi Ahmad ZabidiIIUM

MOSC 2014Menara SSM

Kuala Lumpur, Malaysia

24-25 September 2014

Muhammad Najmi MOSC 2014 1/37

Page 2: Android Custom Kernel/ROM design

About

• I am a research grad student in Universiti TeknologiMalaysia, Skudai, Johor Bahru, Malaysia

• My current employer is International Islamic UniversityMalaysia, Kuala Lumpur

• Research area - malware detection, narrowing onWindows executables

• Doing things on Android kernel and ROM due to somestories...

Muhammad Najmi MOSC 2014 2/37

Page 3: Android Custom Kernel/ROM design

A bit about Android

• Android is a mobileoperating system

• Using Linux kernel

• Components for kernelare C language

• Components forinterface are mostlyC++ and Java

Muhammad Najmi MOSC 2014 3/37

Page 4: Android Custom Kernel/ROM design

Comparison between Android kernel and ROM

Kernel ROMGPL licensed Apache licensedSource code must be pub-lished

Source code is not compul-sory to be published. Henceany modifications are notneccessarily going back tothe public

Muhammad Najmi MOSC 2014 4/37

Page 5: Android Custom Kernel/ROM design

Android structure

Muhammad Najmi MOSC 2014 5/37

Page 6: Android Custom Kernel/ROM design

Custom Kernel

Muhammad Najmi MOSC 2014 6/37

Page 7: Android Custom Kernel/ROM design

Android kernel vs Linux kernel

Source: http:

//eecatalog.com/embeddedlinux/2011/08/23/from-zero-to-boot-porting-android-to-your-arm-platform/

Muhammad Najmi MOSC 2014 7/37

Page 8: Android Custom Kernel/ROM design

My custom Android kernels

• Some are based from AOSP (Android Open SourceProject) kernels - original source are from Google’s git

• Some are based from CM (AOSP + Code Aurora Forum(CAF) commits)

• Some are based from other custom kernels which arebased from two sources above

Muhammad Najmi MOSC 2014 8/37

Page 9: Android Custom Kernel/ROM design

• I developed my custom kernels for two devices• Nexus 4 (codename: Mako)

• Nexus 5 (codename: Hammerhead)• After I sold my Mako :)

Muhammad Najmi MOSC 2014 9/37

Page 10: Android Custom Kernel/ROM design

• I developed my custom kernels for two devices• Nexus 4 (codename: Mako)• Nexus 5 (codename: Hammerhead)

• After I sold my Mako :)

Muhammad Najmi MOSC 2014 9/37

Page 11: Android Custom Kernel/ROM design

• I developed my custom kernels for two devices• Nexus 4 (codename: Mako)• Nexus 5 (codename: Hammerhead)

• After I sold my Mako :)

Muhammad Najmi MOSC 2014 9/37

Page 12: Android Custom Kernel/ROM design

Why use custom kernel

Customization,add-on features:

• Sound patch (for e.g: Faux sound patch)

• Allow DoubleTaptoWake(DT2W) or Sweep2Wake,Sweep2Sleep (S2W,S2S) features

• Allow many more CPU governors to be used

• Allow under/overvolting

• Allow number of online/offline CPUs using many methods

• Allow many more TCP congestion methods

Muhammad Najmi MOSC 2014 10/37

Page 13: Android Custom Kernel/ROM design

Why use custom kernel

Customization,add-on features:

• Sound patch (for e.g: Faux sound patch)

• Allow DoubleTaptoWake(DT2W) or Sweep2Wake,Sweep2Sleep (S2W,S2S) features

• Allow many more CPU governors to be used

• Allow under/overvolting

• Allow number of online/offline CPUs using many methods

• Allow many more TCP congestion methods

Muhammad Najmi MOSC 2014 10/37

Page 14: Android Custom Kernel/ROM design

Why use custom kernel

Customization,add-on features:

• Sound patch (for e.g: Faux sound patch)

• Allow DoubleTaptoWake(DT2W) or Sweep2Wake,Sweep2Sleep (S2W,S2S) features

• Allow many more CPU governors to be used

• Allow under/overvolting

• Allow number of online/offline CPUs using many methods

• Allow many more TCP congestion methods

Muhammad Najmi MOSC 2014 10/37

Page 15: Android Custom Kernel/ROM design

Why use custom kernel

Customization,add-on features:

• Sound patch (for e.g: Faux sound patch)

• Allow DoubleTaptoWake(DT2W) or Sweep2Wake,Sweep2Sleep (S2W,S2S) features

• Allow many more CPU governors to be used

• Allow under/overvolting

• Allow number of online/offline CPUs using many methods

• Allow many more TCP congestion methods

Muhammad Najmi MOSC 2014 10/37

Page 16: Android Custom Kernel/ROM design

Why use custom kernel

Customization,add-on features:

• Sound patch (for e.g: Faux sound patch)

• Allow DoubleTaptoWake(DT2W) or Sweep2Wake,Sweep2Sleep (S2W,S2S) features

• Allow many more CPU governors to be used

• Allow under/overvolting

• Allow number of online/offline CPUs using many methods

• Allow many more TCP congestion methods

Muhammad Najmi MOSC 2014 10/37

Page 17: Android Custom Kernel/ROM design

Why use custom kernel

Customization,add-on features:

• Sound patch (for e.g: Faux sound patch)

• Allow DoubleTaptoWake(DT2W) or Sweep2Wake,Sweep2Sleep (S2W,S2S) features

• Allow many more CPU governors to be used

• Allow under/overvolting

• Allow number of online/offline CPUs using many methods

• Allow many more TCP congestion methods

Muhammad Najmi MOSC 2014 10/37

Page 18: Android Custom Kernel/ROM design

Why use custom kernel

Customization,add-on features:

• Sound patch (for e.g: Faux sound patch)

• Allow DoubleTaptoWake(DT2W) or Sweep2Wake,Sweep2Sleep (S2W,S2S) features

• Allow many more CPU governors to be used

• Allow under/overvolting

• Allow number of online/offline CPUs using many methods

• Allow many more TCP congestion methods

Muhammad Najmi MOSC 2014 10/37

Page 19: Android Custom Kernel/ROM design

Skillsets for kernel modifying/developing

• Git knowledge• Knows at least how to clone, pull, push• Then reading git log.. (i’m using --pretty option)• Creating branch, reset to certain checkpoint/offset..

resetting everything (git reset --hard)

Muhammad Najmi MOSC 2014 11/37

Page 20: Android Custom Kernel/ROM design

Git cloning the source

najmi@quds:~$ git clone https://android.googlesource.com/kernel/msm -b android-msm-hammerhead-3.4-l-previewCloning into ’msm’...remote: Sending approximately 953.94 MiB ...remote: Finding sources: 100% (3604873/3604873)Receiving objects: 0% (14589/3604873), 4.63 MiB | 656.00 KiB/s

Muhammad Najmi MOSC 2014 12/37

Page 21: Android Custom Kernel/ROM design

najmi@quds:~/cempaka-kernel$ git log --pretty=format:’%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr)%C(bold blue)<%an>%Creset’ --abbrev-commitba22633 - (HEAD, origin/cempaka-stable, cempaka-stable)Cempaka v2.5 (11 days ago) <Muhammad Najmi Ahmad Zabidi>acaaeea - Merge branch ’ElementalX-1.00-cm’ ofhttps://github.com/flar2/ElementalX-N5 into cempaka-stable (11 days ago) <Muhammad Najmi Ahmad Zabidi>039a263 - (elementalx/ElementalX-1.00-cm) Merge branch ’ElementalX-1.00’ into ElementalX-1.00-cm(12 days ago) <flar2>cb7e4f0 - (elementalx/ElementalX-1.00) update defconfig (12 days ago) <flar2>753de48 - msm-sleeper: use ex_max_freq (12 days ago) <flar2>c5cc9d2 - Merge branch ’ElementalX-1.00’ intoElementalX-1.00-cm (2 weeks ago) <flar2>8438630 - vibrator: change permissions again (2 weeks ago) <flar2>e51fa2d - Revert "vibrator: change sysfs permissions" (2 weeks ago) <flar2>9949aff - Merge branch ’ElementalX-1.00’ into ElementalX-1.00-cm (3 weeks ago) <flar2>cbee9fe - update defconfig (3 weeks ago) <flar2>

Muhammad Najmi MOSC 2014 13/37

Page 22: Android Custom Kernel/ROM design

• Most of the developers’ works are hosted on github

• Some use sourceforge’s git and bitbucket’s

• I prefer github because I am familiar with it

Muhammad Najmi MOSC 2014 14/37

Page 23: Android Custom Kernel/ROM design

Android timeline, from 4.x

• 4.0 (Ice Cream Sandwich)

• 4.1 (Jelly Bean)

• 4.2 (Jelly Bean)

• 4.3 (Jelly Bean)• 4.4 (KitKat)

• 4.4.1• 4.4.2• 4.4.3• 4.4.4 (latest, as of now)

Muhammad Najmi MOSC 2014 15/37

Page 24: Android Custom Kernel/ROM design

My kernel projects for Nexus 4/Mako

Kernel Sources

SemaphoreKernel

HellscoreKernel

FrancoKernel

CM BrickedKernel

AmpangKernel

PandanKernel

ZulfaKernel

FrancoGombakKernel

AufaKernel

SeladangKernel

Muhammad Najmi MOSC 2014 16/37

Page 25: Android Custom Kernel/ROM design

My kernel projects for Nexus 5/Hammerhead

Kernel Sources

ElementalX CodeBlue Jerung KernelLekiu Kernel

(for L preview)

Cempaka Kernel Blue Kelisa Kernel

Muhammad Najmi MOSC 2014 17/37

Page 26: Android Custom Kernel/ROM design

My Nexus 4/Mako Kernel Features

Kernel Tap2WakeandS2S/S2W

AdditionalGovernors

AdditionalSched-ulers

FastCharge

Multiboot(kexec)

Intelliplug AdvancedMPD

Aufa X X X X X X -Zulfa X X X X X X -Ampang X X X X X X -FrancoGombak

X X X X X - -

Seladang X X X X X - XPandan X X X X X X -

Table : Features of the custom kernels (at least from what Iremember)

Muhammad Najmi MOSC 2014 18/37

Page 27: Android Custom Kernel/ROM design

My Nexus 5/Hammerhead Kernel Features

Kernel Tap2WakeandS2S/S2W

AdditionalGovernors

AdditionalSchedulers

FastCharge

Multiboot(kexec)

Intelliplug AdvancedMPD

Cempaka X X X X X X -Blue Kelisa X X X X X X -Jerung X X X X X X -Lekiu X X X X not yet - -

Table : Features of the custom kernels (at least from what Iremember)

Muhammad Najmi MOSC 2014 19/37

Page 28: Android Custom Kernel/ROM design

MultiROM capabilities

Figure : List of ROMs Figure : MultiROM settings

Muhammad Najmi MOSC 2014 20/37

Page 29: Android Custom Kernel/ROM design

Kernel configurations

Figure : Using trickster to tune the kernel parameters, by sysfs interfacing

Muhammad Najmi MOSC 2014 21/37

Page 30: Android Custom Kernel/ROM design

I/O scheduler selector

Figure : Using trickster to select preferred I/O scheduler

Muhammad Najmi MOSC 2014 22/37

Page 31: Android Custom Kernel/ROM design

CPU governors

Figure : Using trickster to select preferred CPU governors

Muhammad Najmi MOSC 2014 23/37

Page 32: Android Custom Kernel/ROM design

How to compile Android kernel?

• Use desktop PC (Mine is i3, 16GB RAM, Ubuntu 14.04 LTS)

• Only works on 64-bit Linux

• Use cross compiler.. GCC for ARM• Cross compiling in this case means compiling ARM kernelimage on x86 (x64) based machine

• Default kernel sources somehow cannot use latest(bleeding edge) GCC (as for now 4.10). Need some patchesto allow that.

Muhammad Najmi MOSC 2014 24/37

Page 33: Android Custom Kernel/ROM design

How to add features

• Use ‘‘patch’’ command by downloading intended patchfrom other source manually

• Use ‘‘git cherry pick’’ command

Muhammad Najmi MOSC 2014 25/37

Page 34: Android Custom Kernel/ROM design

Patch

wget -c https://github.com/engstk/l-preview/commit/8c203729fc0d4479b790408de2ac464745cc7769.patch--2014-09-24 23:53:24--https://github.com/engstk/l-preview/commit/8c203729fc0d4479b790408de2ac464745cc7769.patchResolving github.com (github.com)... 192.30.252.130Connecting to github.com (github.com)|192.30.252.130|:443... connected.HTTP request sent, awaiting response... 200 OKLength: unspecified [text/plain]Saving to: ’8c203729fc0d4479b790408de2ac464745cc7769.patch’

[ <=> ] 20,146 59.6KB/s in 0.3s

2014-09-24 23:53:26 (59.6 KB/s) - ’8c203729fc0d4479b790408de2ac464745cc7769.patch’saved [20146]

najmi@quds:~/lekiu-lprev-kernel$ patch -Np1 -i 8c203729fc0d4479b790408de2ac464745cc7769.patchpatching file arch/arm/KconfigHunk #1 succeeded at 2213 (offset 1 line).patching file arch/arm/boot/compressed/head.Spatching file arch/arm/configs/hammerhead_defconfigpatching file arch/arm/include/asm/kexec.hpatching file arch/arm/kernel/machine_kexec.cpatching file arch/arm/kernel/relocate_kernel.Spatching file arch/arm/mach-msm/include/mach/memory.hpatching file arch/arm/mach-msm/lge/devices_lge.cpatching file arch/arm/mach-msm/restart.cpatching file include/linux/kexec.hpatching file kernel/kexec.c

Muhammad Najmi MOSC 2014 26/37

Page 35: Android Custom Kernel/ROM design

git cherry pick

najmi@quds:~/lekiu-lprev-kernel$ git fetch codeblueremote: Counting objects: 1073, done.remote: Compressing objects: 100% (422/422), done.remote: Total 1073 (delta 698), reused 974 (delta 649)Receiving objects: 100% (1073/1073), 1.09 MiB | 443.00 KiB/s, done.Resolving deltas: 100% (698/698), done.From https://github.com/engstk/l-preview+ 3043028...647125f code_blue-l -> codeblue/code_blue-l (forced update)+ 59063dc...647125f code_blue-l-beta -> codeblue/code_blue-l-beta (forced update)

najmi@quds:~/lekiu-lprev-kernel$ git cherry-pick 8c203729fc[test cf6f160] Implement kexec-hardboot by. All work done by @TasssadarAuthor: franciscofranco <[email protected]>11 files changed, 350 insertions(+), 7 deletions(-)

Muhammad Najmi MOSC 2014 27/37

Page 36: Android Custom Kernel/ROM design

• Since kernel sources are GPL, if you publish your release,you MUST publish your source codes

• People can view your codes/modifications or borrow/usethem anyway they want, and they need to publish themas well

Muhammad Najmi MOSC 2014 28/37

Page 37: Android Custom Kernel/ROM design

Custom ROMs

Muhammad Najmi MOSC 2014 29/37

Page 38: Android Custom Kernel/ROM design

Custom ROM

• Custom ROMs are either AOSP or CM

• AOSP and CM ROM source are out there, many creativepeople do modifications on these sources

• Popular custom ROMs with relatively awesome teammembers and support many devices

• CyanogenMod• Carbon ROM• Liquid Smooth• Paranoid Android (PA)• Mahdi ROM• AOKP

Muhammad Najmi MOSC 2014 30/37

Page 39: Android Custom Kernel/ROM design

• Sources and modifications are updated in gerrits

• Cherry pick is also possible

Muhammad Najmi MOSC 2014 31/37

Page 40: Android Custom Kernel/ROM design

Figure : Liquid Smooth ROM, running CempakaKernel

Figure : Carbon ROM, running Blue KelisaKernel

Muhammad Najmi MOSC 2014 32/37

Page 41: Android Custom Kernel/ROM design

Source sync

• ROMs are using ‘‘repo’’ command to sync all changes fromthe upstream

• Updates are based from the repositories defined in themanifest file

Muhammad Najmi MOSC 2014 33/37

Page 42: Android Custom Kernel/ROM design

Repo sync

najmi@quds:~/rom/aicp$ repo syncremote: Counting objects: 3, done.remote: Compressing objects: 100% (3/3), done.remote: Total 3 (delta 0), reused 3 (delta 0)Unpacking objects: 100% (3/3), done.From https://github.com/AICP/platform_manifest

9ee1fc3..d607bb2 kitkat -> origin/kitkatproject .repo/manifests/Updating 9ee1fc3..d607bb2Fast-forwarddefault.xml | 2 +-1 file changed, 1 insertion(+), 1 deletion(-)

Fetching project platform/packages/apps/ProvisionFetching project CyanogenMod/android_hardware_ti_wpanFetching project omnirom/android_packages_wallpapers_PhaseBeamFetching project platform/external/tinyxml...............remote: Counting objects: 12, doneremote: Finding sources: 100% (12/12)remote: Total 12 (delta 0), reused 12 (delta 0)remote: Counting objects: 12, doneUnpacking objects: 100% (12/12), done.From https://android.googlesource.com/platform/external/eigen

Muhammad Najmi MOSC 2014 34/37

Page 43: Android Custom Kernel/ROM design

Example of extra features in custom ROMS

• Hover

• PIE

• Halo

• Customization of date display

Muhammad Najmi MOSC 2014 35/37

Page 44: Android Custom Kernel/ROM design

Figure : PIE Figure : Hover

Muhammad Najmi MOSC 2014 36/37

Page 45: Android Custom Kernel/ROM design

END

[email protected]

Muhammad Najmi MOSC 2014 37/37