Tuesday, October 7, 2014

2014-10-07, building CyanogenMod

I tried building CyanogenMod 10 onto my device Samsung GT-N7100 "Note II".
After going through some difficulties I managed to do this.
Steps needed:
# Accept that samsung won't support you in any way :( no guarantee or anything like this
# Download and install ADT (Android SDK)
## Run it and download chosen version of SDK
## Update your PATH so that "adb" command works (ex. 'export PATH="$PATH:$HOME/adb/bin"')
# Download and install "repo" command
# Download CyanogenMod repo
# From a built-by-somebody-else CyanogenMod extract "blobs" (binary proprietary closed-source objects compiled for your telephone)
## Run device/.../extract-files.sh while the device with CyanogenMod is connected (I extracted the files from an image) - I'm a bit concerned as the files are not the same as in samsung's release
## If there is a build issue during build as some targets cannot be built with "No rule to make target ... .so" then you might be missing some blobs here
## I found it a difficult step... the blobs should go to more than 1 directory - "strace" is your friend (although you should avoid it and just follow the messages reported by make)
## Probably I've messed out something but I have faced some issue solved by a "cp libTVOut.so /home/cm/bld/src/target/product/n7100/obj/lib/"
### And I did "cp libOpenSLES.so /home/cm/bld/src/target/product/n7100/obj/lib/" too
### and cp * ~cm/src/vendor/samsung/smdk4412-common/proprietary/system/lib/
# Set the environment (variables, shell functions, etc.)
## . device/.../envsetup.sh
# Build the system
## Sometimes it might be required that you download or make your own device configuration... especially when your manufacturer marketing people said "open source device" and gave no sh*t to release the source... I hate marketing people whi are driven only by $$$
## brunch n7100 #You might use other commands as lunch, breakfast, make, ...
### brunch is breakfast+lunch... many tools combined into 1...
# Install the image (should be inside of "out" or whatever you set it... I've used to set the out dir to ~/bld while every source I used had its own user like ~cm or ~aosp or ~omni or ...)

At the end...
Looking at my experience, trainings and job... I'm an Oracle guy.
But looking at how people are seeing me... And how some friend described my skills... I'm the scripts guy with tremendous experience in shell scripts. Should I go this way?
If I should go with shell... I would prefer to do my own implementation which would:
- be more reliable
- have error handling built-in
- have debugging built-in
- have logging built-in
- be more system independent
- have strict in/out methodology powerful enough to replace current shell limitations
- have multi-threading in mind from the beginning
and probably be more secure than current systems... which are using shell without knowing its roots and how durable it is.
Cross your fingers - if I couls make this then... possibly opensource world could get a bit better.

1 comment:

adderek said...

Status of my build (CM 2014-10-something) is
Working
- WiFi
- S-Pen
Not working
- Cam
- S-Pen cursor notg displayed
Different than I would like it to be
- gapps not included
- default timezone is not mine
- gapps unstable - probably whole system would be
I wasn't even thinking about checking:
- NFC
- BT
- Orientation
- kernel features (schedulers, governors, CPU usage, GPU accelleration)
- multiwindow
- SELinux or how it is working
- OpenPDroid patches - a must for me
- NFC offscreen pooling (simple change in the source though)
- XPosed
- Root (probably on by default in CM)
- Deodexing or using ART
- Face lock or some alternative