[ROM] Gingerbread-2.3.4 (Codename Phoenix, released on 2011-10-20) - Optimus One, P500 Original Android Development

Hi @all,
This is a unofficial ROM of gingerbread for use in LG-P500 mobile devices.
NO Support by LG and after flashing you can't connect with this ROM to the LG PC-Suite for updates. If you want update a original firmware, u have to flash
a original ROM deployed by LG.
Please, do not ask when i release a build. If a build is ready to test, i upload the ROM and you'll see a download link in THIS post.
For general questions, please look here
Current state of Gingerbread ROM by andy572 (Version 2.3.4 Codename Phoenix)
previous rom for download based on CM7 has been removed, i dont support the latest rom from now.
Latest Changes
* light text color bug fixed
* gallery3D app: pinch to zoom fixed
* gallery3D app: loading a bit slow - fixed
* kernel: wifi not working, kernel module is broken - fixed
* kernel: kernel doesnt support clear ram feature in settings - fixed
* expanded statusbar bugs fixed
* new lockscreen implemented
* modified gps.conf
* modified apns-conf.xml
* network provider search fixed
* contact import from sim card fixed
* crash in contacts app fixed (app was FC'ing when swipe over the tabs on the top)
Very known bugs:
- If no default ringtone is choosen in settings menu, android choose one for u and change this randomly
- FM Radio and USB-/WiFi theasering not working (maybe with 3rd party apps)
- strong pixelation/color banding issues in wallpapers and picture gallery app
- Airplane-, Vibrate modes and audio volume settings change gets not detected in expanded statusbar view toggles
- rom is only working with old baseband and clockwork mod recovery
INSTALL
1.) Install ClockwordMod Recovery, old AmonRA isnt supported anymore.
2.) Flash the ROM file
3.) If you're coming from any other than THIS rom, YOU NEED TO DO A COMPLETE WIPE before reboot!!!
Download
http://www.phoenix-android.com (Android 2.3.4 Phoenix)
Further information:
The new rom is based on CodeAurora's Android Gingerbread, CM7 and android open source code (2.3.4 and 2.3.5).
Many thanks to franco for the cool kernel tips and the funny after work days
Sources
CodeAurora
Phoenix-Android
Whats next coming?
* Electron Beam feature is causing black screen: FIXED (Feature permanent disabled)
* allow swipe in contacts/phone app on call log
* optimize webkit code
* modify music app
* modify and bugfix launcher app again
* modify and bugfix camera app
* modify and bugfix fm radio app
* fix bluetooth audio
Greets from Munich/Germany
Andy

ooh, nice to have someone interested of doing that!

It's nice to have some people interesting in developing a gingerbread custom rom for our optimus P500. I would help if i knew what you need. I don't know what you are talking about so... Sorry

Hi,
i'm talking about to bring up a gingerbread installtion to our mobile.
All what i have is a ready compiled android 2.3.1 without a kernel and without LG addons, there are (possibly) required to boot the phone to gingerbread.
i've tryed yesterday and today to boot with a mix from froyo, but this does not works - even if i disabled some hardware, the system needs some information from modules build by LG - it boots only when gingerbread is flashed over froyo without a complete wipe, nothing but the launcher is working
After a wipe, the system loops around while booting and bringe lot of permission errors in logcat.

Did you look in this thread : http://forum.xda-developers.com/showthread.php?t=901247 ?
There is a kernel and it could help you

Thank you dark-k, but i don't search a kernel but peoples they are interested to help building

i am not a dev but i know how linux works and i got a p500 so if u need help u can count with me buddy.

andy572 said:
All what i have is a ready compiled android 2.3.1 without a kernel and without LG addons, there are (possibly) required to boot the phone to gingerbread.
Click to expand...
Click to collapse
hi can you tell me how to i can compile a clean complete version of android without kernel?
thanks

How about this kernel? The dev says it's supposed to be compatible with any rom.
http://forum.xda-developers.com/showthread.php?t=866774&page=9

How to compile android 2.3.3:
1.) If you use a windows system, install VirtualBox 4.x and than Ubuntu 10.10 Desktop Edition as guest OS (its the smallest version and is enough for compilings)
Attention: Android compiling requires lot of free space.
My Ubuntu virtual harddrives size is 30GB, partitions are 10GB, 512MB (SWAP) and 19.5GB. During install, mount the 10GB partition on /, the 19.5GB partition on /home.
1.1) Prepare user
to have easier system access, we act as root - so set a new password to root and change the current user:
Code:
sudo passwd root
Enter the new password to root and change user:
Code:
su -
1.2) change the shell to bash
Ubuntu 10.10 has a symlink in /bin/sh - this links not to the bash which is required by android to compile:
Code:
rm /bin/sh && ln -s /bin/bash /bin/sh
2.) Install required compilers and software:
Code:
apt-get install build-essential automake autoconf binutils libncurses5-dev xorg-dev git-core gnupg flex bison gperf zlib1g-dev
3.) Prepare home directory
Code:
mkdir -p /home/android/bin
cd /home/android
3.) Install JAVA
- Download latest java-1.6 (it's required by gingerbread to build java apps) from Oracle site:
https://cds.sun.com/is-bin/[email protected]_Developer and select Linux (not Linux64!!!)
Copy file jdk-6u23-linux-i586.bin to /home/android and exec the file:
Code:
./jdk-6u23-linux-i586.bin
and type "yes" to accept the license.
After install, move the new directory to /usr/lib/jvm:
Code:
mkdir -p /usr/lib/jvm && mv jdk1.6.0_23 /usr/lib/jvm
rm -rf jdk1.6.0_23
4.) Adopt JVM and user's bin path to all users env:
Code:
echo 'export PATH=$PATH:/home/android/bin:/usr/lib/jvm/jdk1.6.0_23/bin' >> /etc/profile
echo 'export JAVA_HOME=/usr/lib/jvm/jdk1.6.0_23' >> /etc/profile
echo 'export ANDROID_JAVA_HOME=$JAVA_HOME' >> /etc/profile
source /etc/profile
5.) Download Android 2.3.3
Code:
curl http://android.git.kernel.org/repo > bin/repo
chmod a+x bin/repo
repo init -u git://github.com/CyanogenMod/android.git -b gingerbread
repo sync
6.) Compiling Android 2.3.3
To build a final release on a 32bit machine, we must modify some files and use the target option "user" (default is "eng", which is only a debug build for the emulator).
Attention
following code must be run in root of your repo:
Code:
source build/envsetup.sh
lunch thunderg-user
make -j2
After a build time of 1-2 hours, we have in folder out/target/product/generic our images: system.img,ramdisk.img and userdata.img and in folder prebuild/linux-x86/toolchain our android arm-eabi to compile kernel and so on.
If any goes wrong, please post here - it's possible that i have forgot to post some...

awesome walkthrough

andy572 said:
How to compile android 2.3.1:
1.) If you use a windows system, install VirtualBox 4.x and than Ubuntu 10.10 Desktop Edition as guest OS (its the smallest version and is enough for compilings)
Attention: Android compiling requires lot of free space.
My Ubuntu virtual harddrives size is 30GB, partitions are 10GB, 512MB (SWAP) and 19.5GB. During install, mount the 10GB partition on /, the 19.5GB partition on /home.
1.1) Prepare user
to have easier system access, we act as root - so set a new password to root and change the current user:
Code:
sudo passwd root
Enter the new password to root and change user:
Code:
su -
1.2) change the shell to bash
Ubuntu 10.10 has a symlink in /bin/sh - this links not to the bash which is required by android to compile:
Code:
rm /bin/sh && ln -s /bin/bash /bin/sh
2.) Install required compilers and software:
Code:
apt-get install build-essential automake autoconf binutils libncurses5-dev xorg-dev git-core gnupg flex bison gperf zlib1g-dev
3.) Prepare home directory
Code:
mkdir -p /home/android/bin
cd /home/android
3.) Install JAVA
- Download latest java-1.6 (it's required by gingerbread to build java apps) from Oracle site:
https://cds.sun.com/is-bin/[email protected]_Developer and select Linux (not Linux64!!!)
Copy file jdk-6u23-linux-i586.bin to /home/android and exec the file:
Code:
./jdk-6u23-linux-i586.bin
and type "yes" to accept the license.
After install, move the new directory to /usr/lib/jvm:
Code:
mkdir -p /usr/lib/jvm && mv jdk1.6.0_23 /usr/lib/jvm
rm -rf jdk1.6.0_23
4.) Adopt JVM and user's bin path to all users env:
Code:
echo 'export PATH=$PATH:/home/android/bin:/usr/lib/jvm/jdk1.6.0_23/bin' >> /etc/profile
echo 'export JAVA_HOME=/usr/lib/jvm/jdk1.6.0_23' >> /etc/profile
echo 'export ANDROID_JAVA_HOME=$JAVA_HOME' >> /etc/profile
source /etc/profile
5.) Download Android 2.3.1
Code:
curl http://android.git.kernel.org/repo > bin/repo
chmod a+x bin/repo
repo init -u git://android.git.kernel.org/platform/manifest.git -b gingerbread
repo sync
6.) Compiling Android 2.3.1
To build a final release on a 32bit machine, we must modify some files and use the target option "user" (default is "eng", which is only a debug build for the emulator):
Code:
source build/envsetup.sh
$find . -name '*.mk' | xargs sed -i 's/-m64//g'
export TARGET_BUILD_VARIANT=user
lunch
make
After a build time of 3 hours, we have in folder out/target/product/generic our images: system.img,ramdisk.img and userdata.img and in folder prebuild/linux-x86/toolchain our android arm-eabi to compile kernel and so on.
If any goes wrong, please post here - it's possible that i have forgot to post some...
Click to expand...
Click to collapse
gonna start workin later tonight gonna upload it soon.

Problems ... problems ... more problems
Today, i've merged the LG P500 Froyo source with gingerbread to get the required LG libraries and bin's, but i get over and over compiler errors.
LG didn't provide the complete source to froyo, so many definitions in C-Header files are missig
I've fixed many of these errors, but the end result is a linker error because of missing libraries there are not provided in source code.
I'll try to compile a froyo to test out if this errors only comes with gingerbread.
...Where is my time ????

I have succesfully compile and boot CyanogenMod 7. But everything slow, 3d driver don't work (same as with Legend). Tried to use N1 driver but it crashes, seems it compiled as armv7.

mik_os said:
I have succesfully compile and boot CyanogenMod 7. But everything slow, 3d driver don't work (same as with Legend). Tried to use N1 driver but it crashes, seems it compiled as armv7.
Click to expand...
Click to collapse
Can you share with us??
MAybe we can help you to boost the system.

i didnt have much sleep last night alot of trouble gonna reinstall windows 7 then repack the img gonna post it later its 9:33 here in germany

Du sollst doch Nachts schlafen und nicht am PC sitzen *lol*

FROYO doesn't compile - same problem as to import LG FROYO sources to Gingerbread.
Error:
make: *** No rule to make target `out/target/product/generic/obj/STATIC_LIBRARIES/liblgdrmexpat_intermediates/liblgdrmexpat.a', needed by `out/target/product/generic/obj/SHARED_LIBRARIES/liblgdrmwbxml_intermediates/LINKED/liblgdrmwbxml.so'. Stop.

upd: wifi work
You can find sources at
Code:
https://github.com/mik9
BUT it's dirty (based on htc legend) and not full. I continue work.

Awesome job, you can count on me for any help you need, lol like tester or something
Sent from my LG-P500 using XDA App

Related

[HOWTO] Create your own AOSP 100% stock

EDIT: Just updated post 2 you probably want to read both this post and that post before trying to build.
you can skip the part of getting the official source and the cyanogen source by just doing
Code:
repo init -u git://github.com/CyanogenMod/android.git -b froyo
First some prereqs You must be using linux and building for an evo 4G aka htc_supersonic
Install the android SDK as instructed here: http://developer.android.com/sdk/installing.html
You will need JDK most linux distros have this in the respositorys.
Then just follow step 2 and make sure that you can run adb from any directory in terminal.
Now to the good stuff.
You will now need to open a terminal window and run the following as root
Code:
cd /usr/bin/; curl http://android.git.kernel.org/repo > repo; chmod a+x /usr/bin/repo
now as user do the following
Code:
mkdir ~/android
cd ~/andoid
repo init -u git://android.git.kernel.org/platform/manifest.git
repo sync
This can take FOREVER like 4-5 hours so you might want to let it go when you go to sleep.
Depending on how fast your computer is the following step can take a long time too
Code:
cd ~/andoid
make
This will build the source code for a generic device it should build everything correctly if you have all of the compilers and what not. If it fails just install the app that it is complaining about.
Now for the EVO specific stuff
Code:
cd ~/android/device/htc
git clone http://github.com/CyanogenMod/android_device_htc_supersonic.git supersonic
That will get the build files however you are going to have to edit them to get it to work.
~/android/device/htc/supersonic/BoardConfig.mk needs to be edited
Code:
TARGET_RECOVERY_UI_LIB := librecovery_ui_supersonic librecovery_ui_htc
TARGET_RECOVERY_UPDATER_LIBS += librecovery_updater_htc
should be
Code:
#TARGET_RECOVERY_UI_LIB := librecovery_ui_supersonic librecovery_ui_htc
#TARGET_RECOVERY_UPDATER_LIBS += librecovery_updater_htc
Some other files may have to be edited to your liking. Personaly I changed ADWLauncher to launcher2 and removed all of the cyanogen stuff.
Now to setup the build enviroment.
Code:
cd ~/android
cp ./vendor/cyanogen/products/cyanogen_supersonic.mk ./buildspec.mk
. build/envsetup.sh
lunch cyanogen_supersonic-eng
Now to do the building.
Code:
make CYANOGEN_WITH_GOOGLE=true otapackage ## if you want google apps (market etc.)
make otapackage ## 100% Open Source only!
By the way for some reason you have to inclued the otapackage even if you just want the .img files because otherwise it crashes at least for me.
Let me know if you encounter any problems and I will try to help.
UPDATES
Copy your ~android folder somewhere and replace ~/android in this tutorial with the directory that you copied it to. This will allow you to update the overlay when needed.
To add google files you will need to do this
Code:
cd ~/android/vendor/cyanogen
./get-google-files
This gets the htc files and I think taht it might be required.
Code:
cd ~/android/device/htc/supersonic
./extract-files.sh
To make a clean rom like mine do the following:
Edit the file ~/android/vendor/cyanogen/products/common.mk to your liking. I just changed the build name and rom version.
I added the files sysrw and sysro ad you can see in the file just put them in a directory and tell it where they are and where you want them. Also I commented out rommanager.apk as I don't like or use it. Also I use RA recovery so it wont work for me anyway.
Also edit the file ~/android/vendor/cyanogen/products/cyanogen_supersonic.mk
I chaged teh build number to the latest spring and removed the boot animation as I like the stock android one better (and it is faster).
YOU NEED TO do this if you want a keyboard...
edit ~/android/vendor/cyanogen/Android.mk and remove LatinIME!
Now we delete some files.
go to ~/android/packages/apps
delete any application that you don't want. You can optionally add program source code that you do want.
I deleted CM* and Protips
I also edited some code in Settings to remove Cyanogen stuff. Actually I took the stock android stuff an edited that with one little fix but I forgot what it was. Just try to build and it will tell you in an error message.
another reserved post
Really cool
Awesome! Thanks so much for posting this.
thanks dude!!
Thanks man.
question...
im having an issue with this step
Code:
cd ~/adnroid
cp ./vendor/cyanogen/products/cyanogen_supersonic.mk ./buildspec.mk
. build/envsetup.sh
lunch cyanogen_supersonic-eng
specifically (lets ignore the type in the instructions
Code:
$ cp ./vendor/cyanogen/products/cyanogen_supersonic.mk ./buildspec.mk
cp: cannot stat `./vendor/cyanogen/products/cyanogen_supersonic.mk': No such file or directory
$ find ~/android -name "cyanogen_supersonic.mk"
$ echo $?
0
anyone else having this issue?
So what is the difference between this and running CM6?
Will this avoid the market issues with CM6?
Once it's built, how do you get it installed on the phone?
Here is the link to cyanogens wiki how too......
http://wiki.cyanogenmod.com/index.php?title=Compile_CyanogenMod_for_Supersonic
Anyway to do this on Windows 7? Another question, would this still work if I just ran Ubuntu from disk?
Thanks, will def.ly give this a try soon...
Sent from my PC36100 using Tapatalk
onicrom said:
question...
im having an issue with this step
Code:
cd ~/adnroid
cp ./vendor/cyanogen/products/cyanogen_supersonic.mk ./buildspec.mk
. build/envsetup.sh
lunch cyanogen_supersonic-eng
specifically (lets ignore the type in the instructions
Code:
$ cp ./vendor/cyanogen/products/cyanogen_supersonic.mk ./buildspec.mk
cp: cannot stat `./vendor/cyanogen/products/cyanogen_supersonic.mk': No such file or directory
$ find ~/android -name "cyanogen_supersonic.mk"
$ echo $?
0
anyone else having this issue?
Click to expand...
Click to collapse
there was a typo in my code I edited the post and it should work now.
cteneyck said:
Here is the link to cyanogens wiki how too......
http://wiki.cyanogenmod.com/index.php?title=Compile_CyanogenMod_for_Supersonic
Click to expand...
Click to collapse
So really, this is just CM6 built on your own Linux box?
Sent from my PC36100 using Tapatalk
Can this be done from ubuntu on a virtual machine?
And what's the difference between this and cm6 ?.....
how do you replace the adw launcher ?
how can you add additional applications?
onicrom said:
how do you replace the adw launcher ?
how can you add additional applications?
Click to expand...
Click to collapse
in vendor/cyanogen/products
replace this
Code:
#PRODUCT_PACKAGES += ADWLauncher
PRODUCT_PACKAGES += Launcher2
also all of the people asking what the differnece between this and cm is nothing unless you change the source files or add remove packages. they can be found in the packages directory.
Igotsanevo4g said:
Can this be done from ubuntu on a virtual machine?
And what's the difference between this and cm6 ?.....
Click to expand...
Click to collapse
yes you can do this in VM but i don;t know the exact steps to set that up just once you get into your linux VM follow the tutorial.
nice tut. thanks for this...sure it will help MANY
l33tlinuxh4x0r said:
in vendor/cyanogen/products
replace this
Code:
#PRODUCT_PACKAGES += ADWLauncher
PRODUCT_PACKAGES += Launcher2
also all of the people asking what the differnece between this and cm is nothing unless you change the source files or add remove packages. they can be found in the packages directory.
Click to expand...
Click to collapse
Thanks much

[Guide]Make your own rom(CM9/EVERVOLV) and kernel from source code | Advanced users

I think many want to know how this stuff is actually done,so....read
Kernel Development
U need Linux or Mac OS .The End
I can confirm the below method works on Ubuntu 11.10,32 bit(or other linux distros/mac u need different packages)
1)Open terminal and download these packages(for both 32/64 bit)
Code:
apt-get install git-core gnupg sun-java6-jdk flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl libncurses5-dev zlib1g-dev
For 64 bit ,install more packages,otherwise leave
Code:
ia32-libs lib32z1-dev lib32ncurses5-dev gcc-multilib g++-multilib
2)Download kernel source code for pico ,which u will compile,from www.htcdev.com (if u want to compile kernel for ics/jb,use lirokoa's source code from www.github.com/lirokoa/htc_pico_kernel )
Extract the archive somewhere safe
3)Download toolchain needed to compile the kernel from www.github.com/sakindia123/android_toolchains
We'll use arm-eabi-4.4.3 for pico
Now let's assume u have correctly set up your machine
extract the sources and everything else u downloaded....then go into the top directory
Code:
cd Kernel
u enter into the root of the kernel directory with this
then type :
Code:
gedit Makefile
The Make file will open.........look out for this and change CROSS_COMPILE= "your toolchain path"
EXAMPLE:
Code:
CROSS_COMPILE ?= /home/sarthak/Downloads/Toolchains/arm-eabi-4.4.3/bin/arm-eabi-
This will open up the Makefile in a gedit,and the changed values will correspond to wherever u placed your toolchain...
Make the kernel config
Code:
make msm7627a_defconfig
NOTE- Do "make htc_pico_defconfig" is making ics/jb kernel
This will make a working kernel config acc. to the source code
Now,make the necessary changes in your source.When you are done,type:
Code:
make -jX
,where X=no.op cpu threads multiplied by 1 or 2.
Sit down and have a smoke!
The resulting kernel will be in Kernel/arch/arm/boot/zImage
Easy,ain't it?
Remember,this guide doesnt teach u how to make particular changes,it just helps u setting up your build environment and compiling from a given source.
Packaging kernel for flashing on target device
- Take a stock boot.img(or any boot.img that works with the rom)
- Downloads boot image tools from -> https://github.com/sakindia123/boot-image-tools and keep them somewhere
- Place boot.img in source_img folder inside the boot.img-tools folder(create if not there)
- Enter the boot tools directory
- Unpack:
Code:
$ mkdir -p unpack
$ tools/unpackbootimg -i source_img/boot.img -o unpack
-Extracting boot.img-ramdisk.gz
Code:
$ mkdir -p boot
$ cd boot
$ gzip -dc ../unpack/boot.img-ramdisk.gz | cpio -i
$ cd ../
Packing a new ramdisk:
Code:
$ tools/mkbootfs boot | gzip > unpack/boot.img-ramdisk-new.gz
Create a new boot.img:
Code:
$ mkdir -p target_img
$ tools/mkbootimg --kernel unpack/boot.img-zImage --ramdisk unpack/boot.img-ramdisk-new.gz -o target_img/boot.img --base `cat unpack/boot.img-base`
Done!
Now take the boot.img from target_img folder and flash via fastboot.Also push the compiled modules or else wifi wont work
Code:
fastboot flash boot boot.img && fastboot reboot
adb push drivers/net/wireless/bcmdhd/bcmdhd.ko /system/lib/modules
adb push drivers/net/kineto_gan.ko /system/lib/modules
NOTE: If u are compiling kernel for stock/sense roms,wifi module will be found in drivers/net/wireless/bcm4330b2/bcm4330.ko
Enjoy !
Compile rom from source
1) Make your own CyanogenMod9 nightly
So cant wait for the developer to release the next build?gettin' itchy?
Compile on your own!
- Packages
For 64-bit systems(For ICS and above,u need 64 bit and above)
Code:
apt-get install git-core gnupg flex bison gperf build-essential zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev:i386 g++-multilib mingw32 openjdk-6-jdk pngcrush schedtool tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386
- Create working directories for the build environment:
mkdir -p ~/bin
mkdir -p ~/android/system
- Get Google's repo tool
Code:
curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
chmod a+x ~/bin/repo
Reboot
- Sync the Repository
Code:
cd ~/android/system/
repo init -u git://github.com/CyanogenMod/android.git -b ics
repo sync -j16
NOTE- USe -j4 if u have slow net connection!
Wait for a few hours depending upon your net connection,it will download 4-5 GB or more
Then ,after syncing finishes,in the root of the source,open the hidden folder ".repo"
create a file local_manifest.xml and put this xml code to sync relevant repos for compiling cm9 for pico
PHP:
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<project name="lirokoa/android_device_htc_pico_ics" path="device/htc/pico" revision="ics" />
<project name="sakindia123/ics-vendor-pico" path="vendor/htc/pico" revision="master" />
</manifest>
then save and do "repo sync " again
- Compile the actual rom
This is fun bit.Make changes to the sourc code if u want to fix bugs or experiment,then,in the root of working directory,type
Code:
. build/envsetup.sh
brunch pico -jX
NOTE- REPLACE X with the no. of cores on your computer,do not enter X
Wait for it to compile(depends on how crap the computer is)
When it finishes compiling,output will be in out/target/product/pico/cm9-UNOFFICIAL-xxxxxxxx.zip
Flash the zip via recovery
Enjoy
Compile Evervolv Nightly
SO u dont want cm9,u want to compile evervolv,eh?
Follow the setups upto "Get Google's repo tool" in cm9 guide,but instead of cm9 source ,sync this
Code:
cd ~/android/system/
repo init -u git://github.com/cm2pico/android.git -b ics
repo sync -j16
After syncing,do this
Code:
nano vendor/ev/vendorsetup.sh
in the text editor that opens up,type
[/CODE]add_lunch_combo ev_pico-eng[/CODE]
Then to compile,
Code:
. build/envsetup.sh
lunch
Select pico in menu and type
Code:
make -jX otapackage
Replace X with no. of cores on pc!
pico up output zip from out/target/product/pico/Evervolv-2.2.0.zip
Nice think I might try this. I'm running osx is there different tools avalible or am I better off installing win or Linux in a vm
Sent from my HTC Explorer A310e using xda app-developers app
---------- Post added at 01:48 PM ---------- Previous post was at 01:45 PM ----------
Sorry just read the op properly and seen my question answered
Sent from my HTC Explorer A310e using xda app-developers app
May I use cygwin software to use this on windows to emulate properties of Linux? I heard so!
Nice to see new how to threads...
Sent from my Galaxy Nexus using Tapatalk 2
arunsai123 said:
May I use cygwin software to use this on windows to emulate properties of Linux? I heard so!
Click to expand...
Click to collapse
Not really..there are some things that cant be properly emulated..u need a native install or Virtual MAchine
BUMP- Kernel part of the tut has been completed.Hope u guys are successfully in making your own kernel
dude wheres the tutorial for ROM developement!!
updated with instruction to compile own CM9 and evervolv kang
Great Tutorial dude ...
Great Tutorial dude ... ... very clearly explained .... :laugh: :good: :fingers-crossed:
Great I'm going to compile aokp from its source
Sent from my HTC Explorer A310 using xda premium
time to download
well i have airtel broadband connection(unlimited) on 256 kbps, i get a downloading speed of 30-40 kbps.
so, i wanted to ask you all the size of all the sources/data required to compile a single ROM and time taken to download all those things.
siddharth1102 said:
well i have airtel broadband connection(unlimited) on 256 kbps, i get a downloading speed of 30-40 kbps.
so, i wanted to ask you all the size of all the sources/data required to compile a single ROM and time taken to download all those things.
Click to expand...
Click to collapse
cm9 about 4-5gb, evervolv ics about 6-6.5gb
unlike cm7 where you had to download all supported devices which added additional size to main source (16gb or so) cm9 (by default) and evervolv (from sakindia123 that includes device tree and vendor prop files) both only download the main source only which makes the downloads less in size...........for you it would take a long time to download afew hours (i have 15mbps or 1.5meg a sec so didnt take long) once all setup and synced a single cm9 build takes me just over 1hr and evervolv slightly more, all depends on your hardware ie ram, processor etc.....have fun
LiVeRpOoL-FaN said:
cm9 about 4-5gb, evervolv ics about 6-6.5gb
unlike cm7 where you had to download all supported devices which added additional size to main source (16gb or so) cm9 (by default) and evervolv (from sakindia123 that includes device tree and vendor prop files) both only download the main source only which makes the downloads less in size...........for you it would take a long time to download afew hours (i have 15mbps or 1.5meg a sec so didnt take long) once all setup and synced a single cm9 build takes me just over 1hr and evervolv slightly more, all depends on your hardware ie ram, processor etc.....have fun
Click to expand...
Click to collapse
Can i download these things in installments?
siddharth1102 said:
Can i download these things in installments?
Click to expand...
Click to collapse
really the best way is to fully download in 1 go but in terminal you press Ctrl + z (on Ubuntu) to stop the process and then carry it on later, although it wont sync the whole project until all source is downloaded............
LiVeRpOoL-FaN said:
really the best way is to fully download in 1 go but in terminal you press Ctrl + z (on Ubuntu) to stop the process and then carry it on later, although it wont sync the whole project until all source is downloaded............
Click to expand...
Click to collapse
While learning to compile i found that compiling jelly bean on ubuntu 12.04 is it experimental mode. So, i wanted to ask won't it compile properly and will it work i do so?
siddharth1102 said:
While learning to compile i found that compiling jelly bean on ubuntu 12.04 is it experimental mode. So, i wanted to ask won't it compile properly and will it work i do so?
Click to expand...
Click to collapse
i`ve not used 12.04 for anything, i used 11.10 for cm7 and cm9 but found had to use 10.04.4 (lucid) for evervolv ics (aosp code, not cm modified code) i think jb aosp was compiled on 10.04.4 by android aosp team

[GUIDE][HOW_TO] BUILD a LINUX KERNEL FROM SOURCE [UBUNTU]

This is a general open source linux development thread!
Android's kernel is a derivative of linux's kernel. Its good to know how to build both of these kernels. You might be already familiar with building kernels for various devices from sources. So I have made a new thread for guiding people on how to compile linux kernel from source (example taken as ubuntu kernel).
Requirements:
Any linux os x64 bit(example here: ubuntu 14.04)
Git (sudo apt-get install git)
Minimum of 4GB RAM and some reasonable linux-swap
To get the currently running kernel image, type the following:
Code:
apt-get source linux-image-$(uname -r)
Now we need to obtain Ubuntu Kernel Sources from its repositories. Make a new directory and inside it, initialise the git and clone the repository.
Code:
git clone git://kernel.ubuntu.com/ubuntu/ubuntu-<release>.git
<release> : Type in the required source. It can be lucid, precise, trusty, utopic etc.
Setting up the build environment. There are lots of tools and packages that are very much essential for building a kernel. These tools can be downloaded as a whole bundle and can be installed easily. Here's the code to set it up:
Code:
sudo apt-get build-dep linux-image-$(uname -r)
NOTE: The above comand can be executed only after you obtain the currently running kernel image. I have already given the code to obtain it above.
Now, change directory to the root of the kernel and type the following:
Code:
chmod -R a+x *
The above code will set the required permissions for building and executing the kernel.
Now, run these two commands:
Code:
fakeroot debian/rules clean
fakeroot debian/rules editconfigs
The first command cleans up the code automatically.
The slightly tricky part is with the second line of the code. When you execute it, you will have to edit a series of menuconfigs. To make changes to the configuration file we need to edit the configuration file. The kernel developers have created a script to edit kernel configurations which has to be called through the debian/rules makefile, unfortunately you will have to go through all the flavors for this script to work properly. The script will ask you if you want to edit the particular configuration. You should not make changes to any of the configurations until you see your wanted flavour configuration
We have now covered about 70% of progress. The rest is building the kernel and testing it.
Building the kernel is quite easy. Change your working directory to the root of the kernel source tree and then type the following commands:
Code:
fakeroot debian/rules clean
fakeroot debian/rules binary-headers binary-generic
If the build is successful, a set of three .deb binary package files will be produced in the directory above the build root directory. For example after building a kernel with version "3.13.-0.35" on an amd64 system, these three .deb packages would be produced:
Code:
cd ..
ls *.deb
linux-headers-3.13.0-35_3.13.0-35.37_all.deb
linux-headers-3.13.0-35-generic_3.13.0-35.37_amd64.deb
linux-image-3.13.0-35-generic_3.13.0-35.37_amd64.deb
Testing the new kernel
Install the three-package set (on your build system, or on a different target system) with dpkg -i and then reboot:
Code:
sudo dpkg -i linux*3.13.0-35.37*.deb
sudo reboot
Guys, I hope I have made an easy tutorial. You are always welcome to ask doubts (even on PM). Thank You.
Specific Hardware/Architecture
Creating a new config
I’ll be using the method of creating a new flavour, this adds a bit more work but this way you can always compile the original kernels.
We’ll use the generic flavour as the base for our own flavour being i7, this extension needs to be in small caps.
Code:
cp debian.master/config/amd64/config.flavour.generic debian.master/config/amd64/config.flavour.i7
fakeroot debian/rules clean
debian/rules updateconfigs
To make changes to the configuration file we need to edit the configuration file. The kernel developers have created a script to edit kernel configurations which has to be called through the debian/rules makefile, unfortunately you will have to go through all the flavours for this script to work properly.
Code:
debian/rules editconfigs
The script will ask you if you want to edit the particular configuration. You should not make changes to any of the configurations until you see the i7 configuration
Code:
Do you want to edit config: amd64/config.flavour.i7? [Y/n]
Make your changes, save the configuration and then keep going until the script ends.
When you’re done, make a backup of the config flavor file.
Code:
cp debian.master/config/amd64/config.flavour.i7 ../.
Now we need to clean up the git tree in order to get ready for compilation.
Code:
git reset --hard
git clean -df
Getting ready for compilation
Because we are going to be creating a new flavour based on a existing flavour (generic in my case) we need to create some extra files. During compilation the process checks the previous release for some settings, as we’re creating a local flavour it doesn’t exist in the source, so we’re creating it.
To see the previous release we use:
Code:
ls debian.master/abi
cp debian.master/abi/3.0.0-12.20/amd64/generic debian.master/abi/3.0.0-12.20/amd64/i7
cp debian.master/abi/3.0.0-12.20/amd64/generic.modules debian.master/abi/3.0.0-12.20/amd64/i7.modules
Copy our flavored configuration file back.
Code:
cp ../config.flavour.i7 debian.master/config/amd64/
We need to edit some files:
File: debian.master/etc/getabis
Search for the line:
Code:
getall amd64 generic server virtual
Change it in:
Code:
getall amd64 generic server virtual i7
File: debian.master/rules.d/amd64.mk
Search for the line:
Code:
flavours = generic server virtual
Change it in:
Code:
flavours = generic server virtual i7
File: debian.master/control.d/vars.i7
This files does not exist and in order to make the compilation process aware of our own flavor we want to compile we need to create it.
Code:
cp debian.master/control.d/vars.generic debian.master/control.d/vars.i7
You can edit the file and make it your own.
Code:
arch="i386 amd64"
supported="i7 Processor"
target="Geared toward i7 desktop systems."
desc="x86/x86_64"
bootloader="grub-pc | grub-efi-amd64 | grub-efi-ia32 | grub | lilo (>= 19.1)"
provides="kvm-api-4, redhat-cluster-modules, ivtv-modules, ndiswrapper-modules-1.9"
We need to commit our changes in the git repository.
Code:
git add .
git commit -a -m "i7 Modifications"
The text after -m is the message you add to your commit.
Compilation
It’s finally time for compiling, to keep our newly created branch in pristine condition we will do the compilation in a separate branch. We keep our branch clean as this will help later on when we want to update our new branch to a newer kernel.
Code:
git checkout -b work
fakeroot debian/rules clean
All the packages will be created in the directory /d1/development/kernel/ubuntu/oneiric
Create independent packages:
Code:
skipabi=true skipmodule=true fakeroot debian/rules binary-indep
The above statement will create the following deb files:
Code:
linux-doc_3.0.0-13.21_all.deb
linux-headers-3.0.0-13_3.0.0-13.21_all.deb
linux-source-3.0.0_3.0.0-13.21_all.deb
linux-tools-common_3.0.0-13.21_all.deb
Create the tools package:
Code:
skipabi=true skipmodule=true fakeroot debian/rules binary-perarch
The above statement will create the following deb file:
Code:
linux-tools-3.0.0-13_3.0.0-13.21_amd64.deb
Create the flavour depended files:
Code:
skipabi=true skipmodule=true fakeroot debian/rules binary-i7
The above statement will create the following deb files:
Code:
linux-headers-3.0.0-13-i7_3.0.0-13.21_amd64.deb
linux-image-3.0.0-13-i7_3.0.0-13.21_amd64.deb
Installation
After the compilation is finished we’ll have the above packages in the parent directory.
To install the files
Code:
cd ..
sudo dpkg -i linux-headers-3.0.0-13-i7_3.0.0-13.21_amd64.deb linux-headers-3.0.0-13_3.0.0-13.21_all.deb linux-image-3.0.0-13-i7_3.0.0-13.21_amd64.deb
Check your bootloader if the newly installed Ubuntu kernel is the default one, for grub check the file /boot/grub/menu.lst or if you run grub2 check /boot/grub/grub.cfg
thx for your info
nice job mate..!! :good:
now i'm gonna try this..!!
Nice ,i can't say anything
faizauthar12 said:
Nice ,i can't say anything
Click to expand...
Click to collapse
Thank you for the great guide!!!
Nice thread. I'll try it at home
Thanks
Enviado de meu Moto G usando Tapatalk
Thx for the guide
tra_dax

Guide: Compile /system/bin binaries for your device from AOSP source code

Now tested up to downloading AOSP and make toolbox you should be all set
Please give thanks to this thread: https://forum.xda-developers.com/newreply.php?do=newreply&p=43622764
Warning: I hacked my way through this stuff a few weeks ago I am not an expert!
How to compile Android Open Source Code modules​
I don't compile C code on Windows machines I have no idea about that.
Notice
This guide is a quick and dirty how to make a module. It will not cover finalizing setting up the source codes for your device. It is only my goal to enable you to compile binaries such as grep, toolbox, dumpstate, dalvikvm, jack and etc.
===>] Setup Ubuntu 64bit [<===​Unplug that Windows drive, plug in a fresh hard drive and install Ubuntu latest/greatest. Ignore the recommendation to downgrade gnu make!, for now.
Open a terminal and issue these commands (warning ppa repository for OpenJDK 7 is said to have a security issue?, isn't being updated?.. whatevs it works)
Code:
sudo apt-get update
sudo apt-get upgrade
sudo add-apt-repository ppa:openjdk-r/ppa
sudo apt-get install openjdk-7-jdk
sudo apt-get install openjdk-8-jdk
sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386 lib32z1 libbz2-1.0:i386
sudo apt-get install git ccache automake lzop bison gperf build-essential zip curl zlib1g-dev zlib1g-dev:i386 g++-multilib python-networkx libxml2-utils bzip2 libbz2-dev libbz2-1.0 libghc-bzlib-dev squashfs-tools pngcrush schedtool dpkg-dev liblz4-tool make optipng
(choose Java 1.7 in the following way)
Code:
sudo update-alternatives --config java
(let me know if I missed anything please)
"Tried the Android SDK only it is missing too many things we need as a developer"
===>] Setup Android Studio SDK & NDK [<===​Installation Paths:
*** I install to /home/username/Android and /home/username/Android/Sdk and /home/username/Android/Sdk/ndk-bundle ***
NOTE: from here forward username will == droidvoider
Note: Android Studio IDE isn't necessary only the SDK & NDK are needed to compile AOSP.
Install Android Studio Proper: (don't worry about setting up paths we will cover that, just install it)
https://developer.android.com/studio/install.html
or
SDK Only:
Typically we install these things manually by creating the directory then just unzipping the files there.
https://developer.android.com/studio/index.html#linux-bundle (scroll down for sdk only)
Code:
mkdir /home/droidvoider/Android
mkdir /home/droidvoider/Android/Sdk
(then unzip the sdk zip to that directory. I recommend the file explorer copy/paste right click uncompress and done.)
https://dl.google.com/android/repository/tools_r25.2.3-linux.zip
Install NDK through the SDK Manger:
(from terminal 'studio.sh' and then configure, and then sdk manger --- if this is hard to figure out tell me I will elaborate)
or
Manually Install Native Development Kit -- 'c programming support'
Download the Native Development Kit from Google: https://developer.android.com/ndk/downloads/index.html
Code:
mkdir /home/droidvoider/Android/Sdk/ndk-bundle
Then just unzip the ndk files into the directory we created above.
===>] Setup your toolchain [<===​** This example is arm64-v8a aarch64 **
1. Navigate to /home/droidvoider/Android/Sdk/ndk-bundle/build/tools and then open a terminal "right click open area"
2. mkdir /home/droidvoider/toolchains
3. ./make_standalone_toolchain.py --arch arm64 --api 23 --stl=libc++ --install-dir /home/mm/toolchains/aarch64-linux-android-4.9
4. cd /home/droidvoider
5. gedit .bashrc and morph this in at the bottom.. (AND edit or replace the existing PATH variable)
DON'T just PASTE IN *my* $PATH export!! I included my entire path statements to show you.
Code:
export PATH=$PATH:/usr/local/android-studio/bin:/home/droidvoider/Android/Sdk/platform-tools:/home/droidvoider/Android/Sdk/ndk-bundle:/home/droidvoider/Android/Sdk/tools
I feel this is human readable, for example change Android_Build_Out to be on your desktop instead if you want.
Code:
export PATH=$PATH:/home/droidvoider/toolchains/aarch64-linux-android-4.9
export NDK=/home/droidvoider/Android/Sdk/ndk-bundle
export SYSROOT=$NDK/platforms/android-23/arch-arm64
export TARGET=aarch64-linux-android
export HOST=$TARGET
export BUILD=x86_64-linux
export ANDROID_NDK_BIN=/home/droidvoider/toolchains/aarch64-linux-android-4.9/bin
export CC=$ANDROID_NDK_BIN/aarch64-linux-android-gcc-4.9
export CPP=$ANDROID_NDK_BIN/aarch64-linux-android-g++
export AR=$ANDROID_NDK_BIN/aarch64-linux-android-ar
export OUT_DIR_COMMON_BASE=/home/droidvoider/Android_Build_Out
Note: You might want to setup an alternate toolchain also but this is all of the puzzle pieces.
===>] Google's version of this How To -- Just for reference [<===​https://source.android.com/source/requirements.html
https://source.android.com/source/initializing.html
===>] Install the repo tool [<===​https://source.android.com/source/downloading.html
(don't type repo init or repo sync --- I will be taking back over from there on the next page)
Added Repair Notes -- Not part of the install!
Have you accidentally installed or removed something you shouldn't have? (welcome to development, here try this before reinstall)
sudo apt-get clean
sudo apt-get update
sudo apt-get install -f
sudo dpkg -a --configure
sudo apt-get dist-upgrade
sudo apt-get install -f
sudo dpkg -a --configure
Selecting the correct AOSP branch and downloading it.
Tested up to downloading AOSP and make toolbox -- you should be all set
===>] Match your build number to it's AOSP sources [<===​preface: You can get this from your device if you're on the same build id as your the available source code from your vendor for your device. Otherwise you need to open the AP file from the firmware that matches those available sources to extract the system.img, to extract build.prop. I explain how to open a system.img file below under retrieving your hardware drivers. build.prop is in the main directory of system.img
(Many times the build number is the same. For me I believe all of MM builds are using this number.)
Assumes sources match current device, worked out true in my case
1. Plug in your device and get it connected. (DEVELOPER OPTIONS|USB DEBUGGING) and select allow on device
2. Retrieve the build number that matches the available sources for your device.
From your ubuntu terminal retrieve the build id using this command:
Code:
adb shell getprop | grep 'ro.build.id'
Yields something similar to this: [ro.build.id]: [MMB29K]
3. Match it up to the Nexus build numbers (This info is for AT&T Note 5 Marshmallow MMB29K, get your specific build number!)
https://source.android.com/source/build-numbers.html#source-code-tags-and-builds
MMB29K android-6.0.1_r1 Marshmallow Nexus 5, Nexus 5X, Nexus 6, Nexus 7 (flo/deb), Nexus 9 (volantis/volantisg)
===>] Bring down a specific AOSP source branch [<===​
4. Make a directory for the source code.
Code:
mkdir /home/droidvoider/Desktop/AOSP_Android_6.01_r1
5.
Code:
cd /home/droidvoider/Desktop/AOSP_Android_6.01_r1
6. Bring down the sources, this one is approximately 13 gigabytes
Code:
repo init --depth=1 -u https://android.googlesource.com/platform/manifest -b android-6.0.1_r1
repo sync
===>] I'm not sure the rest of this is needed [<===​For compiling toolbox the remainder wasn't needed.. But I have a large list of things to do so I can't test each item. If you can't compile a specific module continue reading.
===>] Merge Vendor sources & AOSP sources [<===​
7. Download the available sources for your device. In this example I downloaded PE6 Marshmallow sources for AT&T Note 5:
http://opensource.samsung.com/reception/receptionSub.do?method=sub&sub=F&searchValue=SM-N920A
8. Read the readme file from the sources platform zip to understand how to merge them into the AOSP sources. For the 2 Samsungs I've worked with the idea is to replace any directory that already exists. But if there is just one file such as core.mk only replace the one file. Then edit the .mk files as described in your readme. (and/or take info from cyanogen/lineagos) -- <I can help more, ask>
note: you probably don't need to take the configs from LineageOS and put them into your .mk files. However, if you do need to get more configs then you should get a big fat message when you type make 'modulename'. At first only edit .mk files as described by vendor device source readme file.
===>] Merge in Hardware drivers and etc [<===​possibly unnecessary depends what you're doing
9. Obtain a copy of the firmware for your device that matches the version of the source code you are able to download from your vendor.
for me that was Build Number: MMB29K.N920AUCU2BPE6 but your mileage will almost certainly vary!
10. Download https://github.com/anestisb/android-simg2img
11. Unzip it right in your download folder, open the folder and then 'open in terminal'
12. Make it and then move it a directory in your path. Warning: My command puts in in the Ubuntu default /bin folder.
Code:
make
sudo mv append2simg img2simg simg2img simg2simg simg_dump.py /bin
13. Uncompress the AP file from the matching firmware and extract the system.img into it's own directory
then select that folder, right click, open in terminal
Code:
simg2img system.img sys.raw
mkdir sys
sudo mount -t ext4 -o loop sys.raw sys/
14. A drive mounted, look on your task bar it should've wiggled too. Copy the etc and vendor folders into the main folder of the sources we are merging
===>] Listing and building modules [<===​Navigate to the folder where you download the sources "/home/droidvoider/Desktop/AOSP_Android_6.01_r1" and open in terminal.
Code:
make modules -- list the available modules
make <module name> -- builds a specific module
example: make dumpstate
description: Will build everything needed for dumpstate and place it in the folder we specified in our export (above step). The final build line will read install and detail the final output folder
Example successful output:
[CODE]
Install: /home/droidvoider/Android_Build_Out/Android_6.01_r1/target/product/generic/system/bin/dumpstate
===>] Android Build System, basic intro [<===​Notice: I built this how to to answer the same question from 3 people regarding working with toolbox and the dirtycow exploit. So I decided to give a direct example of using toolbox.c from farm-root
#ifdef
Our makefile is Android.mk and that's where we link things together. If you look at the Android.mk file for farm-root you will notice bridge.c is used 3 different times called different 'module' names. bridge_pull, bridge_push, bridge_pull_boot. Each of these will be binaries of those names.
Inside bridge.c you will see #ifdef FARM_PULL and then you will see #else and further you will see #endif which you may have noticed matches inside the Android.mk file for the bridge modules -DFARM_PULL -DFARM_BOOT <== Notice the double define on bridge_pull_boot
toolbox.c
toolbox.c is going to be the same way. You will need to copy shared.h and shared.c into the directory where toolbox.c resides. Then edit the Android.mk, in our example:
1. Navigate to this directory and open: system/core/toolbox/Android.mk
2. CTRL + F and search for "LOCAL_MODULE := toolbox"
3. Add: LOCAL_CFLAGS += -DFARM_PULL -DFARM_BOOT (in this example add one, both or even new ones you created)
4. Navigate to the main directory of the sources, you should see a Makefile and a build_64bit.sh
5. from terminal: make toolbox
Note: I think from here you can Google it out in a few minutes if that is not the case please let me know.
Working with C cross platform​Ubuntu is Linux based just like Android and this makes testing blocks of code extremely easy. You of course can't use Android headers and in some rare cases you can't test the code on Ubuntu at all but in most cases you can. When I want to design something for Android I open gedit and save it as a .c file. Then I compile it using gcc -o mycode mycode.c There's plenty of examples on using gcc with linux but just understand you can do it all. Then before too much work test it on Android. (helpful commands at end of post)
My advice really is to build out your small blocks of code on your linux box but then paste them into your Android program folder, edit your Android.mk, add it to your Makefile including your 'push' section so that you can simply type make push to test it.
I am in fact trying to encourage you to learn C and not so much trying to encourage you to hack things. But I know that interest/passion is what teaches, not my words and not someone else's curriculum. So in that spirit I will do my best to give examples to help you with 'whatever' it is you are passionate about. Let me know what's missing.
Don't forget to compile for Android first
Before you can test your code you will have compiled it using the cross compiler for Android. ndk-build, or the correct gcc cross compiler. (Personally I put the .c file into a directory with Android.mk and a Makefile then just type make to build it to Android)
see examples section I will add a couple examples.
Android Developer Bridge -- a developers tool
adb is included with the Android SDK along with some other tools. Some of those tools are fastboot for unlocking bootloaders and another way of flashing. There is monitor which is a cool tool for remotely viewing processes, logcat, memory dumps and etc.
But pointedly what we will use the most is simply adb.
Using adb to test your code on locked down Android systems
Shell has fairly high privileges, you may not be aware but you can execute binaries and bash scripts. We use /data/local/tmp/ for these things. You can create a directory, add or remove files, execute your binaries and even execute shell scripts using sh script.sh
ndk-build places the binary in libs/(arch type) .. For a quick test you can just open a terminal in that directory then:
Code:
adb push mybinary /data/local/tmp/
adb shell
cd data/local/tmp
chmod 777 mybinary
./mybinary
Added:
Examples of basic make files for Android.
happy coding
If you get an error​Please reissue the command but pipe the output to a file.
make toolbox > /home/droidvoider/Desktop/build_toolbox-output.txt
zip that up with your source code, including your customized header files and attach it to this thread.
puzzles are fun but I like all the pieces
droidvoider said:
Tested up to downloading AOSP and make toolbox -- you should be all set
===>] Match your build number to it's AOSP sources [<===​preface: You can get this from your device if you're on the same build id as your the available source code from your vendor for your device. Otherwise you need to open the AP file from the firmware that matches those available sources to extract the system.img, to extract build.prop. I explain how to open a system.img file below under retrieving your hardware drivers. build.prop is in the main directory of system.img
(Many times the build number is the same. For me I believe all of MM builds are using this number.)
Assumes sources match current device, worked out true in my case
1. Plug in your device and get it connected. (DEVELOPER OPTIONS|USB DEBUGGING) and select allow on device
2. Retrieve the build number that matches the available sources for your device.
From your ubuntu terminal retrieve the build id using this command:
Code:
adb shell getprop | grep 'ro.build.id'
Yields something similar to this: [ro.build.id]: [MMB29K]
3. Match it up to the Nexus build numbers (This info is for AT&T Note 5 Marshmallow MMB29K, get your specific build number!)
https://source.android.com/source/build-numbers.html#source-code-tags-and-builds
MMB29K android-6.0.1_r1 Marshmallow Nexus 5, Nexus 5X, Nexus 6, Nexus 7 (flo/deb), Nexus 9 (volantis/volantisg)
===>] Bring down a specific AOSP source branch [<===​
4. Make a directory for the source code.
Code:
mkdir /home/droidvoider/Desktop/AOSP_Android_6.01_r1
5.
Code:
cd /home/droidvoider/Desktop/AOSP_Android_6.01_r1
6. Bring down the sources, this one is approximately 13 gigabytes
Code:
repo init --depth=1 -u https://android.googlesource.com/platform/manifest -b android-6.0.1_r1
repo sync
===>] I'm not sure the rest of this is needed [<===​For compiling toolbox the remainder wasn't needed.. But I have a large list of things to do so I can't test each item. If you can't compile a specific module continue reading.
===>] Merge Vendor sources & AOSP sources [<===​
7. Download the available sources for your device. In this example I downloaded PE6 Marshmallow sources for AT&T Note 5:
http://opensource.samsung.com/reception/receptionSub.do?method=sub&sub=F&searchValue=SM-N920A
8. Read the readme file from the sources platform zip to understand how to merge them into the AOSP sources. For the 2 Samsungs I've worked with the idea is to replace any directory that already exists. But if there is just one file such as core.mk only replace the one file. Then edit the .mk files as described in your readme. (and/or take info from cyanogen/lineagos) -- <I can help more, ask>
note: you probably don't need to take the configs from LineageOS and put them into your .mk files. However, if you do need to get more configs then you should get a big fat message when you type make 'modulename'. At first only edit .mk files as described by vendor device source readme file.
===>] Merge in Hardware drivers and etc [<===​possibly unnecessary depends what you're doing
9. Obtain a copy of the firmware for your device that matches the version of the source code you are able to download from your vendor.
for me that was Build Number: MMB29K.N920AUCU2BPE6 but your mileage will almost certainly vary!
10. Download https://github.com/anestisb/android-simg2img
11. Unzip it right in your download folder, open the folder and then 'open in terminal'
12. Make it and then move it a directory in your path. Warning: My command puts in in the Ubuntu default /bin folder.
Code:
make
sudo mv append2simg img2simg simg2img simg2simg simg_dump.py /bin
13. Uncompress the AP file from the matching firmware and extract the system.img into it's own directory
then select that folder, right click, open in terminal
Code:
simg2img system.img sys.raw
mkdir sys
sudo mount -t ext4 -o loop sys.raw sys/
14. A drive mounted, look on your task bar it should've wiggled too. Copy the etc and vendor folders into the main folder of the sources we are merging
Click to expand...
Click to collapse
And where is exactly the main folder? Sorry, Im just confused
DigitalDoraemon said:
And where is exactly the main folder? Sorry, Im just confused
Click to expand...
Click to collapse
it's no problem this stuff isn't easy to just figure out on your own. remember to substitute droidvoider for your ubuntu user name
In this example my sources are on my desktop in a folder named Android_6.01_r1
Sources for toolbox for example:
/home/droidvoider/Desktop/Android_6.01_r1/system/core/toolbox/<sources will be here including Android.mk>
Script for modules, including toolbox
/home/droidvoider/Desktop/Android_6.01_r1/Makefile <--- this is our modules script, if you will
<open a terminal in the above folder then use that Makefile like so>
make toolbox <---- this will compile only what is needed to compile the module 'toolbox' (this takes a minute)
Out export folder we decided in ./home/droidvoider/bashrc
/home/droidvoider/Android_Build_Out/Android_6.01_r1/target/product/generic/system/bin
Anybody, please compile grep utility for arm and x86... Minimum Platform Version Android 4.0.3, API Level - 15
Thanks
Great & useful .

A noob tries his hand at ROM development for the MiA1 tissot

The problem with reading the articles on XDA is that eventually you want to try out some of the things described in these pages. I am no exception. After reading the superb article https://forum.xda-developers.com/mi-a1/how-to/guide-build-rom-source-tissot-t3754723 I decided to try my hand at developing the ROM for the Xiaomi MiA1. This is my daily driver and that in itself was a strong reason for motivation.
I tried replicating the steps given in the article on my Dell Inspiron and immediately ran into issues. The basic requirements mentioned are a linux or Mac computer. So to start with I formatted my laptop. Removed windows 10 and installed Ubuntu's latest 18.04 LTS.
I believed I had the next set of requirements for custom ROM development which were
• A basic understanding of Linux based OS specifically Ubuntu.
• Ability to type and use the command line. Write or copy paste commands in the Ubuntu konsole.
• A basic understanding of programming concepts, read and update XML files, understand error messages.
• Fast internet access.
• Steady electricity supply.
• Lots and lots of patience.
This still did not solve my problem. The build would crash repeatedly. Then I read the https://source.android.com/setup/. A whole new set of requirement came up. The article said that ideally the build system should exceed these conditions
• 64 bit environment
• 100 GB of free hard disk space
• 16 GB RAM / swap space.
At home my son was about to buy a new PC and this made his old PC available. I upgrade the RAM and added a new hard disk. Now my hardware configuration was as under :
• Intel i5 processor
• 16 GB RAM
• 1 TB hard disk.
With a new hard disk I had to create a boot-able USB drive. This I achieved with Rufus. My old laptop which again had its Windows 10 installation was used to install Rufus based on the instructions i got from https://rufus.akeo.ie/
The latest version of Ubuntu I downloaded from https://www.ubuntu.com/download/desktop
Setting Ubuntu from scratch for someone used to the world of windows is not exactly easy. I found the tutorial at https://tutorials.ubuntu.com/tutorial/tutorial-install-ubuntu-desktop#0 extremely helpful.
I wrote down the steps I took in reaching the final goal of a Lineage ROM for my Mi A1.
Step 1: Setup Ubuntu - already completed
I chose the default settings as recommended in the setup.
Step 2: Installation of Java Development Kit
Once Ubuntu was up and running I opened a konsole window and typed the following commands
PHP:
sudo apt-get update
sudo apt-get install openjdk-8-jdk
Ubuntu did all the installing as I looked on.
Step 3: Installing required packages
PHP:
sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev libgl1-mesa-dev libxml2-utils xsltproc unzip
Step 4: Configure your smart phone access
I next installed the tools required to access the phone. This access would be required to later flash the phone or access its internals with ADB.
PHP:
sudo apt-get install android-tools-adb
sudo apt-get install fastboot
Step 5: To creating the work directories i typed the following commands. I was following the instructions from the above two articles alternately.
PHP:
mkdir -p ~/bin
mkdir -p ~//lineage
Step 6: Installing repo
I was informed that the Android source tree is located in a Git repository which is hosted by Google. The Git repository includes metadata for the Android source. Repo is a tool that makes it easier to work with Git .
PHP:
curl [url]https://storage.googleapis.com/git-repo-downloads/repo[/url] > ~/bin/repo
Once the repo was downloaded I had to make it executable
PHP:
chmod a+x ~/bin/repo
Step 7: The next step was to initialize the lineage source
This required to change to the directory created in step number 5 above. As someone coming from the world of windows I preferred to use the GUI and open the lineage folder created by using the mouse click. There right click brings up the option of ' Open in Terminal' . Those who prefer to type commands can use the below command
PHP:
cd ~//lineage
Once I had made sure that I was in the newly created lineage folder I moved ahead.
Step 8: Now i was required to configure my Git user
PHP:
git config --global user.name "Your Name"
git config --global user.email "[email protected]"
I replaced the text within the " " with my creadentials, which I had created on https://github.com/
Step 9: Now we moved on to initializing the repo
PHP:
repo init -u [url]https://github.com/LineageOS/android.git[/url] -b lineage-15.1
A successful initialization showed a message stating that Repo is initialized in your working directory. The lineage directory now contain a .repo folder. To check hidden folder I used control + H key.
Step 8: Download the source code
This is the step where you will realize the importance of having a fast internet connection. The source code size is about 30 – 35 GB. I have a 10 mbps line and at times the download speed shoots up to 20- 25 mbps!!!* Yet it takes me anything from 4 – 10 hours to download the entire code!
My suggestion is check the time when your local ISP download speeds are at its best. For me it is during the night. I set the download up at night and go to sleep!
The command to get the source code is :
PHP:
repo sync -c -f --force-sync --no-clone-bundle --no-tags --optimized-fetch –prune
Optional Step 8 a: Making a backup of your source code
I copied the entire folder and kept a copy on an external device. This is just in case there is any need for me to format my hard disk. While copying I do not copy the .Repo and .Cache folders on to my backup. To check hidden folders press control + H keys.
Step 9: Get the source code for your specific device.
This is where I was stuck numerous times. As I understood the code which was downloaded is generic in nature. For your particular device you would need to get files which are specific to your device.
The source for all these files is github. You are targeting three sets of folders – Device, Kernel and vendor.
The git clone commands given below are for the tissot or Xiaomi MiA1 phone. Similarly other phones have their locations on GitHub from where you can get files specific to them.
PHP:
git clone [url]https://github.com/TheScarastic/andr...msm8953-common[/url] -b lineage-15.1 device/xiaomi/msm8953
git clone [url]https://github.com/TheScarastic/andr..._xiaomi_tissot[/url] -b lineage-15.1 device/xiaomi/tissot
git clone [url]https://github.com/TheScarastic/prop..._vendor_xiaomi[/url] -b lineage-15.1 vendor/xiaomi
git clone [url]https://github.com/Tissot-Developmen..._xiaomi_tissot[/url] -b 8.1 kernel/xiaomi/msm8953
Step 10: Modify Caching to speed up the build process.
PHP:
export CCACHE_DIR=./.ccache
ccache -C
export USE_CCACHE=1
export CCACHE_COMPRESS=1
prebuilts/misc/linux-x86/ccache/ccache -M 50G
Step 11: Configure JACK
JACK is the java compiler and can cause crashes – believe me! A simple fix is this command which you type next
PHP:
export _JACK_VM_ARGS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4G"
Step 12: Cleaning up the build folder
PHP:
make clean
Step 13: Initializing the build
PHP:
source build/envsetup.sh
Step 14: Starting the build
PHP:
croot
brunch tissot
Watching the build on the screen is an interesting phase. It can get a bit tedious. In my case it took about 3 hours to complete the build. There were numerous errors that were thrown up. Files were declared as missing. After a couple of failures I realized I could search for them and then paste the file in the appropriate folders.
The one good thing about the build errors is googling for them usually gets you the right help. There would definitely be someone in some part of the world who would have run into a similar issue.
Finally after a 3 hour wait I got my zip file which when i flashed through TWRP on my MiA1. The sheer joy of having a ROM you created on your phone is indeed beyond words. It took me about a week of sitting for about ten to fifteen hours to get the various combination right, but believe me when I tell you the results are worth it.
My thanks to arunassain https://forum.xda-developers.com/member.php?u=6768248 from whose article I was able to understand the basics. He helped me with responses to my queries when I was stuck.
I further picked up from the excellent articles under the title Establishing a build Environment at https://source.android.com/setup/build/initializing
A great video that helped me was available on the topic How to build your own custom Android ROM at https://www.androidauthority.com/build-custom-android-rom-720453/
To check out the ROM's built for the MiA1 please click here
Now coming to the question if I have understood everything that is to learn about ROM development, well the answer is no. This was just the first build by a noob of a ROM which somehow worked. I have been using the ROM on my daily driver for the past one day and it is working perfectly. Having said that I still need to understand more of what happens behind the scenes in this wonder world of Custom ROM development.
Don't tell me you thought that you could build a rom on x86 processor/OS
Give him a break, he admitted that he is new to this building ROM world, I can understand that some people can think that if a proc is powerful enough they can use it to build no matter if it's a x64 or x86.
Thanks for you story mate! And don't hesitate to ask dev on telegrams or G+ to explain you some what you don't understand :good: I'm pretty sure that would love to finally have someone like you, who is truly interested in this whole world

Categories

Resources