Mar 29, 2012

Gentoo amd64 Android Building

Well ... setting-up a Gentoo Linux system always painful ... :-) . But gentoo linux was born in 1999 and still alive up to 2012. I was gentoo user and shift to ubuntu. I fallen in love to ubuntu mostly because their community, their ability to serve "common pc user" in using Linux Platform, ubuntu brought linux into wider audience. Gentoo is different in Philosophy at least with ubuntu. Gentoo is flexibility where ubuntu is Just Work. I need this flexibility and come back to gentoo.

I brought down a ThinkCentre all in one desktop a70e from office :-) ... with the following basic specifications :
00:00.0 Host bridge: Intel Corporation 4 Series Chipset DRAM Controller (rev 03)
00:02.0 VGA compatible controller: Intel Corporation 4 Series Chipset Integrated Graphics Controller (rev 03)
00:1b.0 Audio device: Intel Corporation N10/ICH 7 Family High Definition Audio Controller (rev 01)
00:1c.0 PCI bridge: Intel Corporation N10/ICH 7 Family PCI Express Port 1 (rev 01)
00:1c.1 PCI bridge: Intel Corporation N10/ICH 7 Family PCI Express Port 2 (rev 01)
00:1c.2 PCI bridge: Intel Corporation N10/ICH 7 Family PCI Express Port 3 (rev 01)
00:1d.0 USB controller: Intel Corporation N10/ICH 7 Family USB UHCI Controller #1 (rev 01)
00:1d.1 USB controller: Intel Corporation N10/ICH 7 Family USB UHCI Controller #2 (rev 01)
00:1d.2 USB controller: Intel Corporation N10/ICH 7 Family USB UHCI Controller #3 (rev 01)
00:1d.3 USB controller: Intel Corporation N10/ICH 7 Family USB UHCI Controller #4 (rev 01)
00:1d.7 USB controller: Intel Corporation N10/ICH 7 Family USB2 EHCI Controller (rev 01)
00:1e.0 PCI bridge: Intel Corporation 82801 PCI Bridge (rev e1)
00:1f.0 ISA bridge: Intel Corporation 82801GB/GR (ICH7 Family) LPC Interface Bridge (rev 01)
00:1f.2 IDE interface: Intel Corporation N10/ICH7 Family SATA Controller [IDE mode] (rev 01)
00:1f.3 SMBus: Intel Corporation N10/ICH 7 Family SMBus Controller (rev 01)
02:00.0 Network controller: Broadcom Corporation BCM43225 802.11b/g/n (rev 01)
03:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168B PCI Express Gigabit Ethernet controller (rev 03)


CPU
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 23
model name : Pentium(R) Dual-Core CPU E5500 @ 2.80GHz

processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 23
model name : Pentium(R) Dual-Core CPU E5500 @ 2.80GHz


Gentoo Installation & Android Build
Again I set prebuilt profile for gentoo 10.0/desktop/gnome ... since I wish to build android kernel and rom with this machine and android still in 32 bit camps, I need to make gentoo multilib machine, it is mean the amd64 architecture must be able to run 32 bit library, we need to merge emul-linux-86-baselibs
How about java ? since android only support oracle(formerly)sun-jdk, I merge sun-jdk-1.6.0.31 x86_64 linux package by downloading from THIS PAGE > put in folder /usr/portage/distfiles. and run emerge -av sun-jdk
Since I dont wanna to deal with various JDK and I wish to build gingerbread and higher, I just need jdk-1.6, let us ensure system and user using this jdk
Gentoo x11 # java-config --list-available-vms
The following VMs are available for generation-2:
*) Sun JDK 1.6.0.31 [sun-jdk-1.6]

Android repo init error
When I run android repo initializing I got errors
[x11@Gentoo] [aospgb] > repo init -u https://android.googlesource.com/platform/manifest
File "/opt/bin/repo", line 180
except OSError, e:
^
SyntaxError: invalid syntax

Solution
As Root # emerge av python:2.7
As user $ mkdir ~/bin ... you probably have already this one
As user $ cd ~/bin
As user $ ln -sy /usr/bin/python2 ~/bin/python
This is to create symlinks from python2 to be used for user related to repo, where file repo for android in similar folder ~/bin
export PATH=~/bin:$PATH to ensure your PATH, or you can add the line to ~/.bashrc file and test
[x11@Gentoo] [gbaosp] > repo init -u https://android.googlesource.com/platform/manifest
remote: Counting objects: 28, done
remote: Finding sources: 100% (22/22)
remote: Getting sizes: 100% (11/11)
remote: Compressing objects: 100% (5/5)
remote: Total 22 (delta 9), reused 22 (delta 9)
Unpacking objects: 100% (22/22), done.
From https://android.googlesource.com/platform/manifest

run flawlessly

Android rom build error after "make"
[x11@Gentoo] [rom] > make -j5 otapackage
============================================
PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=2.3.6
TARGET_PRODUCT=msm7627_surf
TARGET_BUILD_VARIANT=eng
TARGET_SIMULATOR=false
TARGET_BUILD_TYPE=release
TARGET_BUILD_APPS=
TARGET_ARCH=arm
HOST_ARCH=x86
HOST_OS=linux
HOST_BUILD_TYPE=release
BUILD_ID=GRK39F
============================================
File "build/tools/findleaves.py", line 95
print r
^
SyntaxError: invalid syntax
File "build/tools/findleaves.py", line 95
print r
^
SyntaxError: invalid syntax
No private recovery resources for TARGET_DEVICE msm7627_surf
amake: *** No rule to make target `out/host/linux-x86/bin/mkbootimg', needed by `out/target/product/msm7627_surf/boot.img'. Stop.

Solution
the error itself give us clear clue ..... File "build/tools/findleaves.py", line 95 it must be related to python
As user $ cd ~/bin
As user $ ln -s /usr/bin/gmake ~/bin/amake


I create amake file symlinks to /usr/bin/gmake just to easy remember when I need to "make" android my command is amake, sure you can create whatever the name you like ...:-))

Update on Mar 31, 2012
Realizing the weird build is related to pythong ... realized, Gentoo active python is 3.2, refers to AOSP PAGE
Quote :
In general you will need:
Python 2.5 -- 2.7, which you can download from python.org.
Check available python in my gentoo system:
# eselect python list :
[1] python2.7
[2] python3.2*
Changed > # eselect python set 1
Checked :
[1] python2.7 *
[2] python3.2

Test Build
[x11@Gentoo] [rom] > amake -j5 otapackage
============================================
PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=2.3.6
TARGET_PRODUCT=msm7627_surf
TARGET_BUILD_VARIANT=eng
TARGET_SIMULATOR=false
TARGET_BUILD_TYPE=release
TARGET_BUILD_APPS=
TARGET_ARCH=arm
HOST_ARCH=x86
HOST_OS=linux
HOST_BUILD_TYPE=release
BUILD_ID=GRK39F
============================================
Clean step: rm -rf out/target/product/msm7627_surf/obj/APPS/Camera*
Clean step: rm -rf out/target/common/obj/APPS/Camera*
Clean step: rm -f out/target/product/msm7627_surf/system/app/Nfc.apk
Clean step: rm -rf out/target/common/obj/APPS/LatinIME*
Clean step: rm -rf out/target/product/msm7627_surf/system/app/LatinIME.apk

..... CUT in this post

Conclusion
Gentoo amd64 is good machine to build android kernel and rom
python:2.7 is the accepted python library for android right now
sun-jdk 1.6 x86_64 is acceptable library for android
Multilib is mandatory right now
Make 2.82 is acceptable

welcome to ... compiling fest

Mar 23, 2012

Daily Linux Distro

I have been working for shipping company, the company dealing in owning, operating ship and also having agency department to server ship agency service. My hobby is dealing with open source software, and focused on linux personal computer machine, since I did not deal with "server" , "robot", "main frame machine" or other kind of machine. I used personal computer merely to support my work and now my hobby :D
At first time in touch with linux I got RedHat (4) and shortly falling in love with Mandrake. I tried slackware, debian and gentoo. Finally in love with gentoo. Ubuntu born in 2004 but I got in touch with ubuntu on the end of 2005 and loved it a lot. Since then ubuntu GNU/Linux is my daily distro for work and fun on desktop, meanwhile for laptop I prefer gentoo. I used ThinkPad T61 (Lenovo T61) 2007 edition. This is legendary LapTop ... why (?) coz this edition is LAST edition with "IBM ThinkPad" logo along with Lenovo Logo. The laptop "die" in 2010 and let it lay on the drawer. I trade the Motherboard ... but can not find equal one, so I toke T61 with intel VGA Chipset, mine is Nvidia Quadro VGA chipset ... well I prefer Nvidia than Intel for VGA. My T61 is alive ...
This is the basic specification
CPU : Intel(R) Core(TM)2 Duo CPU T7300 @ 2.00GHz
wifi : Network controller: Intel Corporation PRO/Wireless 4965 AG or AGN [Kedron]
ethernet : Intel Corporation 82566MM Gigabit Network Connection
VGA : Intel Corporation Mobile GM965/GL960 Integrated Graphics Controller
CardBus bridge: Ricoh Co Ltd RL5c476 II
SATA controller: Intel Corporation 82801HM/HEM (ICH8M/ICH8M-E) SATA Controller [AHCI mode]
Audio device: Intel Corporation 82801H (ICH8 Family) HD Audio Controller
RAM : 4 GB

Pick Up a Linux Distro
I put ubuntu amd64 alive ... and well prepared partition for having gentoo amd64 reside. But never find good time to install my favourite distri : GENTOO !!! and last week I have sufficient time to do. Picked up stage3 tarball as i dont have time to deal with stage1 or stage2 :). This is my parition lay out
/dev/sda1 ext3 60 GB for gentoo
/dev/sda2 ext3 10 GB for ubuntu
/dev/sda5 ext4 229.5 GB for home data
/dev/sda6 swap 528 MB for swap space

My setting is no need big swap space for suspend mode. I set suspend to RAM only ... Not to Disk. Today RAM having sufficient size for tackling a lot of thing. Installation went well for basic set up. I did everything including gnome-light in chroot environment
Ubuntu Grub2 smoothly picked up Gentoo and booting on X smoothly, with basic saoftware installed
- Basic Gentoo amd64 system prebuilt profile amd64/10.0/gnome
- Libreoffice 3.4.5
- Gimp 2.6.11
- Inkcape 0.48
- Shotwell 0.11.6
- Evince 2.32
- Firefox 10.0.1
- Brasero 2.32.1
- Gedit 2.30.4
- Gnome 2.32.1 light
- Gnome Terminal 2.32.1
- GDM 2.20
- Xorg-server 1.11


WHAT IS PROBLEM ...? sun-jdk1.6.0.31 32 bit .... YESSS this package make some hazle to be well operated. Thus all my android rom source tree is NOT usable so far.
I need to take a look and find out how to install sun-jdk 32 bit on gentoo amd64 system with proper functionality for android development.
After some googling and discuss with friends, in fact android rom build is accepted 64 bit java in 64 bit operating system. I discharge 32 bit sun-jdk and install only 64 bit sun-jdk 1.6.0.31, appoint the java library to this 64 bit version and everything went well.
Have nice weekend.......

Mar 22, 2012

Android (Gingerbread) Kernel for Dell Venue

Finally after long search and learn, I got compiled android kernel booting into Dell Venue (Thunder). The biggest obstacle to build android rom is availability of kernel. But In fact kernel is only 60% of boot image (an Image file bootable into a device). This very small pieace of image play very important role. It was only about 3.5 MB up to 5 MB. Comparing to plain android rom size about 80 MB, the kernel is NOTHING !!!

How I do ? ... I use default Kernerl Source Tree downloaded from Dell Sites Here It Is, save somewhere in your home folder > extracted and start configuration. The configuration is obvious, but Dell Provide a clue ... read venue-HOW-TO-BUILD.txt file. There are many options (at least I knew two options) to build android kernel for dell venue. First build entirely by using android source tree. This will make you download large of file android source tree. Well I need to test just only kernel, thus No need to download android source tree.
This Post, This Post and, This Post is NOOBPROOF guide to build android kernel for dell venue, sure you can build for other device.!

I used prebuilt available configurations in the source > Just check in terminal within your folder of android kernel source tree you downloaded >
$ls arch/arm/configs/
among many configurations available, I toke > qsd8650-perf_defconfig
Note : By Default for Dell Venue the config is toucan-perf_defconfig

Execute >
$ armmake qsd8650-perf_defconfig
after configuration output execute
$ armmake -j5

AND WAIT ... on my Intel core two dua T750 chipset with 4GB physical ram toke about 14 minutes. From This Post, you know how to split a boot.img into ramdisk and kernel. We are going to "borrow" the ramdisk file and repack with our build kernel. Splitted ramdisk file (it is a folder) named mtd0-ramdisk ... you can rename to whatever name of folder you like :D
Presumed we are in folder with a zImage file from our build and a ramdisk folder named mtd0-ramdisk >
$ gedit mtd0-ramdisk/default.prop
AN TEXT EDITOR WINDOW WILL COME UP and edit the text ro.secure=1 to ro.secure=0
This will make your flashed device have writable system, save and closed
$ mkbootfs mtd0-ramdisk | gzip > venue-ramdisk
[Enter] a file named venue-ramdisk will be created, this is gzipped ramdisk file
$ mkbootimg --kernel zImage (YourNameOfKernel) --ramdisk venue-ramdisk --pagesize 2048 --board venue --cmdline "androidboot.hardware=venue" --base 0x20000000 -o venueboot.img [ENTER]

Your flashable boot image is venueboot.img, flashable via fastboot. Boot your venue to fastboot >
$ sudo fastboot erase boot [ENTER]
$ sudo fastboot flash boot venueboot.img [ENTER]
$ sudo fastboot reboot [ENTER]

BINGO !!!

Dell Venue booting customs kernel ... Normally wifi will not properly function due to wifi module will work by using the compiled one with the kernel. Connect your android booting device to PC with adb live. Search file wifi module in kernel source tree folder. >
$ ls drivers/net/wireless/bcm4329/dhd.ko <--THIS IS WIFI MODULE
$ sudo adb start-server [if not already started]
$ adb remount
if you dont see word > remount:success ... its something wrong there
$ sudo adb push drivers/net/wireless/bcm4329/dhd.ko /system/lib/modules/
$ adb reboot
WIFI MUST WORK ....Happy Flashing !!

Mar 19, 2012

Parody of Android Kernel

Well we have reference how to set our PC up for android kernel development AT DELL VENUE PAGE and How to prepare kernel compilation at BUILDING ANDROID KERNEL FROM SOURCE in LINUX .
Question ?
How to obtain kernel config file and named into .config [read : DOTconfig]. On the previous page, we obtain config file by pulling from a live device. If you don't have live device and wanna to leran how to compile an android kernel, we can use available prebuilt configuration located at folder ~/kernel/arch/arm/configs let us see what are available for msmgit kernel source . On terminla in the folder where you store kernel tree, execute >
[x@ThinkPad msm-kernel]$ ls arch/arm/configs
acs5k_defconfig
iop13xx_defconfig
omap_innovator_1610_defconfig
ezx_defconfig
omap3_defconfig
surf7x30_defconfig
footbridge_defconfig
omap3_evm_defconfig
swordfish_defconfig
..... AND MANY MORE defconfig file you can utilized


Let say you wanna to build a android kernel for swordfish board, then on terminal just execute a command >
$armmake swordfish_defconfig

You will have DOTconfig file among kernel tree. To compile the kernel then just execute >
$armmake swordfish_defconfig
Output will be
#
# configuration written to .config
#
Then execute another command >
$time armmake -j5

... and wait long phyton process ... average to compile a android kernel about 15-35 minutes


For lucks and No Error ... kernel will be available at folder [KERNER_TREE_STORED_FOLDER]/arch/arm/boot .. named zImage
If you read any warning .. just ignore, warning is No Problem. They are normally just unresolved BUGS from kernel hackers. But once you face ERROR and build process STOP ... the disaster is coming. We probably DO NOT KNOW anything the cause of error. It's time to do GOOGLING, joining kernel-dev mailling list or forum.

Flashing kernel to a Device
From above process, let say we have dell-venue. Connect dell venue live device to PC with adb obtain kernel config file, by execute >
$ sudo adb start-server
$adb pull /proc/config.gz
$gunzip config.gz > .config
$armmake menuconfig

...EDIT WHAT YOU WANT OR JUST LET AS DEFAULT...
...save cnfig file
$time armmake -j5

Presumed, we can tackle all error and successfully build a kernel image. The pain is not over :D .... since we need to do something to flash the kernel into the device. Now we are in the kernel tree folder with success build of an android kernel image. store somewhere the kernel image for further use. Execute a comman >
$mkdir ~/dell-kernel
we create a folder to store built kernel
$ cp arch/arm/boot/zImage_SPACE_~/dell-kernel/
Clean the kernel tree for further use
$armmake distclean
Start working with kernel image
$cd ~/dell-kernel

Now we are in dell-kernel folder. Theoritically we can TEST our kernel build, it will bootable into device or not :D ... turn your dell venue device into boot loader mode (fastboot). Your dell venue device is connected to PC with adb alive. Execute >
$adb reboot bootloader
... dell venue device should turn into bootloader mode

To turn dell venue into bootloader mode without adb we can set in the device > set vibrate button > press power button + volume down button simultaneously


Dell Venue on Fastboot mode >


Theoritically .. we can flash kernel image (zImage in this case) into device to see the image bootable or not. Execute >
$sudo fastboot boot zImage

zImage is the file name of kernel image
device should be reboot (if everything goes well) and new kernel alive booting on the device
. In real life, the thing never so easy. If you test by that way kernel not booting, or something wrong happened. let us do test, that our kernel build is in proper and bootbale kernel. To enable flash the kernel into a device, we need to turn the image into flashable image and packed with RAMDISK. What is ramdisk ... just googling to learn. How to create ramdisk? this page will not guide how to create ramdisk. This guid is specific we will use available ramdisk to test our kernel build for dell venue.
In short wen are going to "borrow" ramdisk from live bootable image and packed with our build kernel and flashed to dell venue to test. Our build is correct
. Let us find boot image which is proved bootable into dell venue. I toke 408-frimware of dell venue and toke the boot image (usually named boot.img. If you don't have download 408 VENUE BOOT IMAGE FILE save into you home folder you can put in the dell-kernel forlder we create previously.
We need to split this boot.img file to have kernel and ramdisk, edit the ramdisk (if we wish), repacked with our own kernel and flash into device. Some additional tools is required. Nevermind ... I provide for you. Download tools IMAGE TOOLS . Extract somewhere in the forlder and The important file for our operations are :
- split_bootimg.pl
- unpack_bootimg.pl
- repack_bootimg.pl
- mkbootfs
- mkbootimg
We have two options to store these executable files.
1. Store in the folder ~/bin and export the PATH to enable ~/bin functining globally. Presumed we are in the folder where we store above files and wanna to copy to ~/bin folder. Execute >
$cp split_bootimg.pl unpack_bootimg.pl repack_bootimg.pl mkbootfs mkbootimg_SPACE_~/bin
$chmod +x ~/bin/*
NOTE : if you set up properly the development environment as DECRIBED HERE you ~/bin folder is in your path. Otherwise you need to export the PATH


2. Store above five files into /usr/bin. You need cp command like above and the destination folder is /usr/bin.Execute >
$cp split_bootimg.pl unpack_bootimg.pl repack_bootimg.pl mkbootfs mkbootimg_SPACE_/usr/bin
$sudo chmod +x /usr/bin/*
NOTE : We need SUDO, due to /usr/bin is not accessible by our regular user. We need root previllege to modify files there

We have all required tools for this action. Navigate to > $ cd ~/dell-kernel in this folder we have boot408.img and zImage file. We are going to have fun with these TWO files.
We need to split boot408.img to have "kernel" and "ramdisk" and we going to "borrow" ramdisk file repack with our own kernel and flash into device. Execute >
$split_bootimg.pl_SPACE_boot408.img
WATCH THE OUTPUT DURING EXCUTE THIS COMMAND SINCE YOU WILL SEE VERY IMPORTANT INFORMATION
Page size: 2048 (0x00000800)
Kernel size: 3092536 (0x002f3038)
Ramdisk size: 168270 (0x0002914e)
Second size: 0 (0x00000000)
Board name:
Command line: androidboot.hardware=venue
Writing boot408.img-kernel ... complete.
Writing boot408.img-ramdisk.gz ... complete.
I SUGGESTED YOU COPY ALL OUTPUT TEXT AND PASTE INTO TEXT EDITOR AND SAVE WITH file name dell-venue-kernel-detils.txt SAVE ANYWHERE YOU LIKE

Now in folder ~/dell-kernel we have files>
boot408.img
boot408.img-kernel
boot408.img-ramdisk.gz
zImage

We are going to make it simple. Test our kernel. We need to create bootable image consisted of our kernel (zImage) and ramdisk (boot408.img-ramdisk.gz). Execute the following command >
$mkbootimg --kernel zImage --ramdisk boot408.img-ramdisk.gz --pageszie 2048 --cmdline "androidboot.hardware=venue" --base 0x20000000 -o venueboot.img

The bootable image NAMED venueboot.img should be there, and flashable to device via fastboot
$sudo fastboot flash boot venueboot.img
THREE minimum option : --pagesize --cmdline --base (ARE MANDATORY) otherwise our bootimage will NOT BOOTABLE. Check the mkbootimg usage here>
[x@ThinkPad test]$ mkbootimg -h
usage: mkbootimg
--kernel [filename]
--ramdisk [filename]
[ --second [2ndbootloader-filename] ]
[ --cmdline [kernel-commandline] ]
[ --board [boardname>] ]
[ --base [address] ]
[ --pagesize [pagesize] ]
[ --ramdiskaddr [address] ]
-o|--output [filename]

Parody ...? Yess .. to just a build and make a kernel booting into our device. we need to collect so many informations, which is sometimes DID NOT available on the Internet......
Have Fun

Mar 15, 2012

Building Android Kernel From Source on Linux

In DELL VENUE THUNDER PAGE have been explained how to prepare a PC to develop little android project for own use.
Android as well as other operating system, having "hearth" ... the hearth of Android OS is the Kernel. Android kernel build based on Linux Kernel source code. Building android kernel is 87% similar with building linux kernel for PC (x86) machine. However to build Android Kernel need more trick. To build android kernel we can use full android system source tree, however if we want to have tweaked kernel only full android source tree is not required.
Get Prepared
To prepare your machine for little android development please visit Dell Venue Page. This article is "next step" of dell venue page and discuss to build android kernel only.
To enable build android kernel we need kernel source code. In general, kernel source code released by android phone vendor. However some Open Source Project also provide Kernel Source Code, they are :
1.AOSP - Android Open Source Project
2.CyanogenMod Project
3.Code Aurora Forum

This article will provide step by step guide to build android kernel from CyanogenMod source code. I have personal project to build android kernel for DELL VENUE, but at the point of time this article wrote. I still unable to have BOOTING KERNEL for Dell Venue. I wrote this article, expecting to have someone willing to work together and give me help to build booting kernel for dell venue with available source on Public with target to build full android rom for dell venue based on android 2.3.x and android 4.0.x (Hopefully)

Seting Up Toolchain
I used a PC which is x86 machine, thus I need toolchain to enable build a kernel for android phone with arm architecture. Use a lot of terminaling command on ubuntu linux machine (mine is 10.04 lts version). Open terminal and navigate to home folder. Many of toolchain available on internet. One of most popular is CodeSourcery. But I prefer to use prebuilt provided by google
$ git clone https://android.googlesource.com/platform/prebuilt

Aftef downloading complete we will have prebuilt folder in home folder and toolchain is inside prebuilt folder. I make it simple
Create Your own Tools
Basic instruction in command make (gnu linux basic command) within x86 PC is for PC architecture. In using toolchain and we do frequently due to learning or testing will very annoying to do long commands line like
$make ARCH=arm SUBARCH=arm CROSS_COMPILE=arm-eabi-

every time going to compile android kernel. To make it simple, I suggested create an executable file named armmake at /usr/bin folder. Open terminal (again) and type :
$sudo gedit /usr/bin/armmake
A gedit window will come up > copy and paste the following words :
#!/bin/bash
PATH=$PATH:~/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin
make ARCH=arm SUBARCH=arm CROSS_COMPILE=arm-eabi- $1

Saved abd closes, then execute
$sudo chmod a+x /usr/bin/armmake
$sudo chown YOUR_USER_NAME /usr/bin/armmake
This will safe your time in typing, anytime you need to compile arm kernel just execute > armmake !!
Downloading Kernel Source

As described at Dell venue Article. we have folder named cm7 at home folder. We need to create another folder named kernel in cm7 folder. Execute
$mkdir /~cm7/kernel
$cd ~/cm7/kernel
$git clone git://github.com/CyanogenMod/cm-kernel.git

This will download entire cyanogenmod kernel source and create cm-kernel folder
Complie and Build
From above we have complete kernel source tree from cyanogen project. To configure a kernel for certain device we need configuration file named .config How we can get this file (?) the best way is obtaining from a live android device. Ensure you have adb setting up properly and live. Connect a live device to usb port and execute command :
$sudo adb start-server
$sudo adb pull /proc/config.gz
Now we have config.gz file among kernel source tree
$gunzip config.gz > .config

We have everything to start setting kernel configuration and build a kernel for a device. Just execute :
$ armmake menuconfig

a window will come up like this image :


Completing your configuration or make necessary changed you want or just save and build to have exactly similar configuration with kernel on live device, now execute :
$time armmake -j5
Your kernel will be build. Command time is not mandatory, it is optional to know how long your machine compiling a kernel. If everything went well (mean WITHOUT ANY ERROR), a kernel will be ready at folder arch/arm/boot/zImage

Is it that Easy to build a kernel ?
The answer is YES ... thats all the basic instruction. However in real life, we probably face some error and make us clueless to solve the problem, since every one having specific error

Dell Venue (Thunder)

Dell VENUE, 4.1 inch WVGA AMOLED display with Gorilla Glass, 400x800 px resolution,8 MP Camera, packed 1 GHz, QSD 8250 processor, 1 GB ROM and 512 MB RAM, First Released November 2010 in Korea. Dell Venue is one of Popular Device in South Korea. Dell Venue (Thunder) powered by Android Froyo 2.2 OS and 12 months since date of released, No confirmation from Dell for OS Upgrade to Ginger Bread. Thus, Dell Venue become power full Hardware with obselete software :D
XDA DEVELOPER FORUM one of most popular forum related to PDA and SMART PHONE discussion, informed : latest available customs ROM is Ginger Bread 2.3 based by Olleh Korean Carrier. Look like, Dell Venue is one of Device ignored by the Vendor. Therefore, if you were owner of dell venue device and wish to have customs rom, you need to build rom yourself.

How To Build Android Rom
Android is a popular platform today for smart phone and other embedded device, it's open source. One of best available site to visit and read is Android Open Source Project [well known as AOSP], they explained very well how to prepare everything your machine to develop android.

Get Prepare
1. A set PC either desktop or laptop with minimum Pentium 4 class processor, 1.2 Ghz clock, 2 GB Ram, USB Ports, a Smart Phone device you wish to develop, in this case I use Dell Thunder or Dell Venue and off course Internet Connection.
2. Install PC with Ubuntu GNU/Linux operating system, for me is ubuntu 10.04 lucid lynx amd64. Standard installation from distro provider is not ready for developing android rom & kernel. Ubuntu need to be a little make up
3. Little skill and understanding of basic linux command line, familiarize your self to use terminal application

Installing Supporting Tools
Standard ubuntu amd64 need to install the following software package, connect to internet open gnome terminal Application > Accesories > Terminal. On the opening terminal window type :
$ sudo aptitude 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 xsltpro

Installing USB Driver for Android Therea two option to install android usb drivers on ubuntu 10.04, manual and automatic. To install android driver on ubuntu manually, use gnome terminal to create configuration at /etc/udev/rules.d/ folder. Open gnome terminal and type :
$ sudo gedit /etc/udev/rules.d/99-android.rules

a blank text window will be opened copy the following text and paste into opening text window
# ACER
SUBSYSTEM=="usb", SYSFS{idVendor}=="0502", MODE="0666", USER=x, GROUP=x
# ASUS
SUBSYSTEM=="usb", SYSFS{idVendor}=="0B05", MODE="0666", USER=x, GROUP=x
# DELL
SUBSYSTEM=="usb", SYSFS{idVendor}=="413C", MODE="0666", USER=x, GROUP=x
# FOXCONN
SUBSYSTEM=="usb", SYSFS{idVendor}=="0489", MODE="0666", USER=x, GROUP=x
# GARMIN-ASUS
SUBSYSTEM=="usb", SYSFS{idVendor}=="091E", MODE="0666", USER=x, GROUP=x
# Google
SUBSYSTEM=="usb", SYSFS{idVendor}=="18D1", MODE="0666", USER=x, GROUP=x
# Hisense
SUBSYSTEM=="usb", SYSFS{idVendor}=="109B", MODE="0666", USER=x, GROUP=x
# HTC
SUBSYSTEM=="usb", SYSFS{idVendor}=="0BB4", MODE="0666", USER=x, GROUP=x
# HUAWEI
SUBSYSTEM=="usb", SYSFS{idVendor}=="12D1", MODE="0666", USER=x, GROUP=x
# K-TOUCH
SUBSYSTEM=="usb", SYSFS{idVendor}=="24E3", MODE="0666", USER=x, GROUP=x
# KT Tech
SUBSYSTEM=="usb", SYSFS{idVendor}=="2116", MODE="0666", USER=x, GROUP=x
# KYOCERA
SUBSYSTEM=="usb", SYSFS{idVendor}=="0482", MODE="0666", USER=x, GROUP=x
# LENEVO
SUBSYSTEM=="usb", SYSFS{idVendor}=="17EF", MODE="0666", USER=x, GROUP=x
# LG
SUBSYSTEM=="usb", SYSFS{idVendor}=="1004", MODE="0666", USER=x, GROUP=x
# MOTOROLA
SUBSYSTEM=="usb", SYSFS{idVendor}=="22B8", MODE="0666", USER=x, GROUP=x
# NEC
SUBSYSTEM=="usb", SYSFS{idVendor}=="0409", MODE="0666", USER=x, GROUP=x
# NOOK
SUBSYSTEM=="usb", SYSFS{idVendor}=="2080", MODE="0666", USER=x, GROUP=x
# NVIDIA
SUBSYSTEM=="usb", SYSFS{idVendor}=="0955", MODE="0666", USER=x, GROUP=x
# OTGV
SUBSYSTEM=="usb", SYSFS{idVendor}=="2257", MODE="0666", USER=x, GROUP=x
# PANTECH
SUBSYSTEM=="usb", SYSFS{idVendor}=="10A9", MODE="0666", USER=x, GROUP=x
# PEGATRON
SUBSYSTEM=="usb", SYSFS{idVendor}=="1D4D", MODE="0666", USER=x, GROUP=x
# PHILIPS
SUBSYSTEM=="usb", SYSFS{idVendor}=="0471", MODE="0666", USER=x, GROUP=x
# PMC-SIERRA
SUBSYSTEM=="usb", SYSFS{idVendor}=="04DA", MODE="0666", USER=x, GROUP=x
# QUALCOMM
SUBSYSTEM=="usb", SYSFS{idVendor}=="05C6", MODE="0666", USER=x, GROUP=x
# SK TELESYS
SUBSYSTEM=="usb", SYSFS{idVendor}=="1F53", MODE="0666", USER=x, GROUP=x
# SAMSUNG
SUBSYSTEM=="usb", SYSFS{idVendor}=="04E8", MODE="0666", USER=x, GROUP=x
# SHARP
SUBSYSTEM=="usb", SYSFS{idVendor}=="04DD", MODE="0666", USER=x, GROUP=x
# SONY ERICSSON
SUBSYSTEM=="usb", SYSFS{idVendor}=="0FCE", MODE="0666", USER=x, GROUP=x
# TOSHIBA
SUBSYSTEM=="usb", SYSFS{idVendor}=="0930", MODE="0666", USER=x, GROUP=x
# ZTE
SUBSYSTEM=="usb", SYSFS{idVendor}=="19D2", MODE="0666", USER=x, GROUP=x


Please take note you need to change : USER=x with USER=Your Ubuntu User Name as well as on GROUP=x, let say your ubuntu username is jean, changed to USER=jane and GROUP=jane, letter x is my username on my ubuntu machine. Save and Close the text window.
Setting Up ADB and Fastboot
ADB -Android Debug Bridge- is tools to establish communication between your Android device when your android device on normal operations state [switch on and operate as normal functioning phone]and PC . Fastboot driver is tools to establish communication between your android device when at bootloader state and PC.
Download the following ADB and Fastboot, save and unpacked into your home folder or anywhere you like within your PC where you have write access. For example save the file you just downloaded at /home/jean/adb, ensure to make the file executable. Open terminal and type :
$chmod +x /home/jean/adb/adb
and
$chmod +x /home/jean/adb/fastboot
Your ADB and Fastboot set up now, next is make adb and fastboot accessible globally. Presumed adb and fastboot stored at folder /home/jean/adb. First option is move or copying adb abd fastboot file into /usr/bin/ folder, I made option to move the file with command mv if you wish to copy change mv with cp open terminal and type :
$sudo mv /home/jean/adb/adb-space-/usr/bin/
$sudo mv /home/jean/adb/fastboot-space-/usr/bin/
$sudo chmod 755 /usr/bin/adb
$sudo chmod 755 /usr/bin/fastboot
Installing USD Driver, ADB and Fastboot Automatically
A XDA Forum member wrote very usable scripts to install Android USB driver, ADB and Fastboot named knives-and-Forks, download Knives and Forks File, save and unpack somewhere at your home folder or anywhere you have write access. After unpacking you will have folder named Knived-and-Forks, look into text file named instruction.txt > opened and read, follow the instruction to install Android USB Driver, ADB and Fastboot automatically with very intuitive interface and easy to understand. I copied the instruction here and ensure you have active internet connection during doing this :
**** Linux ****
This was tested on Ubuntu 11.10 and Xubuntu 11.10. Please report your success or any errors you have running this on other versions or Linux distros.
- Download the latest version of Knives & Forks from http://android.katip.name
- Create a "knives-and-forks" folder in your user profile folder
-- "/home/YourUserName/knives-and-forks/"
- Unzip the file you downloaded to this new "knives-and-forks" folder - Open Terminal
-- Press ALT+F2 then type "gnome-terminal" (Ubuntu), "xfce4-terminal" (Xubuntu), or "xterm" (any Linux distro)
- Give the script executable permissions to it will run (which only needs to be done once) by typing the following line in the Terminal (without the quotes):
"chmod +x ~/knives-and-forks/Knives-and-Forks-Linux.sh"
- Change to your new "knives-and-forks" directory by typing the following line in the Terminal (without the quotes):
"cd ~/knives-and-forks"
- Run the Knives & Forks script by typing the following line in the Terminal (without the quotes):
"./Knives-and-Forks-Linux.sh"
- You should see the Knives and Forks Main Menu in a new Terminal window.
bingo .... android usb driver, adb and fastboot well set up, PC is ready to have fun in compiling android rom and kernel.
Installing Java
sun java (formerly) and oracle java (today) ... :-)) version 1.5 required to compile android froyo and java 1.6 or higher for Gingerbread and higher.
open terminal (again)
$sudo gedit /etc/apt/sources.list

a window of gedit will come up, and see the following words
#deb http://archive.canonical.com/ubuntu/ lucid partner
You need to uncoment by deleting the character # infront of the word deb, to be look like this :
deb http://archive.canonical.com/ubuntu/ lucid partner
save and close
To install sun-java6-jdk execute following command on terminal
$sudo aptitude update
$sudo aptitude install sun-java6-jdk sunjava6-jre
wait and ubuntuk will install sun-java-1.6 jdk required for compiling android. Downloading and Set Up Android Source
AFAIK, there are MANY sources Projects today to build Android Rom and Kernel, The first most Popular is Android Open Source Project [AOSP] led by Google.
Second is Cyanogenmod a Project led by open source community.
Third is Codeaurora Forum.

WHAT IS THE BEST
Nothing is The Best, the only available is the fittest. Choose which one is the fittest for your need. This article will be presented to build kernel and rom based on CyanogenMod Proejct. Why CyanogenMod ? ... cyanogen is best to start since cyanogen team help us to port android into various device, thus we can learn to compile from availabe devices before porting into a device we wants.
Let's start with CM7 full System
Ensure your PC connected to active internet, we need internet connection a lot. Open a terminal >
$mkdir cm7
$mkdir cm7/system
$mkdir bin

Comment : create a filder named cm7 to store cm7 file, create a folder named system inside cm7 folder to store whole system of cm7. Create a folder named bin to store executable file for future use. If create bin folder within home folder i.e /home/username/bin we need to tell PC system to utilize bin folder globally. Otherwise we can use available bin folder at /usr/bin but some persons do not like do this due to will "mess up" your PC system and make it trouble when we upgrade PC OS.
This article will use bin folder at /home/user/bin
still at Terminal
$ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
$$chmod a+x ~/bin/repo
Since we use bin foleder at /home/user/bin we need to make it applicable globally, using command line at terminal. We need to modify a file named .bashrc at /home/user/
~$ gedit .bashrc
a Gedit text editor window will come up > copy and paste following word at empty space after end of all available words export PATH=~/bin:$PATH
save and close
Now start working with your working folder at ~/cm7/system to initialize the repo of Gingerbread source.
$cd ~/cm7/system
[system]$ repo init -u git://github.com/CyanogenMod/android.git -b gingerbread
[system]$ repo sync

This will download entire android source from CyanogenMod project, once synced and you are ready to have FUN by setting up and compiling entire rom and android operating system, including kernel
To build android kernel only .... Please visit THIS PAGE to bild FULL ROM from source visit THIS PAGE

Real Multilib Userland on Linux

Read multilib requirement on Android rom building and other stuff. About two years absent from getting rid with android rom. I have time to...