[GUIDE] How To Compile Kernel & DTBO For Redmi K20 Pro - Redmi K20 Pro / Xiaomi Mi 9T Pro Guides, News, & D

Introduction :
I'm not an expert in kernel development, but would like to share the steps that I followed to build my kernel. If any of other kernel developers out there would like to add on some tips or correct something, please do!
Pre-requisites :
Ubuntu or any other Linux based OS
Stable Internet Connection
Patience
Step 1 : Setup Build Environment
Open the terminal and enter the following :
Code:
sudo apt-get install git ccache automake flex 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 maven libssl-dev \
pwgen libswitch-perl policycoreutils minicom libxml-sax-base-perl \
libxml-simple-perl bc libc6-dev-i386 lib32ncurses5-dev \
x11proto-core-dev libx11-dev lib32z-dev libgl1-mesa-dev xsltproc unzip
Step 2 : Download Required Files
Download device source :
Code:
git clone --depth=1 https://github.com/MiCode/Xiaomi_Kernel_OpenSource.git -b raphael-p-oss raphael-p-oss
Download a compatible GCC toolchain (Using AOSP's GCC for this guide) :
Code:
cd raphael-p-oss
git clone https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9 toolchain
Download a compatible CLANG toolchain (Using AOSP's CLANG for this guide) : Download
Move the downloaded file in the raphael-p-oss folder manually and then extract using the following command :
Code:
tar vxzf linux-x86-android-9.0.0_r48-clang-4691093.tar.gz
Download the device-tree-compiler attached below and place it in /usr/bin
Step 3 : Make device specific changes
Make these changes in the /kernel/module.c file.
If you are not familiar with github, you can check out many github guides available on XDA, for now you can just download the module.c file attached to this thread and replace the one in /kernel folder with the downloaded one!
Now, browse back to raphael-p-oss directory, and open the raphael_user_defconfig located in \arch\arm64\configs
Add the following lines :
Code:
CONFIG_BUILD_ARM64_DT_OVERLAY=y
CONFIG_MODULE_FORCE_LOAD=y
WIFI & Audio won't work if you don't make these changes, apparently Xiaomi decided to skip wlan & audio drivers in pie sources.
Step 4 : Building The Kernel
Code:
cd raphael-p-oss
rm -rf out
mkdir out
export ARCH=arm64
export SUBARCH=arm64
export DTC_EXT=dtc
make O=out ARCH=arm64 raphael_user_defconfig
PATH="${PWD}/bin:${PWD}/toolchain/bin:${PATH}" \
make -j$(nproc --all) O=out \
ARCH=arm64 \
CC=clang \
CLANG_TRIPLE=aarch64-linux-gnu- \
CROSS_COMPILE=aarch64-linux-android- | tee kernel.log
Step 5 : How To Get Help If You Encounter Errors
A kernel.log file will be generated in raphael-p-oss folder, find the line which says error.
If you can't figure out the solution, attach the kernel.log in your reply to this thread.
Step 6 : Booting The Kernel
Once you're done with Step 4, browse to /out/arch/arm64/boot & you'll find the Image-dtb file (compiled zImage)
Download the anykernel template for raphael from attachments and add your Image-dtb file to the archive.
Boot in TWRP, backup your stock kernel & flash the anykernel zip.
References :
Information on compiling Android kernels with Clang by nathanchance
How to compile kernel standalone by Xiaomi
Kernel Builder Virtual Machine & device specific changes by mslezak
AnyKernel3 Template by osm0sis
Wahoo Kernel Tools by frap129
Regards,
acervenky

Using QCom Clang To Compile Kernel [Xiaomi's Guide]
Step 1 : Setup Build Environment
Open the terminal and enter the following :
Code:
sudo apt-get install git ccache automake flex 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 maven libssl-dev \
pwgen libswitch-perl policycoreutils minicom libxml-sax-base-perl \
libxml-simple-perl bc libc6-dev-i386 lib32ncurses5-dev \
x11proto-core-dev libx11-dev lib32z-dev libgl1-mesa-dev xsltproc unzip
Step 2 : Download Required Files
Download device source :
Code:
git clone --depth=1 https://github.com/MiCode/Xiaomi_Kernel_OpenSource.git -b raphael-p-oss raphael-p-oss
Download a compatible GCC toolchain (Using AOSP's GCC for this guide) :
Code:
cd raphael-p-oss
git clone https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9 toolchain
Download a Qcom CLANG : Download
Move the downloaded file in the raphael-p-oss folder manually and then extract using the following command :
Code:
tar vxzf snapdragon-llvm-compiler-android-linux64-609.tar.gz
Download the device-tree-compiler attached below and place it in /usr/bin
Step 3 : Make device specific changes
Make these changes in the /kernel/module.c file.
If you are not familiar with github, you can check out many github guides available on XDA, for now you can just download the module.c file attached to this thread and replace the one in /kernel folder with the downloaded one!
Now, browse back to raphael-p-oss directory, and open the raphael_user_defconfig located in \arch\arm64\configs
Add the following lines :
Code:
CONFIG_BUILD_ARM64_DT_OVERLAY=y
CONFIG_MODULE_FORCE_LOAD=y
WIFI & Audio won't work if you don't make these changes, apparently Xiaomi decided to skip wlan & audio drivers in pie sources.
Step 4 : Building The Kernel
Code:
cd raphael-p-oss
rm -rf out
mkdir out
export ARCH=arm64
export SUBARCH=arm64
export DTC_EXT=dtc
export CROSS_COMPILE=${PWD}/toolchain/bin/aarch64-linux-android-
make O=out REAL_CC=${PWD}/toolchains/llvm-Snapdragon_LLVM_for_Android_6.0/prebuilt/linux-x86_64/bin/clang CLANG_TRIPLE=aarch64-linux-gnu- raphael_user_defconfig
make -j$(nproc) O=out REAL_CC=${PWD}/toolchains/llvm-Snapdragon_LLVM_for_Android_6.0/prebuilt/linux-x86_64/bin/clang CLANG_TRIPLE=aarch64-linux-gnu- 2>&1 | tee kernel.log
Step 5 : How To Get Help If You Encounter Errors
A kernel.log file will be generated in raphael-p-oss folder, find the line which says error.
If you can't figure out the solution, attach the kernel.log in your reply to this thread.
Step 6 : Booting The Kernel
Once you're done with Step 4, browse to /out/arch/arm64/boot & you'll find the Image-dtb file (compiled zImage)
Download the anykernel template for raphael from attachments and add your Image-dtb file to the archive.
Boot in TWRP, backup your stock kernel & flash the anykernel zip.
This method is mentioned in Xiaomi's Wiki, you can choose any according to your preference!
Regards,
acervenky

How To Compile Custom DTBO
DTBO files have been used on our device primarily to change the refresh rates.
Pre-requisites :
Compiled kernel without any errors
Step 1 : Download Required Files
Download libufdt utils from this link.
Open the terminal in the downloaded file's location.
Code:
tar vxzf libufdt-master-utils.tar.gz
Step 2 : Compile dtbo.img
Code:
cd libufdt-master-utils/src
python mkdtboimg.py create /home/user/raphael-p-oss/out/arch/arm64/boot/dtbo.img /home/user/raphael-p-oss/out/arch/arm64/boot/dts/qcom/*.dtbo
Step 3 : Flash The Compiled dtbo.img
The compiled dtbo.img file will be located in /raphael-p-oss/out/arch/arm64/boot/ (same output folder of zImage)
Backup your stock dtbo.img and flash the newly compiled dtbo.img
References :
Kernel Builder by mslezak
Regards,
acervenky

reserved3

Nice guide bro...

acervenky said:
Introduction :
I'm not an expert in kernel development, but would like to share the steps that I followed to build my kernel. If any of other kernel developers out there would like to add on some tips or correct something, please do!
Regards,
acervenky
Click to expand...
Click to collapse
awesome guide bro. I will try with my free time. Thanks

Quick question, would the same procedure work for Mi 9T Pro EEA?
I'd like to take a look in that DTBO.img
The phone runs the European Rom and the device ID is the Raphael_EEA.
Thanks in advance!!

acervenky said:
DTBO files have been used on our device primarily to change the refresh rates.
Pre-requisites :
Compiled kernel without any errors
Step 1 : Download Required Files
Download libufdt utils from this link.
Open the terminal in the downloaded file's location.
Step 2 : Compile dtbo.img
Step 3 : Flash The Compiled dtbo.img
The compiled dtbo.img file will be located in /raphael-p-oss/out/arch/arm64/boot/ (same output folder of zImage)
Backup your stock dtbo.img and flash the newly compiled dtbo.img
References :
Kernel Builder by mslezak
Regards,
acervenky
Click to expand...
Click to collapse
Do you have any idea how the display OC mod was done? If you understand it, it would be great if you shared that information, the more people know, more chances of improving it

Build failed
Made no modification, followed your steps exactly, after about 7-10mins of compiling I got this error in terminal:
Code:
make[1]: Leaving directory '/home/rituj/raphael-p-oos/out'
make: *** [sub-make] Error 2
Makefile:146: recipe for target 'sub-make' failed
After searching "error" it only returned a couple of modules that had "error" in their names.
attached the kernel.log

rituj_b said:
Made no modification, followed your steps exactly, after about 7-10mins of compiling I got this error in terminal:
Code:
make[1]: Leaving directory '/home/rituj/raphael-p-oos/out'
make: *** [sub-make] Error 2
Makefile:146: recipe for target 'sub-make' failed
After searching "error" it only returned a couple of modules that had "error" in their names.
attached the kernel.log
Click to expand...
Click to collapse
DTC Compile error, uninstall any pre-installed DTC and use the one provided in attachments!
Regards,
acervenky

acervenky said:
DTC Compile error, uninstall any pre-installed DTC and use the one provided in attachments!
Regards,
acervenky
Click to expand...
Click to collapse
Replaced dtc file with attached in post. Got the same error. Kernel.log in attachment
nevermind, changed permissions on dtc in /usr/bin
Build finished with this log

pemaster said:
Replaced dtc file with attached in post. Got the same error. Kernel.log in attachment
nevermind, changed permissions on dtc in /usr/bin
Build finished with this log
Click to expand...
Click to collapse
Got it to boot?
Regards,
acervenky

acervenky said:
Got it to boot?
Regards,
acervenky
Click to expand...
Click to collapse
Not yet. Need to flash pie miui first because I am on q now.

Hey acervenky I saw you used my same defconfig for F2FS and the same F2FS zip on your repo, but I compiled for a buddy of mine (Mi9T Pro EEA) and it refuses to boot F2FS? Did you change anything else? Head scratching here why it works on a Mi9 and your QUAX but not when I build this way. Thanks.

mslezak said:
Hey acervenky I saw you used my same defconfig for F2FS and the same F2FS zip on your repo, but I compiled for a buddy of mine (Mi9T Pro EEA) and it refuses to boot F2FS? Did you change anything else? Head scratching here why it works on a Mi9 and your QUAX but not when I build this way. Thanks.
Click to expand...
Click to collapse
Upstreamed F2FS, arter has a post dedicated to this maybe you can check that out?
Regards,
acervenky

after compile i found some error on kernel.log
DTC arch/arm64/boot/dts/qcom/apq8016-sbc.dtb
scripts/Makefile.lib:325: recipe for target 'arch/arm64/boot/dts/qcom/apq8016-sbc.dtb' failed
../scripts/Makefile.build:678: recipe for target 'arch/arm64/boot/dts/qcom' failed
arch/arm64/Makefile:184: recipe for target 'dtbs' failed
CC lib/iomap_copy.o

Xeniel768 said:
after compile i found some error on kernel.log
DTC arch/arm64/boot/dts/qcom/apq8016-sbc.dtb
scripts/Makefile.lib:325: recipe for target 'arch/arm64/boot/dts/qcom/apq8016-sbc.dtb' failed
../scripts/Makefile.build:678: recipe for target 'arch/arm64/boot/dts/qcom' failed
arch/arm64/Makefile:184: recipe for target 'dtbs' failed
CC lib/iomap_copy.o
Click to expand...
Click to collapse
Did you use the DTC attached to the OP?
If you're still facing issues try changing the permissions to 755 & try again.
Regards,
acervenky

acervenky said:
Did you use the DTC attached to the OP?
If you're still facing issues try changing the permissions to 755 & try again.
Regards,
acervenky
Click to expand...
Click to collapse
yea, i use dtc from attachment but still error
i already upload some log and screenshot link below
*drive.google*com/open?id=1YRZ912cDuWCGNlyfQXQKyfnEpl_2eJNi

Xeniel768 said:
yea, i use dtc from attachment but still error
i already upload some log and screenshot link below
*drive.google*com/open?id=1YRZ912cDuWCGNlyfQXQKyfnEpl_2eJNi
Click to expand...
Click to collapse
Checked out your screenshots, seems like you placed the dtc inside the source folder.
Placing it in root/usr/bin will fix your error!
Regards,
acervenky

nice guide.

Related

[AS AT 04/08][AOSP/CM7/ICS/CM9][GUIDE]Wanna try compiling for Galaxy Ace?

Hello everyone yet again
Info: This also works for CM7 , just that the Cooper repo is already natively included in the files and folders , so you can skip step 2.5
I'm creating a new thread for all those people who know a little bit of code but don't know what to do to compile for Galaxy Ace (AOSP or CM7).
THANKS TO http://source.android.com and http://wiki.cyanogenmod.com
32-bit computers are not recommended to compile Gingerbread and above versions!
For now, I'll cover AOSP. (I'll show a CM7 guide once I learn how to compile it)
Alright, to compile Gingerbread AOSP you'll need a computer that has:
-At least an Intel Core i3 at 2.4Ghz or a similar AMD processor
-4GB RAM (my RAM speeds are at 1333Mhz). If lesser RAM, then swap is needed (for 2GB RAM use 15GB swap, that what I used before)
-40GB Partition for single compilation or 80GB for multiple versions (NOT including Ubuntu installation)
-Ubuntu 10.04 LTS OR Mac OSX 10.6 (other versions of Ubuntu, including 09.10 or lower or 10.10 or higher, may not work as well as 10.04)(Same thing goes for Snow Leopard, Lion has certain problems)
Here's how to compile for Gingerbread:
Step 1: Setting up the build environment.
Linux:
In general you will need:
-Python 2.4 - 2.7
-JDK 6 if you wish to build Gingerbread or newer; JDK 5 for Froyo or older.
-Git 1.7 or newer.
To install Sun JDK 6 do the following:
Code:
$ sudo add-apt-repository "deb http://archive.canonical.com/ lucid partner"
$ sudo apt-get update
$ sudo apt-get install sun-java6-jdk
You will also need to install certain packages:
For 64-bit computers:
Code:
$ sudo apt-get install git-core gnupg flex bison gperf build-essential \
zip curl zlib1g-dev libc6-dev lib32ncurses5-dev ia32-libs \
x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev \
libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown \
libxml2-utils
For 32-bit computers (experimental):
Code:
$ sudo apt-get install git-core gnupg flex bison gperf build-essential \
zip curl zlib1g-dev libc6-dev libncurses5-dev x11proto-core-dev \
libx11-dev libreadline6-dev libgl1-mesa-dev tofrodos python-markdown \
libxml2-utils
(***NOTE: I've gotten errors when trying to apt-get install lib32ncurses5-dev.)
IF you're on Ubuntu 11.10 you might need to do this:
Code:
$ sudo ln -s /usr/lib/i386-linux-gnu/libX11.so.6 /usr/lib/i386-linux-gnu/libX11.so
Now for OSX (taken from http://source.android.com):
To build the Android files in a Mac OS environment, you need an Intel/x86 machine running MacOS 10.6 (Snow Leopard).
Android must be built on a case-sensitive file system because the sources contain files that differ only in case. We recommend that you build Android on a partition that has been formatted with the journaled file system HFS+. HFS+ is required to successfully build Mac OS applications such as the Android Emulator for OSX.
If you want to avoid partitioning/formatting your hard drive, you can use a case-sensitive disk image instead. To create the image, launch Disk Utility and select "New Image". A size of 25GB is the minimum to complete the build, larger numbers are more future-proof. Using sp**** images saves space while allowing to grow later as the need arises. Be sure to select "case sensitive, journaled" as the volume format.
You can also create it with this:
Code:
# hdiutil create -type SP**** -fs 'Case-sensitive Journaled HFS+' -size Xg ~/android.dmg
Where "X" is how big your image will be (in GB).
This will create a .dmg (or possibly a .dmg.sp****file) file which, once mounted, acts as a drive with the required formatting for Android development. For a disk image named "android.dmg" stored in your home directory, you can add the following to your ~/.bash_profile to mount the image when you execute "mountAndroid":
Code:
# mount the android file image
function mountAndroid { hdiutil attach ~/android.dmg -mountpoint /Volumes/android; }
Once mounted, you'll do all your work in the "android" volume. You can eject it (unmount it) just like you would with an external drive.
Installing required packages:
-Install XCode from the Apple developer site. We recommend version 3.1.4 or newer, i.e. gcc 4.2. Version 4.x could cause difficulties. If you are not already registered as an Apple developer, you will have to create an Apple ID in order to download.
-MacPorts from http://macports.org
Note: Make sure that /opt/local/bin appears in your path BEFORE /usr/bin. If not, add:
Code:
export PATH=/opt/local/bin:$PATH
to your ~/.bash_profile.
-Get make, git, and GPG packages from MacPorts:
Code:
$ POSIXLY_CORRECT=1 sudo port install gmake libsdl git-core gnupg
If you're on MacOS 10.4, install bison too:
Code:
$ POSIXLY_CORRECT=1 sudo port install bison
Bugs and fixes:
-Reverting from gmake3.82:
There is a bug in gmake 3.82 that prevents android from building. You can install version 3.81 using MacPorts by taking the following steps:
-Edit /opt/local/etc/macports/sources.conf and add a line that says:
Code:
file:///Users/Shared/dports
above the rsync line. Then make this directory:
Code:
$ mkdir /Users/Shared/dports
-In the new dports directory, run:
Code:
$ svn co --revision 50980 http://svn.macports.org/repository/macports/trunk/dports/devel/gmake/ devel/gmake/
-Create a port index for your new local repository:
Code:
$ portindex /Users/Shared/dports
-Finally, install the old version of gmake with:
Code:
$ sudo port install gmake @3.81
-Setting a file descriptor limit:
On MacOS the default limit on the number of simultaneous file descriptors open is too low and a highly parallel build process may exceed this limit.
To increase the cap, add the following lines to your ~/.bash_profile:
Code:
# set the number of open files to be 1024
ulimit -S -n 1024
Your Linux/MacOS build environment is now complete, moving on to downloading....
Step 2: Downloading the source
You'll need to use repo to download sources from repositories.
Here's how I did it:
-Make a /bin directory in your home directory and it must be in your PATH:
Code:
$ mkdir ~/bin
$ PATH=~/bin:$PATH
-Download the Repo script and ensure that it can be executed:
Code:
$ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
$ chmod a+x ~/bin/repo
Now that downloading repo is done and executable, we need to initialise it.
Create an empty directory for where all your Android files will be downloaded, stored and made:
Code:
$ mkdir WORKING_DIRECTORY
$ cd WORKING_DIRECTORY
Where WORKING_DIRECTORY can be any name you want (as long as it has no spaces)
Use repo init to grab the latest branch (or rather, the gingerbread branch)
Code:
$ repo init -u https://android.googlesource.com/platform/manifest -b android-x.x.x_r1
Where "x" can be 2.3, 2.3.1, 2.3.2, 2.3.3, 2.3.4, 2.3.5, 2.3.6 or 2.3.7.
For now use the versions that the Galaxy Ace currently has (2.3.3-2.3.5 and 2.3.7)
Optional step:
When prompted, please configure Repo with your real name and email address. To use the Gerrit code-review tool, you will need an email address that is connected with a registered Google account. Make sure this is a live address at which you can receive messages. The name that you provide here will show up in attributions for your code submissions.
Click to expand...
Click to collapse
Once you're done with that, you'll need to download them.
This simple 8-character command is easy to execute but it'll be hard on your internet connection:
Code:
$ repo sync
Ensure that you have at least 5Mbps of internet if you want it completed in a day.
Once you're done syncing, use this code:
Code:
$ gpg --import
To sign what you've downloaded.
Once you entered that, copy and paste this long line of ****:
Code:
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.2.2 (GNU/Linux)
mQGiBEnnWD4RBACt9/h4v9xnnGDou13y3dvOx6/t43LPPIxeJ8eX9WB+8LLuROSV
lFhpHawsVAcFlmi7f7jdSRF+OvtZL9ShPKdLfwBJMNkU66/TZmPewS4m782ndtw7
8tR1cXb197Ob8kOfQB3A9yk2XZ4ei4ZC3i6wVdqHLRxABdncwu5hOF9KXwCgkxMD
u4PVgChaAJzTYJ1EG+UYBIUEAJmfearb0qRAN7dEoff0FeXsEaUA6U90sEoVks0Z
wNj96SA8BL+a1OoEUUfpMhiHyLuQSftxisJxTh+2QclzDviDyaTrkANjdYY7p2cq
/HMdOY7LJlHaqtXmZxXjjtw5Uc2QG8UY8aziU3IE9nTjSwCXeJnuyvoizl9/I1S5
jU5SA/9WwIps4SC84ielIXiGWEqq6i6/sk4I9q1YemZF2XVVKnmI1F4iCMtNKsR4
MGSa1gA8s4iQbsKNWPgp7M3a51JCVCu6l/8zTpA+uUGapw4tWCp4o0dpIvDPBEa9
b/aF/ygcR8mh5hgUfpF9IpXdknOsbKCvM9lSSfRciETykZc4wrRCVGhlIEFuZHJv
aWQgT3BlbiBTb3VyY2UgUHJvamVjdCA8aW5pdGlhbC1jb250cmlidXRpb25AYW5k
cm9pZC5jb20+iGAEExECACAFAknnWD4CGwMGCwkIBwMCBBUCCAMEFgIDAQIeAQIX
gAAKCRDorT+BmrEOeNr+AJ42Xy6tEW7r3KzrJxnRX8mij9z8tgCdFfQYiHpYngkI
2t09Ed+9Bm4gmEO5Ag0ESedYRBAIAKVW1JcMBWvV/0Bo9WiByJ9WJ5swMN36/vAl
QN4mWRhfzDOk/Rosdb0csAO/l8Kz0gKQPOfObtyYjvI8JMC3rmi+LIvSUT9806Up
hisyEmmHv6U8gUb/xHLIanXGxwhYzjgeuAXVCsv+EvoPIHbY4L/KvP5x+oCJIDbk
C2b1TvVk9PryzmE4BPIQL/NtgR1oLWm/uWR9zRUFtBnE411aMAN3qnAHBBMZzKMX
LWBGWE0znfRrnczI5p49i2YZJAjyX1P2WzmScK49CV82dzLo71MnrF6fj+Udtb5+
OgTg7Cow+8PRaTkJEW5Y2JIZpnRUq0CYxAmHYX79EMKHDSThf/8AAwUIAJPWsB/M
pK+KMs/s3r6nJrnYLTfdZhtmQXimpoDMJg1zxmL8UfNUKiQZ6esoAWtDgpqt7Y7s
KZ8laHRARonte394hidZzM5nb6hQvpPjt2OlPRsyqVxw4c/KsjADtAuKW9/d8phb
N8bTyOJo856qg4oOEzKG9eeF7oaZTYBy33BTL0408sEBxiMior6b8LrZrAhkqDjA
vUXRwm/fFKgpsOysxC6xi553CxBUCH2omNV6Ka1LNMwzSp9ILz8jEGqmUtkBszwo
G1S8fXgE0Lq3cdDM/GJ4QXP/p6LiwNF99faDMTV3+2SAOGvytOX6KjKVzKOSsfJQ
hN0DlsIw8hqJc0WISQQYEQIACQUCSedYRAIbDAAKCRDorT+BmrEOeCUOAJ9qmR0l
EXzeoxcdoafxqf6gZlJZlACgkWF7wi2YLW3Oa+jv2QSTlrx4KLM=
=Wi5D
-----END PGP PUBLIC KEY BLOCK-----
Paste it into your terminal and press Ctrl+D.
You now have a complete local copy of the Android codebase.
Step 2.5: Include the Samsung COOPER source for compilation (AOSP only)
Yes, this has to be done so you can compile for cooper (Samsung Galaxy Ace).
-Navigate the terminal to the ~/WORKING_DIRECTORY/device/samsung folder:
Code:
$ cd ~/WORKING_DIRECTORY/device/samsung
Where WORKING_DIRECTORY = your android folder
-Make use of git to clone a folder from PabloPL's GitHub:
Code:
$ git clone git://github.com/PabloPL/android_device_samsung_cooper
Once it's done, you should see a folder with that name in the root of your working directory. Rename it to "cooper" and cut & paste it to device/samsung.
Download the Android SDK Tools and make sure you set ADB correctly to be in your PATH.
For more info and how-to steps go here: http://www.lineardroid.co.uk/2010/04/how-to-set-up-adb-in-ubuntu/
Once you're done setting up ADB, go to the cooper folder and run extract-files.sh in the terminal.
ADB should pull some files from your device and automatically close the terminal. (You might need to be in CM7 for ADB to successfully pull all libs, I may be wrong though. Someone test it and tell me if it works)
Now we're done for now.
Oh yes, before I forget:
Have a copy of CM7 before you build!
AOSP does not fully support ARMv6 devices and therefore uneeded errors may arise, so the CM7 files can save you.
Step 3: Building Android (most exciting/boring part)
Initialize the environment with the envsetup.sh script.
Code:
$ . build/envsetup.sh
Choose your target to build with lunch.
Code:
$ lunch cooper-eng
(***NOTE: Change full_base.mk in device_cooper.mk to full.mk) (AOSP only)
(***NOTE2: There'll be another error about an unknown architecture: ARMv6-VFP. That's where your CM7 files come in handy.) (AOSP only)
Build everything with make. GNU make can handle parallel tasks with a -jN argument, and it's common to use a number of tasks N that's between 1 and 2 times the number of hardware threads on the computer being used for the build. E.g. on a dual-E5520 machine (2 CPUs, 4 cores per CPU, 2 threads per core), the fastest builds are made with commands between make -j16 and make -j32.
I usually use this (thanks to cdesai):
Code:
$ make -j8 update-api
$ make -j8 otapackage
OR:
Code:
$ make -j16 update-api
$ make -j16 otapackage
Do have patience because your computer will get inevitably laggy.
Once you're done debugging all errors and stuff you will have a flashable .zip located in WORKING_DIRECTORY/out/target/cooper.
Thanks for reading this whole chunk, though I know it's an XDA App eyesore.
If you do encounter errors feel free to ask here
Alright, now you've built AOSP and CM7 and you love it, what next?
Ice Cream Sandwich *insert holy choir here*
Requirements (they are much more different now):
A computer that's capable of 64-bit
A dual-core processor of a speed of at least 2.2Ghz (Intel Xeon/Core i7 recommended)
Either Ubuntu 10.04 LTS 64-bit (later versions have experimental support) but if you're using a later version that's fine.
Or Mac OSX 10.6
At least 8GB of RAM and 10~GB swap maybe? (Otherwise you could have 4Gb of RAM and ~20GB swap this time)
At least a 70GB partition for Ubuntu (to make sure there is space for compiling + installing required stuff)
Well, here are the steps to build it:
Instructions (Taken from http://source.android.com/source/initializing.html & http://wiki.cyanogenmod.com/wiki/Android_SDK_Emulator:_Compile_CyanogenMod_(Linux)):
---------ONLY FOR UBUNTU 10.10--12.04---------
Chapter 1: Initializing a Build Environment
This section describes how to set up your local work environment, how to use Repo to get the Android files, and how to build the files on your machine. To build the Android source files, you will need to use Linux or Mac OS. Building under Windows is not currently supported.
Note: The source download is approximately 6GB in size. You will need 25GB free to complete a single build, and up to 90GB (or more) for a full set of builds.
Section 1 (Linux/Ubuntu): Setting up a Linux build environment
The Android build is routinely tested in house on recent versions of Ubuntu LTS (10.04), but most distributions should have the required build tools available. Reports of successes or failures on other distributions are welcome.
Note: It is also possible to build Android in a virtual machine. If you are running Linux in a virtual machine, you will need at least 16GB of RAM/swap and 30GB or more of disk space in order to build the Android tree.
In general you will need:
Python 2.5 -- 2.7.
GNU Make 3.81 -- 3.82.
JDK 6 if you wish to build Gingerbread or newer; JDK 5 for Froyo or older.
Git 1.7 or newer.
Detailed instructions for Ubuntu 10.04+ follow.
Step 1: Installing the JDK
The Sun JDK is no longer in Ubuntu's main package repository. In order to download it, you need to add the appropriate repository and indicate to the system which JDK should be used.
To download Java 6, do this:
Code:
$ sudo add-apt-repository "deb http://archive.canonical.com/ lucid partner"
$ sudo apt-get update
$ sudo apt-get install sun-java6-jdk
Note: The lunch command in the build step will ensure that the Sun JDK is used instead of any previously installed JDK.
Alternatively you can follow eoghan2t7's instructions:
eoghan2t7 said:
as you may no the Java JDK has been removed from the ubuntu ppa so i have uploaded the jdk deb file for users to use and to skip the sudo apt-get install java_jdk command
link
http://www.mediafire.com/?b57gqo7t46k1ibc
Click to expand...
Click to collapse
Or bs828's instructions:
bs828 said:
I'm currently out will do later
Edit: im on 12.0.4 and this seemed to work http://www.devsniper.com/ubuntu-12-04-install-sun-jdk-6-7/
Click to expand...
Click to collapse
Step 2: Installing required packages (Ubuntu 10.04 -- 11.10)
You will need a 64-bit version of Ubuntu. Ubuntu 10.04 is recommended. Building using a newer version of Ubuntu is currently only experimentally supported and is not guaranteed to work on Git branches other than master (http://github.com/android).
To install the required packages, do this:
Code:
$ sudo apt-get install git-core gnupg flex bison gperf build-essential \
zip curl zlib1g-dev libc6-dev lib32ncurses5-dev ia32-libs \
x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev \
libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown \
libxml2-utils xsltproc
---------ONLY FOR UBUNTU 10.10--11.10---------
For Ubuntu 10.10 users, do this as well:
Code:
$ sudo ln -s /usr/lib32/mesa/libGL.so.1 /usr/lib32/mesa/libGL.so
Note: This is used to avoid a compile error with libGL later on.
For Ubuntu 11.10 users, do this:
Code:
$ sudo apt-get install libx11-dev:i386
---------END FOR UBUNTU 10.10--11.10---------
----------ONLY FOR UBUNTU 12.04----------
Step 2: Installing required packages (Ubuntu 12.04)
Building on Ubuntu 12.04 is currently only experimentally supported and is not guaranteed to work on branches other than master.
To install the required packages, do this:
Code:
$ sudo 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 tofrodos python-markdown \
libxml2-utils xsltproc zlib1g-dev:i386
---------END FOR UBUNTU 10.10--12.04---------
I won't do MacOSX for ICS, mainly because it has a very unstable success chance of compilation.
Your build environment is good to go! Proceed to
Chapter 2: Downloading the Source Tree
Section 1: Repo
Repo is a tool that makes it easier to work with Git in the context of Android.
It is also a tool that allows you to download source files from Android easily.
Step 1: Installing Repo
To install, initialize, and configure Repo, follow these steps:
Make sure you have a bin/ directory in your home directory, and that it is included in your path:
Code:
$ mkdir ~/bin
$ PATH=~/bin:$PATH
Download the Repo script and ensure it is executable:
Code:
$ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
$ chmod a+x ~/bin/repo
For version 1.15, the SHA-1 checksum for repo is 8eb56d98b36d615c3efec51868e87bebe757feb1
For version 1.16, the SHA-1 checksum for repo is f3bfa7fd2d0a44aa40579bb0242cc20df37b5e17
Step 2: Initializing a Repo client
After installing Repo, set up your client to access the android source repository:
Create an empty directory to hold your working files. If you're using MacOS, this has to be on a case-sensitive filesystem. Give it any name you like:
Code:
$ mkdir I_HATE_STEVE
$ cd I_HATE_STEVE
Run repo init to bring down the latest version of Repo with all its most recent bug fixes. You must specify a URL for the manifest, which specifies where the various repositories included in the Android source will be placed within your working directory.
For AOSP:
Code:
$ repo init -u https://android.googlesource.com/platform/manifest -b android-4.1.1_r1
or
Code:
$ repo init -u https://android.googlesource.com/platform/manifest -b android-4.1.1_r2
or
Code:
$ repo init -u https://android.googlesource.com/platform/manifest -b android-4.1.1_r3
or even
Code:
$ repo init -u https://android.googlesource.com/platform/manifest -b ics-plus-aosp
For CM9:
Code:
$ repo init -u git://github.com/CyanogenMod/android.git -b ics
When prompted, please configure Repo with your real name and email address. To use the Gerrit code-review tool, you will need an email address that is connected with a registered Google account. Make sure this is a live address at which you can receive messages. The name that you provide here will show up in attributions for your code submissions.
A successful initialization will end with a message stating that Repo is initialized in your working directory. Your client directory should now contain a .repo directory where files such as the manifest will be kept.
Step 3: Getting the files
To pull down files to your working directory from the repositories as specified in the default manifest, run
Code:
$ repo sync
The Android source files will be located in your working directory under their project names. The initial sync operation will take an hour or more to complete, depending on your Internet bandwidth.
Note: If you initialize your repo on your root area for all projects, the time for downloading will decrease
If you haven't set up ccache now, now is a good time to set it up.
Chapter 2.5 (AOSP only): Downloading the various device specific configurations from GitHub
Now that you have a full copy of AOSP, you will realise that inside your working directory/device you will only see only a few device configurations. That's because AOSP only supports those devices and you will need to manually download other devices for use with AOSP.
You can either adapt from MaclawStudios' repo of the Galaxy Gio: https://github.com/MaclawStudios/android_device_samsung_gio
Or make an ICS device config yourself.
Meanwhile PabloPL has made an ICS branch here, but currently nothing is being worked on, as it seems.
Chapter 3: Building the System
The basic sequence of build commands is as follows:
Step 1: Initialize
Initialize the environment with the envsetup.sh script. Note that replacing "source" with a single dot saves a few characters, and the short form is more commonly used in documentation.
Either:
Code:
$ source build/envsetup.sh
or
Code:
$ . build/envsetup.sh
Step 2: Choose a target
Choose which target to build with lunch. The exact configuration can be passed as an argument, e.g.
Code:
$ lunch full-eng
The example above refers to a complete build for the emulator, with all debugging enabled.
If run with no arguments lunch will prompt you to choose a target from the menu.
Step 3: Build the Code
Build everything with make. GNU make can handle parallel tasks with a -jN argument, and it's common to use a number of tasks N that's between 1 and 2 times the number of hardware threads on the computer being used for the build. E.g. on a dual-E5520 machine (2 CPUs, 4 cores per CPU, 2 threads per core), the fastest builds are made with commands between make -j16 and make -j32.
If you are using a dual-core computer do either of these:
Code:
make -j2
or
Code:
make -j4
It is usually recommended that you make the -jN amount twice the number of cores your processor has.
Therefore if you have a quad-core processor do this:
Code:
make -j4
or
Code:
make -j8
There are different ways to run make:
Code:
$ make clean
or
Code:
$ make clobber
Cleans the compile directory and deletes all compiled files.
Code:
$ make update-api
Makes part of the framework, usually used to update the API.
Code:
make otapackage
Makes a flashable .zip file, as otapackage = Over The Air package.
Code:
make (app name, like framework-res)
Makes the specified app and the .apk will be compiled in the output directory.
Once you finish make, you are done! Congratulations!
Chapter 4: Troubleshooting Common Build Errors
Sometimes, things don't go as planned such as unexpected build errors. Here are some solutions to common problems:
Section 1: Wrong Java Version
If you are attempting to build froyo or earlier with Java 1.6, or gingerbread or later with Java 1.5, make will abort with a message such as
Code:
************************************************************
You are attempting to build with the incorrect version
of java.
Your version is: WRONG_VERSION.
The correct version is: RIGHT_VERSION.
Please follow the machine setup instructions at
https://source.android.com/source/download.html
************************************************************
This may be caused by:
failing to install the correct JDK as specified on the Initializing chapter. Building Android requires Sun JDK 5 or 6 depending on which release you are building.
another JDK that you previously installed appearing in your path. You can remove the offending JDK from your path with:
Code:
$ export PATH=${PATH/\/path\/to\/jdk\/dir:/}
Section 2: Python Version 3
Repo is built on particular functionality from Python 2.x and is unfortunately incompatible with Python 3. In order to use repo, please install Python 2.x:
Code:
$ apt-get install python
Optional Step: Setting up ccache
You can optionally tell the build to use the ccache compilation tool. Ccache acts as a compiler cache that can be used to speed-up rebuilds. This works very well if you do "make clean" often, or if you frequently switch between different build products.
Put the following in your .bashrc or equivalent.
Code:
$ export USE_CCACHE=1
By default the cache will be stored in ~/.ccache. If your home directory is on NFS or some other non-local filesystem, you will want to specify the directory in your .bashrc as well.
Code:
$ export CCACHE_DIR=
The suggested cache size is 50-100GB. You will need to run the following command once you have downloaded the source code, if you use CCache.
Code:
$ prebuilt/linux-x86/ccache/ccache -M 50G
Optional Step: Using a separate output directory
By default, the output of each build is stored in the out/ subdirectory of the matching source tree.
On some machines with multiple storage devices, builds are faster when storing the source files and the output on separate volumes. For additional performance, the output can be stored on a filesystem optimized for speed instead of crash robustness, since all files can be re-generated in case of filesystem corruption.
To set this up, export the OUT_DIR_COMMON_BASE variable to point to the location where your output directories will be stored.
Code:
export OUT_DIR_COMMON_BASE=
The output directory for each separate source tree will be named after the directory holding the source tree.
For instance, if you have source trees as /source/master1 and /source/master2 and OUT_DIR_COMMON_BASE is set to /output, the output directories will be /output/master1 and /output/master2.
It's important in that case to not have multiple source trees stored in directories that have the same name, as those would end up sharing an output directory, with unpredictable results.
This is only supported on branches newer than 4.0.x (IceCreamSandwich).
Wow dude. That's all I can say.
Woohoo, read through all that but I wont wanna try, and my comp is a piece of ****
Sent from my Galaxy Ace running J.A.F CM 7.2 Odexed using XDA App
MrChaosDesire said:
Woohoo, read through all that but I wont wanna try, and my comp is a piece of ****
Sent from my Galaxy Ace running J.A.F CM 7.2 Odexed using XDA App
Click to expand...
Click to collapse
Those are the recommended specs , not minimum
Wow nice tutorial Matt.but I can do nothing bcz i don't Know how to do coding lol...........
Sent from my GT-S5830 using xda premium
Lot of things to install, thanks for the tuto!
You never fail to impress buddy
Sent from my HTC Sensation XL with Beats Audio X315e using Tapatalk
traduz said:
Lot of things to install, thanks for the tuto!
Click to expand...
Click to collapse
Any errors occured ? Just post them in the thread .
Any solutions for unsolved errors ? Post them here too . Will update solutions
Sent from my GT-S5830 using XDA App
nice tut's bro..
Well i'm reading this day by day, just w8ing for money for a new computer lol, got one with 1gb only and freezes a lot with it =/
Thanks man, its gonna be my little anti-social project for tomorrow
Sent from my GT-S5830 using xda premium
Nice tut,Matt
thanks....everything clear from your tutorial......
one question : how much downloading will be done for AOSP and CM7 both....if i want to work on gingerbread
rocking.nitesh007 said:
thanks....everything clear from your tutorial......
one question : how much downloading will be done for AOSP and CM7 both....if i want to work on gingerbread
Click to expand...
Click to collapse
I think at least 50GB
thanx ...... will download it ill tke days .....
Sent from my GT-S5830 using XDA App
i have installed ubuntu 11 64bit in vmware .... does it affect when the rom ill be compling.....i use 3.2gb of 4gb ram in my virtual machine
Sent from my GT-S5830 using XDA App
rocking.nitesh007 said:
i have installed ubuntu 11 64bit in vmware .... does it affect when the rom ill be compling.....i use 3.2gb of 4gb ram in my virtual machine
Sent from my GT-S5830 using XDA App
Click to expand...
Click to collapse
If you're compiling gingerbread , there's no problem .
Sent from my GT-S5830 using XDA App
EmoBoiix3 said:
If you're compiling gingerbread , there's no problem .
Sent from my GT-S5830 using XDA App
Click to expand...
Click to collapse
thanks..... waiting for cm7 tut also ..... u guys rock
Sent from my GT-S5830 using XDA App
one more question .... what about 50GB .... i means i have read in different places somebody says its arnd 2GB of source of cm .. if u can specify dat would be great....
Sent from my GT-S5830 using XDA App

[HELP/Q&A][SourceBuilding,AllDevices] The Source Building Q&A Help Thread

I have been wandering around the question and answers forum for some time now...i noticed a thing that most of them who had errors building from source have been left un answered..
i assume the following reasons for this
1)no dev would really care to search through and help out
2)users are scared to pm dev's
3)their posts are getting lost due to no actiivity within seconds of posting
as a outcome of all the above
the user isn't getting help
so i thought of making a thread for just source build errors..
so this this thread will focus on providing answers for all the problems that you are facing while building from source......
now i would like the users to follow a format similar to this for reporting
1)A full error encountered (pastie or any similar site's
2)your device name
3)your device tree that you have used for compiling(github link)
4)which rom are you building(cm aokp etc)
5)The guide which you are using to build(link)
another kind request please spread the link for this thread as many may benefit from it....
and find developers who are interested in helping....
feel free to give suggestions....
Before you move ahead make sure you copy paste this into the terminal
32bit users(ics & below)
HTML:
sudo apt-get install git-core gnupg flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl libncurses5-dev zlib1g-dev valgrind squashfs-tools zip curl pngcrush schedtool ia32-libs x11proto-core-dev libx11-dev:i386 libreadline6-dev:i386 libwxgtk2.6-dev
64bit ( you need this in addition with 32bit packages)
HTML:
sudo apt-get install git-core gnupg flex bison gperf build-essential \
zip curl zlib1g-dev libc6-dev lib32ncurses5-dev ia32-libs \
x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev \
libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown \
libxml2-utils gcc-4.3-multilib g++-4.3-multilib g++-multilib
common build errors
HTML:
build/core/product_config.mk:196: *** _nic.PRODUCTS.[[device/YG/m805_892x/device_m805_892x.mk]]: "device/YG/m805_892x/m805_892x-vendor-blobs.mk" does not exist. Stop.
cause for problem
device_m805_892x.mk
Here in your device folder it is calling a make file which is required for compiling as in this case (device_m805_892x.mk) has a reference to
(device/YG/m805_892x/m805_892x-vendor-blobs.mk)
check if
(m805_892x-vendor-blobs.mk)
is there in vendors folder... as in this case this is not found ..
solution
1)remove the reference to that makefile..
2)check the path for makefile(these are case sensitive)
3)correct the makefile in vendor folder to match that in the makefile that has called it
2)
HTML:
make: *** No rule to make target `vendor/cm/proprietary/RomManager.apk', needed by `out/target/product/m805_892x/system/app/RomManager.apk'. Stop.
make: *** Waiting for unfinished jobs....
cause for the problem
Here the script is written to copy rommanager.apk to system app during the build process...
But the apk is missing which is stoping the make process
solution
cd into vendors/cm
then type this
HTML:
./get-prebuilts
IF some dev helps you out show your appreciation by using the thanks button
reserved 2
the last one reserved
dude, you rock..
anyways, im still building the same pac...since my initial build wouldn't boot, i decided to switch up some of the internals...
PHP:
build/core/base_rules.mk:171: *** frameworks/native/cmds/sensorservice: MODULE.TARGET.EXECUTABLES.sensorservice already defined by frameworks/base/cmds/sensorservice. Stop.
Ive asked this question so many times, im ready to go nuts...ive looked thru every file and i cant find where these are referenced...where do i redirect this? and any other that may error back the already defined?
Contribute :
So..... A great thread to help all the beginners and the developers ( as everybody are prone to make mistakes ) I'd like to help too
But at first.... With reference to the problems I've encountered so far from different users.. all tat i see is most of them forget to install the necessary packages that are required for the build....
I've made a general command tat would hold most of the packages that are required for the build
For 32 Bit :
Code:
sudo apt-get install git-core gnupg flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl libncurses5-dev zlib1g-dev valgrind squashfs-tools zip curl pngcrush schedtool ia32-libs x11proto-core-dev libx11-dev:i386 libreadline6-dev:i386 libwxgtk2.6-dev
For 64 Bit :
Code:
sudo apt-get install git-core gnupg flex bison gperf build-essential \
zip curl zlib1g-dev libc6-dev lib32ncurses5-dev ia32-libs \
x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev \
libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown \
libxml2-utils gcc-4.3-multilib g++-4.3-multilib g++-multilib
Ps : I'd add more as and when needed as we encounter new problems
---------- Post added at 10:49 AM ---------- Previous post was at 10:49 AM ----------
Reserved just in case
---------- Post added at 10:53 AM ---------- Previous post was at 10:49 AM ----------
cbucz24 said:
dude, you rock..
anyways, im still building the same pac...since my initial build wouldn't boot, i decided to switch up some of the internals...
PHP:
build/core/base_rules.mk:171: *** frameworks/native/cmds/sensorservice: MODULE.TARGET.EXECUTABLES.sensorservice already defined by frameworks/base/cmds/sensorservice. Stop.
Ive asked this question so many times, im ready to go nuts...ive looked thru every file and i cant find where these are referenced...where do i redirect this? and any other that may error back the already defined?
Click to expand...
Click to collapse
It would help us more to understand the problem if u could provide the device tree that u r using ( Github Link )
cbucz24 said:
dude, you rock..
anyways, im still building the same pac...since my initial build wouldn't boot, i decided to switch up some of the internals...
PHP:
build/core/base_rules.mk:171: *** frameworks/native/cmds/sensorservice: MODULE.TARGET.EXECUTABLES.sensorservice already defined by frameworks/base/cmds/sensorservice. Stop.
Ive asked this question so many times, im ready to go nuts...ive looked thru every file and i cant find where these are referenced...where do i redirect this? and any other that may error back the already defined?
Click to expand...
Click to collapse
it seems that a single service (sensorservice) is defined in two places your tree would help... and spread the word about this thread as it ma help many people out just a request...
your error is like your destination is x
and there are two paths leading to it and you are confused which one to take..
so it has stopped ok try deleting
frameworks/base/cmds/sensorservice
or
frameworks/native/cmds/sensorservice
(one of two not both
)
I would like to share some solution to some basic build problems. I did copy this from my own thread here:
http://forum.xda-developers.com/showthread.php?t=1935162
Fix problems... This the learning part.. Fun but can be really anoying to.
First i got my self:
make otatools did not work.
-Try make -j4 out/host/linux-x86/bin/unpackbootimg
-put "unpackbootimg" in ~/android/system/out/host/linux-x86/bin then i copy it to ~/usr/bin and set chmod.
Im did see a download if it some place. Google.
-copy unpackbootimg to into /usr/bin If it is there, make it executable.
make executable: sudo chmod a+x /usr/bin/unpackbootimg
-Run make clubber from The ICS folder. Than restart pc might help to.
Nother problem that i did run into trying to make ext4 images:
make_ext4fs -s -l 0x40000000 -a data out/target/product/m805_892x/userdata.img out/target/product/m805_892x/data
Need size of filesystem
make: *** [out/target/product/m805_892x/userdata.img] Error 4
make: *** Waiting for unfinished jobs..
The sizes need to be in bytes it seems.
make_ext4fs does not support hex in the -l argument
DD dump you´re partitions and you see the amount of bytes.
I put this in my BoardConfig.mk like this:
BOARD_USERDATAIMAGE_PARTITION_SIZE := 1073741824
Use this to finisch waiting jobs..:
make_ext4fs -s -l 1073741824 -a data out/target/product/m805_892x/userdata.img out/target/product/m805_892x/data
problem:
[email protected]:~/ICS$ make -j4 recoveryimage
build/core/product_config.mk:196: *** _nic.PRODUCTS.[[device/YG/m805_892x/device_m805_892x.mk]]: "device/YG/m805_892x/m805_892x-vendor-blobs.mk" does not exist. Stop.
The error is somewhare found in this file:
device_m805_892x.mk I used the original file and start adding things again.
Problem:
make: *** No rule to make target `vendor/cm/proprietary/RomManager.apk', needed by `out/target/product/m805_892x/system/app/RomManager.apk'. Stop.
make: *** Waiting for unfinished jobs....
Copy: out/target/product/m805_892x/system/bin/compcache
Copy: out/target/product/m805_892x/system/bin/handle_compcache
[email protected]:~/ICS$
For that use the terminal and cd to:
cd /vendor/cm
run:
./get-prebuilts
This will download the RomManager.apk and bit of other stuff.
[email protected] said:
I would like to share some solution to some basic build problems. I did copy this from my own thread here:
http://forum.xda-developers.com/showthread.php?t=1935162
Fix problems... This the learning part.. Fun but can be really anoying to.
First i got my self:
make otatools did not work.
-Try make -j4 out/host/linux-x86/bin/unpackbootimg
-put "unpackbootimg" in ~/android/system/out/host/linux-x86/bin then i copy it to ~/usr/bin and set chmod.
Im did see a download if it some place. Google.
-copy unpackbootimg to into /usr/bin If it is there, make it executable.
make executable: sudo chmod a+x /usr/bin/unpackbootimg
-Run make clubber from The ICS folder. Than restart pc might help to.
Nother problem that i did run into trying to make ext4 images:
make_ext4fs -s -l 0x40000000 -a data out/target/product/m805_892x/userdata.img out/target/product/m805_892x/data
Need size of filesystem
make: *** [out/target/product/m805_892x/userdata.img] Error 4
make: *** Waiting for unfinished jobs..
The sizes need to be in bytes it seems.
make_ext4fs does not support hex in the -l argument
DD dump you´re partitions and you see the amount of bytes.
I put this in my BoardConfig.mk like this:
BOARD_USERDATAIMAGE_PARTITION_SIZE := 1073741824
Use this to finisch waiting jobs..:
make_ext4fs -s -l 1073741824 -a data out/target/product/m805_892x/userdata.img out/target/product/m805_892x/data
problem:
[email protected]:~/ICS$ make -j4 recoveryimage
build/core/product_config.mk:196: *** _nic.PRODUCTS.[[device/YG/m805_892x/device_m805_892x.mk]]: "device/YG/m805_892x/m805_892x-vendor-blobs.mk" does not exist. Stop.
The error is somewhare found in this file:
device_m805_892x.mk I used the original file and start adding things again.
Problem:
make: *** No rule to make target `vendor/cm/proprietary/RomManager.apk', needed by `out/target/product/m805_892x/system/app/RomManager.apk'. Stop.
make: *** Waiting for unfinished jobs....
Copy: out/target/product/m805_892x/system/bin/compcache
Copy: out/target/product/m805_892x/system/bin/handle_compcache
[email protected]:~/ICS$
For that use the terminal and cd to:
cd /vendor/cm
run:
./get-prebuilts
This will download the RomManager.apk and bit of other stuff.
Click to expand...
Click to collapse
i will add this to op... i will expalin the problem the cause for it and the fix for it..i will explain stuff and type it in general for all devices..btw thanks for the reply ... will update the op soon..
So I've subscribed to this thread and I'll help when I can I've built about seven different ROMs and have had to solve allot of issues lol
Sent from my SAMSUNG-SGH-I577 using xda premium
ktempleton said:
So I've subscribed to this thread and I'll help when I can I've built about seven different ROMs and have had to solve allot of issues lol
Sent from my SAMSUNG-SGH-I577 using xda premium
Click to expand...
Click to collapse
thank you for helping..i too have done a lot of source builds and faced hell lot of problems so i made this as a general thread to get help and help other's too...
Great Thread
Really very helpful thread for beginners. Keep on updating this thread. I will post my errors later
RishabhAd said:
Really very helpful thread for beginners. Keep on updating this thread. I will post my errors later
Click to expand...
Click to collapse
thank you for the support spread the thread so that more people get benfited...
Sticky please
Help Please
Getting this error while compiling for Samsung Galaxy Fit. I have used CM 10's device config & did changes as mentioned. Please any there help me
http://pastebin.com/QW2ViEDk
RishabhAd said:
Getting this error while compiling for Samsung Galaxy Fit. I have used CM 10's device config & did changes as mentioned. Please any there help me
http://pastebin.com/QW2ViEDk
Click to expand...
Click to collapse
Code:
packages/apps/Bluetooth/src/com/android/bluetooth/map/BluetoothMasService.java:394: cannot find symbol
symbol : variable REQUEST_TYPE_MESSAGE_ACCESS
location: class android.bluetooth.BluetoothDevice
BluetoothDevice.REQUEST_TYPE_MESSAGE_ACCESS);
^
packages/apps/Bluetooth/src/com/android/bluetooth/map/BluetoothMasService.java:458: cannot find symbol
symbol : variable REQUEST_TYPE_MESSAGE_ACCESS
location: class android.bluetooth.BluetoothDevice
BluetoothDevice.REQUEST_TYPE_MESSAGE_ACCESS);
The part thats causing u the errors... !!!!
check the files BluetoothMasService.java and BluetoothMasService.java with the one in CM10 repo nd see wat is missing
RishabhAd said:
Getting this error while compiling for Samsung Galaxy Fit. I have used CM 10's device config & did changes as mentioned. Please any there help me
http://pastebin.com/QW2ViEDk
Click to expand...
Click to collapse
What repo are you using I'll post a thread in aa min you need to get the repo for utackas repo because pa repo is broke
http://forum.xda-developers.com/showthread.php?p=35507138
Don't know if your using this repo but I was getting errors like that until I switched
Sent from my SAMSUNG-SGH-I577 using xda premium
wilfredcool007 said:
Code:
packages/apps/Bluetooth/src/com/android/bluetooth/map/BluetoothMasService.java:394: cannot find symbol
symbol : variable REQUEST_TYPE_MESSAGE_ACCESS
location: class android.bluetooth.BluetoothDevice
BluetoothDevice.REQUEST_TYPE_MESSAGE_ACCESS);
^
packages/apps/Bluetooth/src/com/android/bluetooth/map/BluetoothMasService.java:458: cannot find symbol
symbol : variable REQUEST_TYPE_MESSAGE_ACCESS
location: class android.bluetooth.BluetoothDevice
BluetoothDevice.REQUEST_TYPE_MESSAGE_ACCESS);
The part thats causing u the errors... !!!!
check the files BluetoothMasService.java and BluetoothMasService.java with the one in CM10 repo nd see wat is missing
Click to expand...
Click to collapse
I tried i think this is d error of source.
ktempleton said:
What repo are you using I'll post a thread in aa min you need to get the repo for utackas repo because pa repo is broke
http://forum.xda-developers.com/showthread.php?p=35507138
Don't know if your using this repo but I was getting errors like that until I switched
Sent from my SAMSUNG-SGH-I577 using xda premium
Click to expand...
Click to collapse
u compiled by using utacka's repo? n what is d size of source?
ktempleton said:
What repo are you using I'll post a thread in aa min you need to get the repo for utackas repo because pa repo is broke
http://forum.xda-developers.com/showthread.php?p=35507138
Don't know if your using this repo but I was getting errors like that until I switched
Sent from my SAMSUNG-SGH-I577 using xda premium
Click to expand...
Click to collapse
Ummm, how long has the pa repo been broken? I did see that someone said something about it. Reason I'm asking, In building PAC and part of the manifest pulls from PA doesn't it? Could that be causing my problems?
Sent from my PC36100 using Tapatalk 2
Have you erased one of those files the error pointed to
My PAC runs fine but when I ran it for the first time I had maybe four duplicates I had to take care of
Sent from my SAMSUNG-SGH-I577 using xda premium
ktempleton said:
Have you erased one of those files the error pointed to
My PAC runs fine but when I ran it for the first time I had maybe four duplicates I had to take care of
Sent from my SAMSUNG-SGH-I577 using xda premium
Click to expand...
Click to collapse
well, i think i have to switch one or two more items in my local_manifest...i saw that git links i was using are not going to be updated any longer due to another dev going forward with the project.
but before i can switch them all out, i have to make sure i have the links right..but github is down so im kinda stuck for a bit

[HOWTO] Compile Roms for the X+ in a nut shell

Ok guys i'm doing this as there's only two AOSP dev's (AOSP\CM\AOKP\PA) also i want to help get more people into developing.
This tutorial covers BOTH the AT&T and the International
This tutorial assumes you WONT be using a virtual machine but Linux installed onto your hard drive.
Prerequisites:
Able to read
Able to think
Not wanting your hand to be held
Able to use Linux
Ubuntu 10.04 > 12.04 (one of those)
AT LEAST 80gb free on your hard drive
Time
Patience
fastish internet
coffee (or tea or beer)
Computer Specs MINIMUM Dual core cpu and 4gb of ram and a ubuntu based OS 64bit
So your ready and read everything above lets get the show on the road.
if you are using ubuntu 10.04 to 11.10, you will need these files:
Code:
sudo apt-get install git-core gnupg flex bison gperf build-essential \ zip curl zlib1g-dev libc6-dev lib32ncurses5-dev ia32-libs \ x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev \ libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown \ libxml2-utils xsltproc openjdk6-jdk
end of 10.04 > 11.10 section
if you are using Ubuntu 12.04 > you will need these files:
Code:
sudo apt-get install git gnupg flex bison gperf build-essential \ zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev \ libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 \ libgl1-mesa-dev g++-multilib mingw32 tofrodos \ python-markdown libxml2-utils xsltproc zlib1g-dev:i386 openjdk-7-jdk
and then run this command:
sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so
if you get any errors showing up simply remove the offending package it's moaning about and install it manually later, i wont hold your hand with this.
end of 12.04 > section
now you have all those packages you want to grab the android source, for this tutorial i'll be using CM10.1 (4.2.2)
1st you will need to grab repo:
you need to make this folder for it to go into
mkdir ~/bin
PATH=~/bin:$PATH this is to tell linux where the bin folder is (in a nutshell)
now to Download the Repo script and ensure it is executable:
curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
chmod a+x ~/bin/repo
ok that's that part done, now to grabbing the source and so on:
1st you need to make a folder to dump the source in, my folder layout is like this ~/Android/AOSP422 or ~/Android/CM10.1
but you can do it however you want
so for the benefits of this tutorial i'll be using ~/Android/CM10.1
mkdir ~/Android/CM10.1
cd ~/Android/CM10.1
thats the folder created and you have cd'd into it now to grab the source
repo init -u git://github.com/CyanogenMod/android.git -b cm-10.1
this is telling repo where the source is and what BRANCH to pull so we are pulling cm-10.1
once all that is done do the next command
repo sync -j# (the # = number of cores + 1) so on my i5 it only has 4cores so it's -j5 (but you can do a little bigger on a repo sync i tend to do a -j16 on my i5 for repo)
now go grab a coffee this can take a little while.
once all that is done and dusted you'll be wanting to start building, hold your horses you still need the device specific stuff, so make sure you are in the root of the CM.10.1 Directory, then type the following command:
for the AT&T X+ it's
AT&T will be updated in the near future. Please don't ask for it right now.
for the International X+ it's
git clone https://github.com/HoxPlusCMOfficial/android_device_htc_enrc2b -b cm-10.1 device/htc/enrc2b
git clone https://github.com/HoxPlusCMOfficial/android_vendor_htc_enrc2b -b master vendor/htc/enrc2b
git clone https://github.com/HoxPlusCMOfficial/android_kernel_htc_enrc2b -b master kernel/htc/enrc2b
git clone https://github.com/HoxPlusCMOfficial/android_device_htc_tegra3-common.git -b cm-10.1 device/htc/tegra3-common
that will grab down my CM10.1 device specific source
once that's downloaded
Get the CM prebuilts by doing the following:
cd vendor/cm/
./get-prebuilts
then cd back to the root dir
then the following commands to get the build going
. build/envsetup.sh
brunch evitareul or enrc2b depending on which device your building for.
and the build will get started, this can take anywhere from 4hrs > 30minutes
once it's all finished it will tell you where your zip file has poped out.
enjoy and don't forget if you used this tutorial link back to it in your rom op.
recommended reading:
http://source.android.com/source/initializing.html
and
http://wiki.cyanogenmod.org/w/Development
-Lloir
reserved just in case (might use this one for kernel building)
Might just try this for ****s and giggles
Sent from my HTC One X using Tapatalk 2
Hey Lloir, I'll be reading for years, but can you point me to the link on the cyanogenmod site or wherever, that explains why I did (repo sync -j#) and what exactly it did please, and thank you.
Edit: Found the info I was looking for, sorry, had some many tabs open, I didn't think to google.
Is it possible to setup in a virtual machine? If so what's needs to be done different? Thanks.
yes it is, you would need AT LEAST a quad core + 8gb of ram (2cores and 4gb for the virtual machine)
Good, simple guide
I think there might be a step missing before brunch:
Code:
cd vendor/cm
./get-prebuilts
...because the first time I ran brunch enrc2b I got this error:
Code:
make: *** No rule to make target `vendor/cm/proprietary/Term.apk', needed by `/android/cm-10.1/out/target/product/enrc2b/system/app/Term.apk'. Stop.
make: *** Waiting for unfinished jobs....
Woops my bad, thanks for pointing it out
Sent from my HTC One X+ using Tapatalk 2
Also, I needed to install lib32ncurses5-dev (sudo apt-get install lib32ncurses5-dev) on Ubuntu 12.04 amd64 to avoid the following errors when doing 'make menuconfig' for the kernel:
Code:
cripts/kconfig/mconf.o: In function `show_help':
mconf.c:(.text+0x744): undefined reference to `stdscr'
scripts/kconfig/mconf.o: In function `main':
mconf.c:(.text.startup+0x66): undefined reference to `initscr'
mconf.c:(.text.startup+0x6d): undefined reference to `stdscr'
scripts/kconfig/lxdialog/checklist.o: In function `print_arrows':
checklist.c:(.text+0x41): undefined reference to `wmove'
checklist.c:(.text+0x61): undefined reference to `acs_map'
checklist.c:(.text+0x69): undefined reference to `waddch'
checklist.c:(.text+0x7b): undefined reference to `waddnstr'
checklist.c:(.text+0x8c): undefined reference to `wmove'
checklist.c:(.text+0xb3): undefined reference to `acs_map'
checklist.c:(.text+0xbb): undefined reference to `waddch'
checklist.c:(.text+0x10b): undefined reference to `acs_map'
I don't think that compiling your own kernel is necessary, and it's not part of Lloir's instructions, but I thought I'd post this here because I imagine that people who are interested in compiling Cyanogenmod might also be interested in compiling a kernel for it as well.
Hey Lloir when I get to the git clone command I get an error fatal: could not create leading directories of '/device/htc/evitareul': Permission denied. When I googled it I found this:
The fix for this error: “fatal: could not create leading directories of '…': Permission denied” was much different than what I thought it would be. I'd think if permission was denied, it would be caused by folder or file mode. Not the case!
But let me take a step back and explain how I encountered this error. It was getting generated during a deployed using vlad. Thankfully the error report included the command that vlad was trying to execute. I tried running it manually and received the same response, so I broke it up into its pieces, then tried running them on the remote target. That revealed it was actually an ssh-key problem.
Wow! I'm surprised that the explanation was so far off the mark.
Anyway, all it took was to login to the remote target, ssh to the git origin remote server, accept the key, and away I went. Whee…
I'm going to play with it, but any pointers would be good. Using 12.04
EDIT: Is your git link dead?
n1gh7m4r3 said:
Hey Lloir when I get to the git clone command I get an error fatal: could not create leading directories of '/device/htc/evitareul': Permission denied. When I googled it I found this:
The fix for this error: “fatal: could not create leading directories of '…': Permission denied” was much different than what I thought it would be. I'd think if permission was denied, it would be caused by folder or file mode. Not the case!
But let me take a step back and explain how I encountered this error. It was getting generated during a deployed using vlad. Thankfully the error report included the command that vlad was trying to execute. I tried running it manually and received the same response, so I broke it up into its pieces, then tried running them on the remote target. That revealed it was actually an ssh-key problem.
Wow! I'm surprised that the explanation was so far off the mark.
Anyway, all it took was to login to the remote target, ssh to the git origin remote server, accept the key, and away I went. Whee…
I'm going to play with it, but any pointers would be good. Using 12.04
Click to expand...
Click to collapse
i typo'd don't do the /device just do device/ , or you could just cd into device mkdir htc cd into htc then git clone into there
BTW I'm glad many of you can read this tutorial, i'am awful at doing instructions for other people...if anyone has opinions on the way it's written please PM or re-write it and PM me and i'll replace the current one with a friendlier version.
-Lloir
Anyone know how to fix these errors:
Code:
Install: /android/cm-10.1/out/target/product/enrc2b/system/bin/dhcpcd
Install: /android/cm-10.1/out/target/product/enrc2b/system/bin/keystore
Install: /android/cm-10.1/out/target/product/enrc2b/system/bin/make_ext4fs
Install: /android/cm-10.1/out/target/product/enrc2b/system/bin/netcfg
target Executable: netd (/android/cm-10.1/out/target/product/enrc2b/obj/EXECUTABLES/netd_intermediates/LINKED/netd)
target Executable: vold (/android/cm-10.1/out/target/product/enrc2b/obj/EXECUTABLES/vold_intermediates/LINKED/vold)
target SharedLib: libpixelflinger (/android/cm-10.1/out/target/product/enrc2b/obj/SHARED_LIBRARIES/libpixelflinger_intermediates/LINKED/lib
pixelflinger.so)
/android/cm-10.1/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.6/bin/../lib/gcc/arm-linux-androideabi/4.6.x-google/../../../../arm-li
nux-androideabi/bin/ld: /android/cm-10.1/out/target/product/enrc2b/obj/STATIC_LIBRARIES/libbt-brcm_bta_intermediates/libbt-brcm_bta.a(bta_a
g_sco.o): in function bta_ag_create_sco:external/bluetooth/bluedroid/bta/./ag/bta_ag_sco.c:538: error: undefined reference to 'BTM_SetWBSCo
dec'
/android/cm-10.1/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.6/bin/../lib/gcc/arm-linux-androideabi/4.6.x-google/../../../../arm-li
nux-androideabi/bin/ld: /android/cm-10.1/out/target/product/enrc2b/obj/STATIC_LIBRARIES/libbt-brcm_bta_intermediates/libbt-brcm_bta.a(bta_a
g_sco.o): in function bta_ag_create_sco:external/bluetooth/bluedroid/bta/./ag/bta_ag_sco.c:542: error: undefined reference to 'BTM_ConfigI2
SPCM'
/android/cm-10.1/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.6/bin/../lib/gcc/arm-linux-androideabi/4.6.x-google/../../../../arm-li
nux-androideabi/bin/ld: /android/cm-10.1/out/target/product/enrc2b/obj/STATIC_LIBRARIES/libbt-brcm_bta_intermediates/libbt-brcm_bta.a(bta_a
g_sco.o): in function bta_ag_sco_disc_cback:external/bluetooth/bluedroid/bta/./ag/bta_ag_sco.c:218: error: undefined reference to 'BTM_SetW
BSCodec'
/android/cm-10.1/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.6/bin/../lib/gcc/arm-linux-androideabi/4.6.x-google/../../../../arm-li
nux-androideabi/bin/ld: /android/cm-10.1/out/target/product/enrc2b/obj/STATIC_LIBRARIES/libbt-brcm_bta_intermediates/libbt-brcm_bta.a(bta_a
g_sco.o): in function bta_ag_sco_conn_rsp:external/bluetooth/bluedroid/bta/./ag/bta_ag_sco.c:1529: error: undefined reference to 'BTM_Confi
gI2SPCM'
collect2: ld returned 1 exit status
make: *** [/android/cm-10.1/out/target/product/enrc2b/obj/SHARED_LIBRARIES/bluetooth.default_intermediates/LINKED/bluetooth.default.so] Err
or 1
make: *** Waiting for unfinished jobs....
Note: I didn't make the libGL.so symlink at first, but I have now and I've gone back and run brunch enrc2b again and I still get the same error.
woops i forgot all about that, the fix is'nt merged into CM yet
do the following
cd external/bluetooth/
rm -rf bluedroid
git clone https://github.com/maxwen/bluedroid.git
wait for that to download and then cd back into the root dir
(this will be needed for both devices when building)
n1gh7m4r3 said:
EDIT: Is your git link dead?
Click to expand...
Click to collapse
no....it's working, i just cloned from it to check to see if it was working
Code:
Package Complete: /android/cm-10.1/out/target/product/enrc2b/cm-10.1-20130313-UNOFFICIAL-enrc2b.zip
frankoid said:
Code:
Package Complete: /android/cm-10.1/out/target/product/enrc2b/cm-10.1-20130313-UNOFFICIAL-enrc2b.zip
Click to expand...
Click to collapse
grats :good:
Lloir said:
BTW I'm glad many of you can read this tutorial, i'am awful at doing instructions for other people...if anyone has opinions on the way it's written please PM or re-write it and PM me and i'll replace the current one with a friendlier version.
Click to expand...
Click to collapse
I personally found it very useful. I've built CM before for other devices, but I didn't realise how easy it was to build it using an unofficial device tree - I didn't know it was simply a case of dropping the device tree into devices/.
frankoid said:
I personally found it very useful. I've built CM before for other devices, but I didn't realise how easy it was to build it using an unofficial device tree - I didn't know it was simply a case of dropping the device tree into devices/.
Click to expand...
Click to collapse
my device tree is a very lazy tree, it's supposed to have a vendor tree, but i've slammed it all into one.
These instructions pretty much cover any ROM, except for where you grab the source from..
Sent from my HTC One X+ using Tapatalk 2
the ATT git clone command should be: git clone https://bitbucket.org/Lloir/android_device_htc_evitareul.git and not: git clone https://[email protected]/Lloir/an..._evitareul.git -b CM10.1
I believe this is/was my problem.
EDIT: or perhaps git clone https://bitbucket.org/Lloir/android_device_htc_evitareul.git -b CM10.1
EDIT2: It isn't showing correctly in the thread. replace the ... with device, and it should work.

[CM] Building for expressltexx (GT-I8730)

There's an easy way to do whatever's discussed below, except for a) getting the SDK, b) syncing the repos, and c) building the ROM; and that way is using this script. But it's still better to do the steps below manually as it gets you acquainted with the terminal - you'll be using it a lot.
Thanks to @klvnhng for the original tutorial for mako
Credits to him.
You will need:
A computer running Ubuntu with at least 2GB memory and around 40-65 GB of free space
If you don't want to install Ubuntu, run it instead in VMWare Player or VirtualBox.
make sure you provide the virtual machine with the amount of recommended disk space or more
give it no less than 3-4GB of RAM
A (preferably fast) internet connection (trust me, you don't want to do this with a 256 or 512 kbps connection)
Familiarity with Android and Linux. Read up at source.android.com.
Setting up the build environment
1. Install JDK
DO NOT USE OPENJDK. Remove it by entering
Code:
sudo apt-get purge openjdk* icedtea* icedtea-6*
Install Oracle Java 6 by typing this into a terminal:
Code:
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java6-installer
Android SDK requires the x86 compatibility packages, ia32-libs. Install it by entering this:
Code:
sudo apt-get -y install ia32-libs
As an alternative, you can also do this (thanks to @jjchico):
Code:
sudo apt-get install lsb-release lib32gcc1 libc6-i386 lib32z1 lib32stdc++6 lib32bz2-1.0 lib32ncurses5
2. Android SDK
Download it here.
Extract it to a folder of your choice (in this guide, I will refer to it as ~/android/sdk).
Enter these commands into the terminal:
Code:
cd ~/android/sdk/adt-bundle/sdk/tools
./android sdk
Click Install packages. cd to ~/android/sdk/adt-bundle/sdk/platform-tools and type:
Code:
./adb
./fastboot
If you've done everything correctly, you should get a big block of text for both (which list all of the adb/fastboot commands).
3. Install required packages
Copy and paste this command into the terminal:
Code:
sudo apt-get install git-core gnupg flex bison gperf build-essential \
zip curl zlib1g-dev zlib1g-dev:i386 libc6-dev lib32ncurses5-dev \
ia32-libs x11proto-core-dev libx11-dev:i386 libreadline6-dev:i386 \
lib32z-dev libgl1-mesa-dev g++-multilib mingw32 \
tofrodos python-markdown libxml2-utils xsltproc readline-common \
libreadline6-dev libreadline6 lib32readline-gplv2-dev libncurses5-dev \
lib32readline5 lib32readline6 libreadline-dev libreadline6-dev:i386 \
libreadline6:i386 bzip2 libbz2-dev libbz2-1.0 libghc-bzlib-dev lib32bz2-dev \
libsdl1.2-dev libesd0-dev squashfs-tools pngcrush schedtool libwxgtk2.8-dev
4. Install the repo command
Make directories called bin and android in your home folder, respectively.
Code:
mkdir -p ~/bin
mkdir -p ~/android
Download and setup the repo binary:
Code:
curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
Now add it to your path:
Code:
export PATH="$PATH:~/bin"
And make sure it belongs in your path between subsequent reboots:
Code:
echo "export PATH="$PATH:~/android/sdk:~/bin"" >> ~/.bashrc
source ~/.bashrc
5. Configuring USB
You must configure USB to detect your Android device(s) properly.
Do this in a terminal:
Code:
curl https://raw.githubusercontent.com/aureljared/build-env-init/master/51-android.rules > ~/bin/51-android.rules
chmod a+r ~/bin/51-android.rules
sudo cp -vfp ~/bin/51-android.rules /etc/udev/rules.d/51-android.rules
6. Syncing up
The next step is to initialize the repository and download the source code to your computer.
Type the following lines into the terminal:
Code:
mkdir -p ~/android/cm-11.0
cd ~/android/cm-11.0
repo init -u git://github.com/CyanogenMod/android.git -b cm-11.0
To download all the necessary device-specific files for our device, do this:
Code:
curl https://raw.githubusercontent.com/aureljared/android-manifests/expresslte-cm-11.0/local_manifest.xml >> .repo/local_manifests/local_manifest.xml
Now run
Code:
repo sync
You have now begun downloading all of the CM source code to your build directory. Depending on your internet speed, this can take from a couple of hours to a few days. If the sync interrupts, don't worry. Simply continue the sync (you don't have to restart completely, only the project you were downloading when the interrupt occured, lol) by entering:
Code:
repo sync
Some tips:
You can interrupt the process by pressing Ctrl + C, it will continue where it left off the next time anyway.
Remember, you need to cd into your build directory (~/android/cm-11.0, if you've been following this guide) for the command to work.
If you want only one project to be synced at a time, run repo sync -j1 instead.
This step takes a long time depending on your internet connection speed (FYI you're downloading ~20 GB of code!)
7. Building CM (yay!)
You must download the necessary pre-built apps:
Code:
~/android/cm-11.0/vendor/cm/get-prebuilts
Now let's build! cd to your build directory and run the following commands in the terminal:
Code:
. build/envsetup.sh
brunch expressltexx
Now, just let your computer do the rest. This step is very demanding for your computer, so you better leave it alone while it builds. Usually this takes an hour or more. Go get some sleep or eat something.
Done? If everything went correctly, cd to ~/android/cm-11.0/out/target/product/expresslte and you should see your newly built ROM entitled:
cm-11.0-20xxxxxx-UNOFFICIAL-expressltexx.zip
Congratulations! You've successfully built CM 11.0!
For re-builds (i.e. when the source code has been updated and you would like to make a new nightly), just do this:
Code:
cd ~/android/cm-11.0
make clobber
repo sync
. build/envsetup.sh
brunch expressltexx
Have fun building!​
I suggest you to modify step 5 inserting before repo sync
Code:
mkdir .repo/local_manifests
cd .repo/local_manifests
wget https://raw.github.com/KINGbabasula/android_device_samsung_expresslte/cm-10.2/local_manifest.xml
cd ..
cd ..
This will download the specific necessary repos with repo sync
Then remove this in step 6
Code:
mkdir files
cd files
git clone https://github.com/KINGbabasula/proprietary_vendor_samsung.git
as it isn't needed
And change make clean with make clobber because with clobber it will rebuild faster
EDIT: And before step 6 you need to replace these 2 files with the 2 in the attachment
Code:
system/core/mkbootimg/bootimg.h
system/core/mkbootimg/mkbootimg.c
KINGbabasula said:
I suggest you to modify step 5 inserting before repo sync
Code:
mkdir .repo/local_manifests
cd .repo/local_manifests
wget https://raw.github.com/KINGbabasula/android_device_samsung_expresslte/cm-10.2/local_manifest.xml
cd ..
cd ..
This will download the specific necessary repos with repo sync
Then remove this in step 6
Code:
mkdir files
cd files
git clone https://github.com/KINGbabasula/proprietary_vendor_samsung.git
as it isn't needed
And change make clean with make clobber because with clobber it will rebuild faster
EDIT: And before step 6 you need to replace these 2 files with the 2 in the attachment
Code:
system/core/mkbootimg/bootimg.h
system/core/mkbootimg/mkbootimg.c
Click to expand...
Click to collapse
Original post updated.
Can you help me with ia32-libs?
It says that it's referred to by a handful of other packages but it has no installation candidates or something. The bottom line is that I can't install it.
I'm using 13.10 x64 on an ASUS K43SJ.
- Intel i5-2410M Quadcore (2.3GHz normal, 2.9GHz Turbo Boost)
- 2GB RAM available to Ubuntu VM
Sent from my International Galaxy Express using Tapatalk 4
aureljared said:
Original post updated.
Can you help me with ia32-libs?
It says that it's referred to by a handful of other packages but it has no installation candidates or something. The bottom line is that I can't install it.
I'm using 13.10 x64 on an ASUS K43SJ.
- Intel i5-2410M Quadcore (2.3GHz normal, 2.9GHz Turbo Boost)
- 2GB RAM available to Ubuntu VM
Sent from my International Galaxy Express using Tapatalk 4
Click to expand...
Click to collapse
You have to apt-get install every missing library one by one
Inviato dal mio GT-I9070 utilizzando Tapatalk
aureljared said:
2. Android SDK
Download it here.
Extract it to a folder of your choice (in this guide, I will refer to it as ~/android/sdk).
Enter these commands into the terminal:
Code:
cd ~/android/sdk/adt-bundle/sdk/tools
./android sdk
Click Install packages. cd to ~/android/sdk/adt-bundle/sdk/platform-tools and type:
Code:
adb
fastboot
Click to expand...
Click to collapse
Shouldn't it be
Code:
./adb
./fastboot
Or have you added the sdk to your path?
I guess the compilation process will need the sdk. How does it find the sdk? Do you need to provide the path anywhere?
Thanks for the great tuto.
These are the libs that ia32-libs pulls in that are present in Ubuntu 13.10. This should be equivalent to install ia32-libs in Ubuntu 12.04:
$ sudo apt-get install lsb-release lib32gcc1 libc6-i386 lib32z1 lib32stdc++6 lib32bz2-1.0 lib32ncurses5
---------- Post added at 12:08 PM ---------- Previous post was at 11:29 AM ----------
These are the libs that ia32-libs pulls in that are present in Ubuntu 13.10. This should be equivalent to install ia32-libs in Ubuntu 12.04:
$ sudo apt-get install lsb-release lib32gcc1 libc6-i386 lib32z1 lib32stdc++6 lib32bz2-1.0 lib32ncurses5
jjchico said:
These are the libs that ia32-libs pulls in that are present in Ubuntu 13.10. This should be equivalent to install ia32-libs in Ubuntu 12.04:
$ sudo apt-get install lsb-release lib32gcc1 libc6-i386 lib32z1 lib32stdc++6 lib32bz2-1.0 lib32ncurses5
---------- Post added at 12:08 PM ---------- Previous post was at 11:29 AM ----------
These are the libs that ia32-libs pulls in that are present in Ubuntu 13.10. This should be equivalent to install ia32-libs in Ubuntu 12.04:
$ sudo apt-get install lsb-release lib32gcc1 libc6-i386 lib32z1 lib32stdc++6 lib32bz2-1.0 lib32ncurses5
Click to expand...
Click to collapse
jjchico said:
Shouldn't it be
Code:
./adb
./fastboot
Or have you added the sdk to your path?
I guess the compilation process will need the sdk. How does it find the sdk? Do you need to provide the path anywhere?
Thanks for the great tuto.
Click to expand...
Click to collapse
Updated original post.
Sent from my GT-I8730 using Tapatalk
Thanks. Just note the missing double quotes in the export PATH.
Enviado desde mi GT-I9000 mediante Tapatalk
jjchico said:
Thanks. Just note the missing double quotes in the export PATH.
Enviado desde mi GT-I9000 mediante Tapatalk
Click to expand...
Click to collapse
Haha lol sorry. I was very sleepy when I updated last night.
Updated post.
My repo sync is finished with 65 out of 401 projects. ia32-libs now okay thanks to you @jjchico.
Sent from my GT-I8730 using Tapatalk
I get this
[email protected]:~/android/cm-10.2$ repo init -u git://github.com/CyanogenMod/android.git -b cm-10.2
No command 'repo' found, did you mean:
Command 'repro' from package 'repro' (universe)
Command 'repl' from package 'nmh' (universe)
Command 'repl' from package 'mailutils-mh' (universe)
Command 'rep' from package 'rep' (universe)
repo: command not found
[email protected]:~/android/cm-10.2$
Any ideas? All seemed good before that
Bazzan
Check that repo is in the bin folder in your user main folder.
Check that repo is executable
chmod a+x ~/bin/repo
Enviado desde mi GT-I9000 mediante Tapatalk
"6. Building CM (yay!)"
"In order to make a working build, you have to get the proprietary files (mainly device build files and drivers) for the device."
so how do I get the propriety files and where do I put them? ADB from your phone?
After this you direct us to prebuilt apps so it appears there is a step missing unless I am pulling proprietary files down from KINGbabasula's Github
Bazzan
bazzan said:
"6. Building CM (yay!)"
"In order to make a working build, you have to get the proprietary files (mainly device build files and drivers) for the device."
so how do I get the propriety files and where do I put them? ADB from your phone?
After this you direct us to prebuilt apps so it appears there is a step missing unless I am pulling proprietary files down from KINGbabasula's Github
Bazzan
Click to expand...
Click to collapse
Yeah, the files are located somewhere in KINGbabasula's github. If you want to use ADB then refer to the text file located in android_device_samsung_expresslte.
Or if you want to download the files themselves, do this in a terminal:
Code:
mkdir proprietary
cd proprietary
git clone https://github.com/KINGbabasula/proprietary_vendor_samsung.git
The files will be located in proprietary/proprietary_vendor_samsung/expresslte.
Sent from my GT-I8730 using Tapatalk
Finally got build going. Thanks for the tutorial @aureljared. You were not kidding when you said takes a while. Not too sure where to from here. Welcome suggestions if anyone wants me to try anything
Bazzan
URGENT
Before proceeding to build any more ROMs, let me ask some questions.
What toolchain for building the kernel are you using? Toolchains that might work are arm-eabi-4.4.3 upwards or linaro 4.4.3 upwards.
What is your configuration for the kernel? It is written to a file called ".config" insinde the kernel source.
Have you applied any kind of patch to the code before compiling? If so, what?
Click to expand...
Click to collapse
Thank you for your time. Your answers to the above questions will be highly appreciated and will be of utmost importance. There is also a good chance that we might build a proper kernel with your reports!
:good: :victory:
Sent from my GT-I8730 using Tapatalk
aureljared said:
URGENT
Before proceeding to build any more ROMs, let me ask some questions.
What toolchain for building the kernel are you using? Toolchains that might work are arm-eabi-4.4.3 upwards or linaro 4.4.3 upwards.
What is your configuration for the kernel? It is written to a file called ".config" insinde the kernel source.
Have you applied any kind of patch to the code before compiling? If so, what?
Thank you for your time. Your answers to the above questions will be highly appreciated and will be of utmost importance. There is also a good chance that we might build a proper kernel with your reports!
:good: :victory:
Sent from my GT-I8730 using Tapatalk
Click to expand...
Click to collapse
No toolchain experience at all. Just substituted kernels from elsewhere. Maybe if you are leaning toward Linaro, I should find myself a tutorial for arm-eabi-4.4.3 upwards and give that a go. then we can cover more ground.
Bazzan
bazzan said:
No toolchain experience at all. Just substituted kernels from elsewhere. Maybe if you are leaning toward Linaro, I should find myself a tutorial for arm-eabi-4.4.3 upwards and give that a go. then we can cover more ground.
Bazzan
Click to expand...
Click to collapse
Sure.
I'm not saying that I'm relying on Linaro now, it's just that Linaro is a toolchain developed by a consortium of technology companies including Samsung that aims to build Linux kernels that perform extremely well on mobile devices.
CM 10.2 uses Linaro 12.09, I think.
I tried building with Linaro a couple of days ago but make threw me some errors, the most confusing being something like this
Code:
make [cypress_touchkeys.o] *** Error 2
I don't even know what Cypress is.
Sent from my GT-I8730 using Tapatalk
aureljared said:
Sure.
I'm not saying that I'm relying on Linaro now, it's just that Linaro is a toolchain developed by a consortium of technology companies including Samsung that aims to build Linux kernels that perform extremely well on mobile devices.
CM 10.2 uses Linaro 12.09, I think.
I tried building with Linaro a couple of days ago but make threw me some errors, the most confusing being something like this
Code:
make [cypress_touchkeys.o] *** Error 2
I don't even know what Cypress is.
Sent from my GT-I8730 using Tapatalk
Click to expand...
Click to collapse
Cannot help with Cypress. Some time ago I downloaded a file called GT-I8730_JB_Opensource.zip - not sure where I found it.
It appears to be what is says it is. Within it is a text file called README_Kernel.txt
It has the following
################################################################################
1. How to Build
- get Toolchain
From android git server , codesourcery and etc ..
- arm-eabi-4.4.3
- edit Makefile
edit "CROSS_COMPILE" to right toolchain path(You downloaded).
EX) export CROSS_COMPILE= $(android platform directory you download)/android/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-
Ex) export CROSS_COMPILE=/usr/local/toolchain/arm-eabi-4.4.3/bin/arm-eabi- // check the location of toolchain
$ export ARCH=arm
$ make msm8930_express_defconfig
$ make
2. Output files
- Kernel : arch/arm/boot/zImage
- module : drivers/*/*.ko
3. How to Clean
$ make clean
################################################################################
Way out of my depth but will try sometime next week to give it a go with arm-eabi-4.4.3. Major interview Monday so nothing before then.
Bazzan
bazzan said:
Cannot help with Cypress. Some time ago I downloaded a file called GT-I8730_JB_Opensource.zip - not sure where I found it.
It appears to be what is says it is. Within it is a text file called README_Kernel.txt
It has the following
################################################################################
1. How to Build
- get Toolchain
From android git server , codesourcery and etc ..
- arm-eabi-4.4.3
- edit Makefile
edit "CROSS_COMPILE" to right toolchain path(You downloaded).
EX) export CROSS_COMPILE= $(android platform directory you download)/android/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-
Ex) export CROSS_COMPILE=/usr/local/toolchain/arm-eabi-4.4.3/bin/arm-eabi- // check the location of toolchain
$ export ARCH=arm
$ make msm8930_express_defconfig
$ make
2. Output files
- Kernel : arch/arm/boot/zImage
- module : drivers/*/*.ko
3. How to Clean
$ make clean
################################################################################
Way out of my depth but will try sometime next week to give it a go with arm-eabi-4.4.3. Major interview Monday so nothing before then.
Bazzan
Click to expand...
Click to collapse
That's from Samsung. It contains the kernel source as you already have seen
It's stock 3.4.0 so I don't know if it will work with CM :good:
Sent from my GT-I8730 using Tapatalk
Quote from jt1134:
jt1134 said:
I use the d2 family kernel source.
For stock ROMs and CM10, you can use the source and ramdisk provided by samsung.
For CM10.1 or higher, you'll have to get your hands very dirty. IMO the easiest route would be to port the missing drivers from stock samsung source to the msm8930-common kernel, and modifying it to work with them. This is how I did it for the I437 : http://review.cyanogenmod.org/#/c/47947/ . You may then use the serrano device trees as a template once the kernel is ready.
Click to expand...
Click to collapse
Updated first post with this info.
Sent from my GT-I8730 using Tapatalk

[GUIDE][TOOL] How Build/Compile your own kernel for LG G2

There is still no "how to" specific to the LG G2, so I'll try to share the maximum of my experience (or almost) with ["kernel", "build", "LG G2"] here. I'll show two methods different using CM12 kernel, The method for LG ROMs is very similar, I show some tips for LG ROMs also. The first method is the "manual" and second is the "automatic" using my "tool" called DCC. So come on! For this you will need a computer running Linux (x64) and have knowledge about basic Linux commands. I'm using a laptop (i3-2328M and 4GB of RAM) running Ubuntu 14.10 :good:
Setting Up the Environment
First install the essential tools (common environment for those already working with C/C++):
Code:
sudo apt-get install bison build-essential curl flex git gnupg gperf libesd0-dev liblz4-tool libncurses5-dev libsdl1.2-dev libwxgtk2.8-dev libxml2 libxml2-utils lzop openjdk-7-jdk openjdk-7-jre pngcrush schedtool squashfs-tools xsltproc zip zlib1g-dev g++-multilib gcc-multilib lib32ncurses5-dev lib32readline-gplv2-dev lib32z1-dev
Check Java and Java Compiler version:
Code:
java -version && javac -version
If the default Java is 1.6.x, Use this command and select java-7-openjdk as default:
Code:
sudo update-alternatives --config java
Click to expand...
Click to collapse
Setting Up the kernel Environment
Code:
mkdir -p ~/android/mykernel && cd ~/android/mykernel && mkdir out
This will create a folder and two subfolder in your home, Within mykernel folder will get all the tools that we will set up. Now we set the toolchain, Particularly I use Linaro 4.9.3, the version optimized for Cortex-A15 by @Christopher83, so I will use it here.
Clone Linaro GCC 4.9.3:
Code:
git clone https://github.com/Christopher83/arm-cortex_a15-linux-gnueabihf-linaro_4.9
Now the required binaries (Common essential binaries to work with msm8974):
Code:
git clone https://github.com/ferreirawax/mkboot_exec ~/android/mykernel/executables
Clone the RAM disk compiled from CM12:
Code:
git clone -b aosp https://github.com/ferreirawax/ramdisk_g2 ~/android/mykernel/ramdisk
For stock Kitkat:
This RAM disk was extracted from my d805 (d805 is a d802 which was released in latin america), then so will work on the d802, d805 and d806 (d806 is a d802 as the d805) If the variant is another you will have to draw your own device using a tool such AIK or search repositories of other developers.
Click to expand...
Click to collapse
Code:
git clone -b lge https://github.com/ferreirawax/ramdisk_g2 ~/android/mykernel/ramdisk
Now finally the source code of the kernel, Here I will use a configured kernel to compile the code without CM12 source, you can use the source code that is in the official repositories of CM12, but you will face some errors and warnings during the build that can be solved using the commits that are in my source and supply of other developers.
Clone kernel source:
Code:
git clone -b cm-12.0 https://github.com/ferreirawax/kernel_lge_msm8974-patched ~/android/mykernel/msm8974
For stock KitKat:
Code:
git clone -b lge-kitkat https://github.com/ferreirawax/kernel_lge_msm8974-patched ~/android/mykernel/msm8974
Apparently not but we already have a complete environment, see the folders in mykernel to have a shadow on it. Now let's the good part of the story. :fingers-crossed:
Click to expand...
Click to collapse
Compiling
Enter in kernel folder:
Code:
cd msm8974
Export Architecture and Toolchain:
Code:
export ARCH=arm
export CROSS_COMPILE=~/android/mykernel/arm-cortex_a15-linux-gnueabihf-linaro_4.9/bin/arm-eabi-
For stock KitKat you need export LZ4 path:
Code:
export PATH=$PATH:tools/lz4demo
Select the model of the device you want to compile your pointing due defconfig, If you are using source code directly from the repositories of the CM12, defconfig each supported model is called "cyanogenmod_MODEL_defconfig".
Select model to build (In my case I will compile for d802):
Code:
make d802_defconfig
Now let's clear the specific waste of d802:
Code:
make clean && make mrproper
Select model again to generate new .config:
Code:
make d802_defconfig
Now we start to build:
Code:
make -j4
-j4 is suitable for dual-core processors and -j5 for quad-core.
Depending on the configuration of your PC can take up to 20 minutes. In my laptop the build time is about 10 minutes. If you are using VirtualBox, can take much longer. Upon completion, will generate a zImage and some dtb (Device tree binary) files, The dtb files will be used to create a specific image (dt.img) file containing board informations. Now let's create a RAM disk and then dt.img to later put it all together and result in a final boot.img.
Enter in executables folder:
Code:
cd ~/android/mykernel/executables
Create GNUZip compressed RAM disk:
Code:
./mkbootfs ~/android/mykernel/ramdisk | gzip > ~/android/mykernel/out/ramdisk.gz
Create dt.img:
First copy the dtc file that is in executables folder to /usr/bin
Code:
gksu nautilus
This will open the file manager with root privileges, After click the left mouse button and select the dtc as executable.
You may need to restart, After that create the dt.img with the following command.
Code:
./dtbTool -s 2048 -o ~/android/mykernel/out/dt.img ~/android/mykernel/msm8974/arch/arm/boot/
Finally assemble boot.img file:
Code:
./mkbootimg --kernel ~/android/mykernel/msm8974/arch/arm/boot/zImage --ramdisk ~/android/mykernel/out/ramdisk.gz --cmdline "XXXX" --base 0x00000000 --pagesize 2048 --offset 0x05000000 --tags-addr 0x04800000 --dt ~/android/mykernel/out/dt.img -o ~/android/mykernel/out/boot.img
Replace the XXXX for the following:
console=ttyHSL0,115200,n8 androidboot.hardware=g2 user_debug=31 msm_rtb.filter=0x0 mdss_mdp.panel=1:dsi:0:qcom,mdss_dsi_g2_lgd_cmd androidboot.selinux=permissive
Do not remove the quotes. Replace the panel model (red) for your model. if you are compiling for stock KitKat, remove everything that is green.
Click to expand...
Click to collapse
Now let's add a "signature" in your kernel for the damn locked LG G2 bootloader so you can not be invalidated. If you do not do this procedure, the bootloader of your LG G2 will verify that this kernel has a particular signature, as it does not have your device will be unable to boot. We have two tools for this, Loki is able to fool the bootloader and open_bump (This tool is controversy) is able to add a "valid" signature using illegal means. I'll show how to use both. To this is very simple..
open_bump method:
You need Python to run any Python code, open_bump requires Python 2.x
Code:
git clone https://github.com/CyboLabs/Open_Bump
cd Open_Bump && python open_bump.py ~/android/mykernel/out/boot.img
You will now have an output "boot_bumped.img".
loki_tool method:
First get a copy of the bootloader of your G2, For this you need the adb installed and your G2 properly connected to your PC.
Get bootloader:
Code:
sudo apt-get install android-tools-adb
adb devices && adb shell "su -c dd if=/dev/block/platform/msm_sdcc.1/by-name/aboot of=/sdcard/aboot.img"
adb pull /sdcard/aboot.img
Do not forget the USB debugging enabled
Patch kernel:
Code:
./loki_patch boot aboot.img ~/android/mykernel/out/boot.img ~/android/mykernel/out/loki_boot.img
Will generate an output "loki_boot.img" on mykernel/out folder.
You can install using "my easy installer" (Attached at the end of post):
Download the attachment and extracted, Place your boot.img in the delta folder and
copy all the modules that are in your kernel source for the modules folder:
Code:
find ~/android/mykernel/msm8974/. -name "*.ko" -type f -exec cp {} ~/android/mykernel/installer/system/lib/modules \;
Now zip folder and install on your device. This installer already have panel detection script by @dr87
{
"lightbox_close": "Close",
"lightbox_next": "Next",
"lightbox_previous": "Previous",
"lightbox_error": "The requested content cannot be loaded. Please try again later.",
"lightbox_start_slideshow": "Start slideshow",
"lightbox_stop_slideshow": "Stop slideshow",
"lightbox_full_screen": "Full screen",
"lightbox_thumbnails": "Thumbnails",
"lightbox_download": "Download",
"lightbox_share": "Share",
"lightbox_zoom": "Zoom",
"lightbox_new_window": "New window",
"lightbox_toggle_sidebar": "Toggle sidebar"
}
Finally now you have your own kernel! Now I will show the second method of how to automatic compile your kernel using my tool.
To rebuild you have to use the following:
Code:
make clean && make mrproper
make MODEL_defconfig
make -j4
Click to expand...
Click to collapse
Some tips
To not export the toolchain path every time you restart the system, Create a Shell executable in /etc/profile.d as follows:
Code:
sudo nano /etc/profile.d/export_gcc.sh
Copy and paste:
export PATH=~/android/mykernel/arm-cortex_a15-linux-gnueabihf-linaro_4.9/bin:$PATH
Click to expand...
Click to collapse
CTRL + X, Y, ENTER
Now you just use:
Code:
export ARCH=arm
export CROSS_COMPILE=arm-eabi-
Useful guides:
If you are new, you can start learning about git, One of the main tools for working with modifications to your kernel. Below I leave some links with some guides that can help you.
How to use Github
How to cherry-pick a github commit
Click to expand...
Click to collapse
DCC is a tool I developed to simplify my day, DCC is just a simple Python code that can help you save your time! See the features:
Command-line arguments like M$'s DiskPart
Real-time Shell executer
Manage builds for AOSP and LG ROMs
Build for single or ALL variants in same time
Manage the parameters of your kernel
DCC works with embedded open_bump
Manage your favorite toolchain
Easy to configure and use
I'll show how to use DCC is easy
Setup kernel environment:
Code:
reset && cd $HOME
mkdir dev && cd dev
git clone https://github.com/ferreirawax/dcc
cd dcc && find . -name '.gitignore' -delete
git clone https://github.com/ferreirawax/ramdisk_g2_aosp ramdisk/aosp
git clone https://github.com/ferreirawax/kernel_lge_msm8974-patched msm8974/aosp
Build kernel:
Code:
python dcc.py
do boot d802
exit
You know what happens to these magical commands? An immediate flashable zip of your kernel ready to flash. But for that you need to "setup" to your taste, see the page on github.
@ferreirawax this is great i was waiting for something like this so much, tommorow i will try your guide and post the results
EDIT
I followed everything and got stuck here:
[email protected]:~/android/mykernel/msm8974$ make clean && make mrproper
make: /home/simex/android/mykenel/arm-cortex_a15-linux-gnueabihf-linaro_4.9/bin/arm-eabi-gcc: Command not found
THANKS for help
EDIT 2
I tried method with DCC and im stuck here:
[email protected]:~/dev/dcc$ python dcc.py
Traceback (most recent call last):
File "dcc.py", line 19, in <module>
from colorama import *
ImportError: No module named colorama
[email protected]:~/dev/dcc$
Sorry if im annoying but i hope someone can help me
Boris31 said:
@ferreirawax this is great i was waiting for something like this so much, tommorow i will try your guide and post the results
EDIT
I followed everything and got stuck here:
[email protected]:~/android/mykernel/msm8974$ make clean && make mrproper
make: /home/simex/android/mykenel/arm-cortex_a15-linux-gnueabihf-linaro_4.9/bin/arm-eabi-gcc: Command not found
THANKS for help
EDIT 2
I tried method with DCC and im stuck here:
[email protected]:~/dev/dcc$ python dcc.py
Traceback (most recent call last):
File "dcc.py", line 19, in <module>
from colorama import *
ImportError: No module named colorama
[email protected]:~/dev/dcc$
Sorry if im annoying but i hope someone can help me
Click to expand...
Click to collapse
This error happens when the toolchain path is wrong.
Colorama module need to use DCC (I forgot to mention that)
Code:
sudo pip install colorama
Really exited to see sutch a complete guide for how to make a kernel for our G2
Will try and see if I can manager to compile my first kernel with this guide today..
ferreirawax said:
This error happens when the toolchain path is wrong.
Colorama module need to use DCC (I forgot to mention that)
Code:
sudo pip install colorama
Click to expand...
Click to collapse
ok thanks i got i working
---------- Post added at 10:43 AM ---------- Previous post was at 10:21 AM --------- @ferreirawax you got a typing mistake here thats why method 1 didnt work i finaly figured it out:
Export Architecture and Toolchain:
Code:
export ARCH=arm
export CROSS_COMPILE=~/android/mykenel/arm-cortex_a15-linux-gnueabihf-linaro_4.9/bin/arm-eabi-
It should be myKERNEL and that it works
Now i succesfully build my kernel but im having problems with bump, i cant get past this:
[email protected]:~$ python open_bump.py ~/android/mykernel/out/boot.img
python: can't open file 'open_bump.py': [Errno 2] No such file or directory
but im sure its there i tryed nearly everything but cant get bumped boot.img
Thank you!!!! I have wanted something like this to compile different kernels .
It would have been totally awesome if @dorimanx did a tutorial once where he shared how he makes his (stock) kernels..anyways will this work on a 11 year old PC with 1gb RAM and 1,7 GHz processor?
any help for bumping boot.img ?
Boris31 said:
any help for bumping boot.img ?
Click to expand...
Click to collapse
http://forum.xda-developers.com/showthread.php?p=56987541
(OP gave cmd lines too)
6ril1 said:
http://forum.xda-developers.com/showthread.php?p=56987541
(OP gave cmd lines too)
Click to expand...
Click to collapse
Yeah thanks i finally got it
Norside said:
It would have been totally awesome if @dorimanx did a tutorial once where he shared how he makes his (stock) kernels..anyways will this work on a 11 year old PC with 1gb RAM and 1,7 GHz processor?
Click to expand...
Click to collapse
This is willpower
Boris31 said:
Yeah thanks i finally got it
Click to expand...
Click to collapse
Now you have what start modifying your kernel!
ferreirawax said:
Now you have what start modifying your kernel!
Click to expand...
Click to collapse
Yeah finally i'v built a kernel now i need to learn to modify it. Any good guide for that maybe
Boris31 said:
Yeah finally i'v built a kernel now i need to learn to modify it. Any good guide for that maybe
Click to expand...
Click to collapse
For that you need to read a little about git, then see the changes made by other developers and place them in your own kernel.
ferreirawax said:
For that you need to read a little about git, then see the changes made by other developers and place them in your own kernel.
Click to expand...
Click to collapse
Thanks, I'm finally beginning to understand Linux terminal commands.
@ferreirawax
I am aware that the rules prohibit posting simple thanks but I feel duty do it here because it is really nice to find shared topics showing how to fish rather than giving fish.
Big thank you to you so, great initiative !
@ferreirawax
Thanks for taking the time to post this. I would love for more people to try their hand at Custom Kernels! Otherwise you end up with the same kernel, different name.
DTB combiner:
Input directory: '/home/bolt890/dev/dcc/msm8974/aosp/arch/arm/boot/'
Output file: '/home/bolt890/dev/dcc/outputs/dt.img'
Found file: msm8974-v2-2-g2-open_com.dtb ... skip, failed to scan for 'qcom,msm-id = <' tag
Found file: msm8974-v2-g2-open_com.dtb ... skip, failed to scan for 'qcom,msm-id = <' tag
Found file: msm8974-g2-open_com.dtb ... skip, failed to scan for 'qcom,msm-id = <' tag
=> Found 0 unique DTB(s)
error: dt.img not found, failed to make target
Keep getting this error
bolt890 said:
DTB combiner:
Input directory: '/home/bolt890/dev/dcc/msm8974/aosp/arch/arm/boot/'
Output file: '/home/bolt890/dev/dcc/outputs/dt.img'
Found file: msm8974-v2-2-g2-open_com.dtb ... skip, failed to scan for 'qcom,msm-id = <' tag
Found file: msm8974-v2-g2-open_com.dtb ... skip, failed to scan for 'qcom,msm-id = <' tag
Found file: msm8974-g2-open_com.dtb ... skip, failed to scan for 'qcom,msm-id = <' tag
=> Found 0 unique DTB(s)
error: dt.img not found, failed to make target
Keep getting this error
Click to expand...
Click to collapse
Seem to lack the DTC binary on your system. Download the attachment and follow:
Code:
sudo cp ~/dtc.zip /usr/bin/dtc
Or you can simply remove the extension and copy the file to /usr/bin any other way, may be necessary to a log-in/out for effect. Then compile again.

Categories

Resources