[Thunderbolt General] adrynalyne:
Updated. You can find an easier to use and more up to date version here:

http://rootzwiki.com/topic/8824-howto-compile-your-own-kernel-v-01/

Hey folks,

Figured I would throw this out there for those who may want to know just what goes into compiling a kernel, and possibly, doing it themselves. This is a WIP, and is more about how to compile, than how to make changes to source or customize your own kernel.

Needed:

Linux. For this case, we will assume Ubuntu 10.10, 64 bit. This can be done with 32 bit as well, but you will need a different cross compiler.

Download | Ubuntu

dsixda's kitchen. So that we can easily split and repack kernels.

https://github.com/dsixda/Android-Kitchen/archives/master

Source. You can use mine. Its fairly heavily tweaked, and compiles without any modifcations.

https://github.com/adrynalyne/kernel_htc-mecha

A cross compiler toolchain. Because I use 64 bit linux, I use a 64 bit cross compiler.

http://rapidshare.com/files/394529815/HikaRi_toolchain_4.4.4.tbz2

(Credit adwinp from XDA)

Introduction

First, we install Ubuntu. I won't be going through that, however. So, assuming we have Ubuntu already installed, and working, we are ready to dive right in.

First, we need a tool Ubuntu does not install by default. This is called git. From a terminal:

Getting Source Code

sudo apt-get install git

Once git is installed, we can grab our source. Using a terminal:

[chaos@oblivion ~]$

code

mkdir android
cd android
mkdir kernels
cd kernels
git clone git://github.com/adrynalyne/kernel_htc-mecha.git

Depending on your connection, this could take a while.

This will create a kernel_htc-mecha directory under your /home/username/android/kernels folder.

Grabbing Toolchain

Now we will grab the toolchain. Download it, decompress it, and just leave it in the 4.4.4 directory. Move it to your android directory.

Grabbing and setting up the kitchen

Download the kitchen from the link given above, and decompress it. Rename it to kitchen. Move it to your android directory. Then from a terminal:

code

cd ~/android/kitchen
chmod 755 menu
./menu

This installs the kitchen and starts it up. Now the first thing we need to do is setup a working directory. Take a rom, any rom, and copy it to the ogiinal_update folder inside the kitchen. You can then setup your working folder.

Inside the working folder, delete boot.img. Grab, one of say, my kernels, and extract it. Take boot.img from the extracted contents and copy to the kitchen.

To split the initramfs (ramdisk) from the kernel, simply choose 0 from the menu, then 20. Hitting w will extract the kernel to a BOOT-EXTRACTED directory inside the kitchen (not working folder). Inside that folder, you will find the ramdisk and a zImage. The zImage is the kernel. We will stop there for now.

Compiling the kernel

First, we move to the kernel directory.

code

cd ~/android/kernels/kernel_htc-mecha

To compile the kernel, first we must have a configuration file ready. To do this:

code

make mecha-lte_defconfig

It will configure the system for compiling.

Now to compile the kernel:

code

make -j5 ARCH=arm CROSS_COMPILE=/home/username/android/4.4.4/bin/arm-none-eabi-

Where username is your, well, username and the number after j (thats a J) is the number of cpus +1.

Depending on the speed of your system. a zImage should be created within 3-30 minutes.

Packing the kernel

The zImage will be located under ~/android/kernels/kernel_htc-mecha/arch/arm/boot directory.

We will copy that zImage into the BOOT-EXTRACTED directory of the kitchen. Then, back at our menu for the kitchen, we hit 'b' to build the kernel. Within seconds, there is a new boot.img inside our Working folder. Now, remember my kernel package you downloaded? Well, time to kang the installer! The directory you unzipped contains a META-INF and system directory. You need both of those. Copy the boot.img in with those two folders.

So, our directory layout currently looks like so:

META-INF

system

boot.img

We need one more file, the wifi driver, from our compiled source.

Under ~/android/kernels/kernel_htc-mecha/drivers/net/wireless/bcm4329_204 you will find a file named bcm4329.ko. Copy this into system/lib of your new kernels installer directory.

Zip these three folders and give it a name. Now its ready to install.

A couple of things of note:

You almost always have to match the wifi driver with the kernel.

make clean mrproper will clean all the precompiled and temp fikes out of your source. This is recommended when making major source changes. Don't forget to remake your configuration after running it though.

Troubleshooting

There may be some files not found errors. Please be careful with these commands.

If the files not found are libcloog.so.0 and/or libmpfr.so.1, take a look below.

sudo ln -s /usr/lib/libcloog-debian.so.0 /usr/lib/libcloog.so.0
sudo ln -s /usr/lib/libmpfr.so.4 /usr/lib/libmpfr.so.1