FROM STOCK TO CYANOGENMOD:
THE SONY ERICSSON CASEDROIDCON INDIA | NOVEMBER 19, 2011
DIOGO FERREIRA | [email protected] | @DEFER
Saturday, November 19, 11
INTRODUCTION
Saturday, November 19, 11
INTRODUCTION
OEM DEVICES RUN SLIGHTLY MODIFIED VERSIONS OF ANDROID
SPORTING FANCY FEATURES AND PERIPHERALS
ADDING UI CUSTOMIZATIONS
Saturday, November 19, 11
INTRODUCTION
OEM DEVICES RUN SLIGHTLY MODIFIED VERSIONS OF ANDROID
SPORTING FANCY FEATURES AND PERIPHERALS
ADDING UI CUSTOMIZATIONS
CYANOGENMOD SUPPORTS MANY DEVICES ACROSS DIFFERENT HARDWARE PLATFORMS
Saturday, November 19, 11
INTRODUCTION
OEM DEVICES RUN SLIGHTLY MODIFIED VERSIONS OF ANDROID
SPORTING FANCY FEATURES AND PERIPHERALS
ADDING UI CUSTOMIZATIONS
CYANOGENMOD SUPPORTS MANY DEVICES ACROSS DIFFERENT HARDWARE PLATFORMS
GET CM!
REPO INIT -U GIT://GITHUB.COM/CYANOGENMOD/ANDROID.GIT -B GINGERBREAD
REPO SYNC -J4
Saturday, November 19, 11
THE RECOVERYPART ONE
Saturday, November 19, 11
PRELIMINARIES
Saturday, November 19, 11
PRELIMINARIES
KEEP A COPY OF THE STOCK SYSTEM FILES
ADB PULL /SYSTEM IS ENOUGH
THESE WILL BE NEEDED LATER ON!
Saturday, November 19, 11
PRELIMINARIES
KEEP A COPY OF THE STOCK SYSTEM FILES
ADB PULL /SYSTEM IS ENOUGH
THESE WILL BE NEEDED LATER ON!
Saturday, November 19, 11
PRELIMINARIES
KEEP A COPY OF THE STOCK SYSTEM FILES
ADB PULL /SYSTEM IS ENOUGH
THESE WILL BE NEEDED LATER ON!
BE FEARLESS, IT IS USUALLY VERY HARD TO BRICK A DEVICE
Saturday, November 19, 11
WE NEED A RECOVERY!
Saturday, November 19, 11
WE NEED A RECOVERY!
BACKUP THE ORIGINAL ROM
Saturday, November 19, 11
WE NEED A RECOVERY!
BACKUP THE ORIGINAL ROM
GO BACK TO IT ANYTIME
Saturday, November 19, 11
WE NEED A RECOVERY!
BACKUP THE ORIGINAL ROM
GO BACK TO IT ANYTIME
ENABLES YOU TO ACTUALLY FLASH
CM
Saturday, November 19, 11
WE NEED A RECOVERY!
BACKUP THE ORIGINAL ROM
GO BACK TO IT ANYTIME
ENABLES YOU TO ACTUALLY FLASH
CM
Saturday, November 19, 11
WE NEED A RECOVERY!
BACKUP THE ORIGINAL ROM
GO BACK TO IT ANYTIME
ENABLES YOU TO ACTUALLY FLASH
CM
BUT YOU NEED A DEVICE REPOSITORY TO COMPILE IT
Saturday, November 19, 11
GETTING THINGS GOING
Saturday, November 19, 11
GETTING THINGS GOING
WE HAVE YOU COVERED!
Saturday, November 19, 11
GETTING THINGS GOING
WE HAVE YOU COVERED!
BUILD/TOOLS/DEVICE/MKVENDOR.SH <MANUFACTURER> <DEVICE> /PATH/TO/YOUR/BOOT.IMG
Saturday, November 19, 11
GETTING THINGS GOING
WE HAVE YOU COVERED!
BUILD/TOOLS/DEVICE/MKVENDOR.SH <MANUFACTURER> <DEVICE> /PATH/TO/YOUR/BOOT.IMG
BUILD/TOOLS/DEVICE/MKVENDOR.SH SEMC ANZU BOOT.IMG
Saturday, November 19, 11
GETTING THINGS GOING
WE HAVE YOU COVERED!
BUILD/TOOLS/DEVICE/MKVENDOR.SH <MANUFACTURER> <DEVICE> /PATH/TO/YOUR/BOOT.IMG
BUILD/TOOLS/DEVICE/MKVENDOR.SH SEMC ANZU BOOT.IMG
WHERE DO I GET THE BOOT IMAGE?
Saturday, November 19, 11
GETTING THINGS GOING
WE HAVE YOU COVERED!
BUILD/TOOLS/DEVICE/MKVENDOR.SH <MANUFACTURER> <DEVICE> /PATH/TO/YOUR/BOOT.IMG
BUILD/TOOLS/DEVICE/MKVENDOR.SH SEMC ANZU BOOT.IMG
WHERE DO I GET THE BOOT IMAGE?
DUMP_IMAGE BOOT /SDCARD/BOOT.IMG
Saturday, November 19, 11
GETTING THINGS GOING
WE HAVE YOU COVERED!
BUILD/TOOLS/DEVICE/MKVENDOR.SH <MANUFACTURER> <DEVICE> /PATH/TO/YOUR/BOOT.IMG
BUILD/TOOLS/DEVICE/MKVENDOR.SH SEMC ANZU BOOT.IMG
WHERE DO I GET THE BOOT IMAGE?
DUMP_IMAGE BOOT /SDCARD/BOOT.IMG
YOU NOW HAVE YOUR BAREBONES DEVICE REPOSITORY OVER AT MANUFACTURER/DEVICE
Saturday, November 19, 11
BUILDING A RECOVERY IMAGE
. BUILD/ENVSETUP.SH
LUNCH FULL_<DEVICE>-ENG
LUNCH FULL_ANZU-ENG
MAKE -J4 RECOVERYIMAGE
YOU WILL HAVE A RECOVERY IMAGE IN OUT/TARGET/PRODUCT/<DEVICE>/RECOVERY.IMG
Saturday, November 19, 11
HOW DO I RUN IT?
Saturday, November 19, 11
HOW DO I RUN IT?USUALLY:
FLASH_IMAGE RECOVERY RECOVERY.IMG
Saturday, November 19, 11
HOW DO I RUN IT?USUALLY:
FLASH_IMAGE RECOVERY RECOVERY.IMG
RARELY:
FASTBOOT FLASH RECOVERY RECOVERY.IMG
Saturday, November 19, 11
HOW DO I RUN IT?USUALLY:
FLASH_IMAGE RECOVERY RECOVERY.IMG
RARELY:
FASTBOOT FLASH RECOVERY RECOVERY.IMG
IN MY CASE:
FASTBOOT BOOT RECOVERY RECOVERY.IMG
FOR SONY ERICSSON, THERE IS NO DEDICATED RECOVERY PARTITION!
Saturday, November 19, 11
AND THEN THERE WAS A RECOVERY
Saturday, November 19, 11
AND THEN THERE WAS A RECOVERY
OR WAS THERE?
Saturday, November 19, 11
AND THEN THERE WAS A RECOVERY
OR WAS THERE?
SONY ERICSSON WAS THE FIRST TO
USE 32-BIT FRAMEBUFFERS
RECOVERY CODE NEEDED TO BE ADAPTED
CHANGES GATHERED FROM
CODEAURORA FORUM
Saturday, November 19, 11
THE FIRST BOOTPART TWO
Saturday, November 19, 11
WHERE TO START?
Saturday, November 19, 11
WHERE TO START?YOUR PREVIOUSLY CREATED DEVICE REPOSITORY!
Saturday, November 19, 11
WHERE TO START?YOUR PREVIOUSLY CREATED DEVICE REPOSITORY!
BOARDCONFIG.MK
FILL IN THE BLANKS! THE BUILD SYSTEM NEEDS TO KNOW YOUR DEVICE
THERE IS PROBABLY A SIMILAR DEVICE IN THE TREE, USE IT!
Saturday, November 19, 11
WHERE TO START?YOUR PREVIOUSLY CREATED DEVICE REPOSITORY!
BOARDCONFIG.MK
FILL IN THE BLANKS! THE BUILD SYSTEM NEEDS TO KNOW YOUR DEVICE
THERE IS PROBABLY A SIMILAR DEVICE IN THE TREE, USE IT!
FOR THE SONY ERICSSON ANZU:
TARGET_BOARD_PLATFORM := MSM7X30
TARGET_CPU_ABI := ARMEABI-V7A
...
Saturday, November 19, 11
WHERE TO START?
Saturday, November 19, 11
WHERE TO START?DEVICE_<DEVICE>.MK
Saturday, November 19, 11
WHERE TO START?DEVICE_<DEVICE>.MK
TELL THE SYSTEM WHAT TO COMPILE!
Saturday, November 19, 11
WHERE TO START?DEVICE_<DEVICE>.MK
TELL THE SYSTEM WHAT TO COMPILE!
DIFFERENT DEVICES HAVE DIFFERENT REQUIREMENTS
Saturday, November 19, 11
WHERE TO START?DEVICE_<DEVICE>.MK
TELL THE SYSTEM WHAT TO COMPILE!
DIFFERENT DEVICES HAVE DIFFERENT REQUIREMENTS
FOR A PRELIMINARY BOOT YOU SHOULD BE OK USING THE DEFAULTS
Saturday, November 19, 11
WHERE TO START?DEVICE_<DEVICE>.MK
TELL THE SYSTEM WHAT TO COMPILE!
DIFFERENT DEVICES HAVE DIFFERENT REQUIREMENTS
FOR A PRELIMINARY BOOT YOU SHOULD BE OK USING THE DEFAULTS
BUT NOTHING WILL WORK
Saturday, November 19, 11
WHERE TO START?DEVICE_<DEVICE>.MK
TELL THE SYSTEM WHAT TO COMPILE!
DIFFERENT DEVICES HAVE DIFFERENT REQUIREMENTS
FOR A PRELIMINARY BOOT YOU SHOULD BE OK USING THE DEFAULTS
BUT NOTHING WILL WORK
BUILD IT!
Saturday, November 19, 11
WHERE TO START?DEVICE_<DEVICE>.MK
TELL THE SYSTEM WHAT TO COMPILE!
DIFFERENT DEVICES HAVE DIFFERENT REQUIREMENTS
FOR A PRELIMINARY BOOT YOU SHOULD BE OK USING THE DEFAULTS
BUT NOTHING WILL WORK
BUILD IT!
LUNCH FULL_<DEVICE>.MK
Saturday, November 19, 11
WHERE TO START?DEVICE_<DEVICE>.MK
TELL THE SYSTEM WHAT TO COMPILE!
DIFFERENT DEVICES HAVE DIFFERENT REQUIREMENTS
FOR A PRELIMINARY BOOT YOU SHOULD BE OK USING THE DEFAULTS
BUT NOTHING WILL WORK
BUILD IT!
LUNCH FULL_<DEVICE>.MK
MAKE -J4 OTAPACKAGE
Saturday, November 19, 11
THE FUN STARTS!
Saturday, November 19, 11
THE FUN STARTS!
Saturday, November 19, 11
PLATFORM SUPPORTPART THREE
Saturday, November 19, 11
WHAT ABOUT IT?ANDROID NEEDS TO KNOW HOW TO TALK TO YOUR HARDWARE
ANDROID FRAMEWORK / USERSPACE
SENSORS AUDIO DISPLAY ...
KERNEL
HARDWARE
Saturday, November 19, 11
ADDING PLATFORM SUPPORT
Saturday, November 19, 11
ADDING PLATFORM SUPPORT
USUALLY YOU DON’T NEED TO, CM ALREADY SUPPORTS:
OMAP3/4, TEGRA 2, QUALCOMM 7X30/8X60/8K
Saturday, November 19, 11
ADDING PLATFORM SUPPORT
USUALLY YOU DON’T NEED TO, CM ALREADY SUPPORTS:
OMAP3/4, TEGRA 2, QUALCOMM 7X30/8X60/8K
IF YOU DO, GET THEM FROM REFERENCE BOARD REPOS:
QUALCOMM: HTTP://WWW.CODEAURORA.ORG
TI: HTTP://WWW.OMAPZOOM.ORG
NVIDIA: HTTP://NV-TEGRA.NVIDIA.COM
LINARO: HTTP://WWW.LINARO.ORG
Saturday, November 19, 11
ADDING PLATFORM SUPPORT: CAVEATS
Saturday, November 19, 11
ADDING PLATFORM SUPPORT: CAVEATS BEWARE: IT SHOULD BE CONTAINED
Saturday, November 19, 11
ADDING PLATFORM SUPPORT: CAVEATS BEWARE: IT SHOULD BE CONTAINED
YOU MUST ENSURE IT WILL NOT BREAK OTHER DEVICES
Saturday, November 19, 11
ADDING PLATFORM SUPPORT: CAVEATS BEWARE: IT SHOULD BE CONTAINED
YOU MUST ENSURE IT WILL NOT BREAK OTHER DEVICES
IF YOU REALLY MUST CHANGE THINGS OUTSIDE THE INTERFACE LAYERS:
Saturday, November 19, 11
ADDING PLATFORM SUPPORT: CAVEATS BEWARE: IT SHOULD BE CONTAINED
YOU MUST ENSURE IT WILL NOT BREAK OTHER DEVICES
IF YOU REALLY MUST CHANGE THINGS OUTSIDE THE INTERFACE LAYERS:
BOARD CONFIG OPTION + #IFDEF
Saturday, November 19, 11
ADDING PLATFORM SUPPORT: CAVEATS BEWARE: IT SHOULD BE CONTAINED
YOU MUST ENSURE IT WILL NOT BREAK OTHER DEVICES
IF YOU REALLY MUST CHANGE THINGS OUTSIDE THE INTERFACE LAYERS:
BOARD CONFIG OPTION + #IFDEF
SYSTEM PROPERTY + ALTERNATING BRANCHES IN THE JAVA SIDE
Saturday, November 19, 11
HARDWARE ABSTRACTION LAYERS
Saturday, November 19, 11
HARDWARE ABSTRACTION LAYERS
THEY LIVE BETWEEN THE FRAMEWORK AND THE KERNEL
Saturday, November 19, 11
HARDWARE ABSTRACTION LAYERS
THEY LIVE BETWEEN THE FRAMEWORK AND THE KERNEL
LIGHTS, GPS, GRALLOC + OVERLAY, AUDIO, CAMERA, SENSORS
Saturday, November 19, 11
HARDWARE ABSTRACTION LAYERS
THEY LIVE BETWEEN THE FRAMEWORK AND THE KERNEL
LIGHTS, GPS, GRALLOC + OVERLAY, AUDIO, CAMERA, SENSORS
A SET OF WELL-DEFINED APIS
Saturday, November 19, 11
HARDWARE ABSTRACTION LAYERS
THEY LIVE BETWEEN THE FRAMEWORK AND THE KERNEL
LIGHTS, GPS, GRALLOC + OVERLAY, AUDIO, CAMERA, SENSORS
A SET OF WELL-DEFINED APIS
IF VENDORS FOLLOW THEM, WE CAN JUST USE PROPRIETARY HALS
Saturday, November 19, 11
HARDWARE ABSTRACTION LAYERS
THEY LIVE BETWEEN THE FRAMEWORK AND THE KERNEL
LIGHTS, GPS, GRALLOC + OVERLAY, AUDIO, CAMERA, SENSORS
A SET OF WELL-DEFINED APIS
IF VENDORS FOLLOW THEM, WE CAN JUST USE PROPRIETARY HALS
IF THEY DO NOT, IT WILL BE A MIX OF:
Saturday, November 19, 11
HARDWARE ABSTRACTION LAYERS
THEY LIVE BETWEEN THE FRAMEWORK AND THE KERNEL
LIGHTS, GPS, GRALLOC + OVERLAY, AUDIO, CAMERA, SENSORS
A SET OF WELL-DEFINED APIS
IF VENDORS FOLLOW THEM, WE CAN JUST USE PROPRIETARY HALS
IF THEY DO NOT, IT WILL BE A MIX OF:
REFERENCE DESIGNS
Saturday, November 19, 11
HARDWARE ABSTRACTION LAYERS
THEY LIVE BETWEEN THE FRAMEWORK AND THE KERNEL
LIGHTS, GPS, GRALLOC + OVERLAY, AUDIO, CAMERA, SENSORS
A SET OF WELL-DEFINED APIS
IF VENDORS FOLLOW THEM, WE CAN JUST USE PROPRIETARY HALS
IF THEY DO NOT, IT WILL BE A MIX OF:
REFERENCE DESIGNS
INTUITION
Saturday, November 19, 11
HARDWARE ABSTRACTION LAYERS
THEY LIVE BETWEEN THE FRAMEWORK AND THE KERNEL
LIGHTS, GPS, GRALLOC + OVERLAY, AUDIO, CAMERA, SENSORS
A SET OF WELL-DEFINED APIS
IF VENDORS FOLLOW THEM, WE CAN JUST USE PROPRIETARY HALS
IF THEY DO NOT, IT WILL BE A MIX OF:
REFERENCE DESIGNS
INTUITION
REVERSE ENGINEERING
Saturday, November 19, 11
OUR HEADER VENDOR’S HEADER
CLASS CAMERAHARDWAREINTERFACE {VOID STARTCAMERA();VOID STOPCAMERA();
}
CLASS CAMERAHARDWAREINTERFACE {VOID STOPCAMERA();VOID STARTCAMERA();
}
SOLVING HAL API BREAKS
Saturday, November 19, 11
OUR HEADER VENDOR’S HEADER
CLASS CAMERAHARDWAREINTERFACE {VOID STARTCAMERA();VOID STOPCAMERA();
}
CLASS CAMERAHARDWAREINTERFACE {VOID STOPCAMERA();VOID STARTCAMERA();
}
SOLVING HAL API BREAKS
0X040X08
Saturday, November 19, 11
OUR HEADER VENDOR’S HEADER
CLASS CAMERAHARDWAREINTERFACE {VOID STARTCAMERA();VOID STOPCAMERA();
}
CLASS CAMERAHARDWAREINTERFACE {VOID STOPCAMERA();VOID STARTCAMERA();
}
SOLVING HAL API BREAKS
0X040X08
0X040X08
Saturday, November 19, 11
OUR HEADER VENDOR’S HEADER
CLASS CAMERAHARDWAREINTERFACE {VOID STARTCAMERA();VOID STOPCAMERA();
}
CLASS CAMERAHARDWAREINTERFACE {VOID STOPCAMERA();VOID STARTCAMERA();
}
SOLVING HAL API BREAKS
0X040X08
0X040X08
CAMERAHARDWAREINTERFACE *HW = GETHARDWARE(); HW = 0X38HW->STARTCAMERA(); (*(0X38+0X04))();
Saturday, November 19, 11
#@#”!#$!”””!!!!!
Saturday, November 19, 11
SOLVING HAL BREAKS
Saturday, November 19, 11
SOLVING HAL BREAKS
COMPARE A KNOWN SOURCE WITH THE BINARY BLOB
NOTE DOWN THE OFFSETS FOR METHOD CALLS
ORDER THE HEADER APPROPRIATELY
Saturday, November 19, 11
SOLVING HAL BREAKS
COMPARE A KNOWN SOURCE WITH THE BINARY BLOB
NOTE DOWN THE OFFSETS FOR METHOD CALLS
ORDER THE HEADER APPROPRIATELY
Saturday, November 19, 11
SOLVING HAL BREAKS
COMPARE A KNOWN SOURCE WITH THE BINARY BLOB
NOTE DOWN THE OFFSETS FOR METHOD CALLS
ORDER THE HEADER APPROPRIATELY
VENDORS COULD EASILY AVOID BREAKING HALS:
ADD METHODS TO THE END OF HEADERS
STOP REORDERING THEM!
Saturday, November 19, 11
FOR SONY ERICSSON
Saturday, November 19, 11
FOR SONY ERICSSON
MOST OF THE HALS WERE GREAT
BUT THEY BROKE THE CAMERA API
REORDERING THE METHODS AFTER REVERSE ENGINEERING FIXED IT
Saturday, November 19, 11
FOR SONY ERICSSON
MOST OF THE HALS WERE GREAT
BUT THEY BROKE THE CAMERA API
REORDERING THE METHODS AFTER REVERSE ENGINEERING FIXED IT
ONCE THE HEADER IS REVERSED, WE ADD IT TO THE DEVICE REPOSITORY
HEADERS ARE COMMON FOR ALL DEVICES
IF YOU CHANGE THE GLOBAL ONE, THINGS WILL BREAK.
Saturday, November 19, 11
FOR SONY ERICSSON
8255 SOC FROM QUALCOMM
7X30 FAMILY, ALREADY SUPPORTED IN CYANOGENMOD
CUSTOM LIGHTS HAL
REMEMBER THE 32-BIT DISPLAY? GRALLOC DID TOO
PRECOMPILED BLOBS FOR GPS, SENSORS AND CAMERA
SOMETIMES YOU JUST DON’T HAVE A CHOICE
Saturday, November 19, 11
CONCLUSIONS
Saturday, November 19, 11
CONCLUSIONS
PORTING A DEVICE IS NOT IMPOSSIBLE
Saturday, November 19, 11
CONCLUSIONS
PORTING A DEVICE IS NOT IMPOSSIBLE
YOU CAN’T BREAK OTHER DEVICES
THIS IS REALLY HARD!
Saturday, November 19, 11
CONCLUSIONS
PORTING A DEVICE IS NOT IMPOSSIBLE
YOU CAN’T BREAK OTHER DEVICES
THIS IS REALLY HARD!
IF THERE IS PLATFORM SUPPORT FOR YOUR DEVICE, SUPPORT CAN BE ADDED IN A FEW HOURS
SOMETIMES AS FEW AS 15 MINUTES
Saturday, November 19, 11
CONCLUSIONS
PORTING A DEVICE IS NOT IMPOSSIBLE
YOU CAN’T BREAK OTHER DEVICES
THIS IS REALLY HARD!
IF THERE IS PLATFORM SUPPORT FOR YOUR DEVICE, SUPPORT CAN BE ADDED IN A FEW HOURS
SOMETIMES AS FEW AS 15 MINUTES
ALWAYS CHECK OUT SIMILAR DEVICES
THE SAME SOC MEANS IT WILL BE SIMILAR
Saturday, November 19, 11
YOUR QUESTIONSPART FOUR
Saturday, November 19, 11