Sunday, September 19, 2010

HOWTO : Compiling Android-x86 on Ubuntu 10.04 amd64

Android-x86 project ports Android to x86 hardwares (32-bit only). This project is under heavy development. The project is designed for Asus eeePC and Viliv S5.

Step 1 :

Make sure you have enabled the repository of "Partner". Otherwise, Sun's Java JDK cannot be installed.

For amd64 environment :

sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl sun-java6-jdk zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev ia32-libs x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev vaigrind

For i386 environment (Optional) (not tested by me) :

sudo apt-get install git-core gnupg sun-java6-jdk flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl libncurses5-dev zlib1g-dev vaigrind

Step 1a :

sudo update-alternatives --config java

Please select /usr/lib/jvm/java-6-sun/jre/bin/java

Step 2 :

sudo nano /etc/environment

append ":~/bin" at the end of "PATH="

It will look like this :
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:~/bin"

source /etc/environment

Step 3 :

curl http://android.git.kernel.org/repo >~/bin/repo
chmod a+x ~/bin/repo


Step 4 :

If you want to compile the Android 2.2 (i.e. froyo), you can do the following :

mkdir froyo-x86
cd froyo-x86
repo init -u git://git.android-x86.org/manifest.git -b froyo-x86
repo sync


*this process will take several hours just depends on your internet connection and the power of your hardwares

**If you want to compile older version of Android, please replace "froyo-x86" with "donut-x86" or "eclair-x86".

Hints :
donut-x86 == based on Android 1.6 release (Donut)
eclair-x86 == based on Android 2.1 release (Eclair)
froyo-x86 == based on Android 2.2 release (Froyo)

Step 5 :

**If you are going to compile froyo-x86 for Asus EeePC, this step can be skipped. Or, you can download the iso file from the official website.

Make sure you are still at froyo-x86 directory (or else that you have created previously, e.g. ~/froyo-x86).

nano ~/froyo-x86/device/asus/eeepc/eeepc_defconfig

Make the following lines as is :

CONFIG_MPENTIUMM=y
CONFIG_MK8=y
CONFIG_MVIAC7=y
CONFIG_MCORE2=y
CONFIG_MATOM=y
CONFIG_GENERIC_CPU=y
CONFIG_IOMMU_HELPER=y
CONFIG_IOMMU_API=y
CONFIG_X86_PAE=y


** EeePC 701 does not support "CONFIG_X86_PAE=y" setting

CONFIG_MICROCODE_AMD=y

CONFIG_X86_POWERNOW_K8=y
CONFIG_X86_SPEEDSTEP_CENTRINO=y
CONFIG_INTEL_IDLE=y


CONFIG_PCCARD=y
CONFIG_HOTPLUG_PCI_IBM=m
CONFIG_HOTPLUG_PCI_APCI=y


CONFIG_FIRMWARE_IN_KERNEL=y

CONFIG_8139CP=m
CONFIG_8139TOO=m
CONFIG_VIA_RHINE=m
CONFIG_E1000=m
CONFIG_E1000E=m
CONFIG_RTL8180=m
CONFIG_MAC80211_HWSIM=m
CONFIG_ATH9K_HTC=m
CONFIG_IWLWIFI=m
CONFIG_RT2X00=m
CONFIG_WL12XX=m
CONFIG_ZD1211RW=m
CONFIG_IPW2100=m
CONFIG_IPW2200=m
CONFIG_AR9170_USB=m
CONFIG_LIBERTAS=m
CONFIG_HOSTAP=m


CONFIG_KEYBOARD_ATKBD=y

CONFIG_PHONE=m

CONFIG_MOUSE_PS2_TRACKPOINT=m
CONFIG_MOUSE_PS2_TOUCHKIT=m
CONFIG_INPUT_TABLET=m


CONFIG_N_GSM=y

CONFIG_SOC_CAMERA=m

CONFIG_HW_RANDOM_AMD=y

CONFIG_AGP_ATI=y
CONFIG_AGP_AMD=y
CONFIG_AGP_NVIDIA=y
CONFIG_FIRMWARE_EDID=y
CONFIG_FB_BACKLIGHT=y


CONFIG_DRM_RADEON=m

CONFIG_FB_HGA=m
CONFIG_FB_INTEL=m
CONFIG_FB_RADEON=m
CONFIG_FB_NVIDIA=m
CONFIG_FB_VIA=m
CONFIG_FB_VIRTUAL=m


CONFIG_DISPLAY_SUPPORT=y

CONFIG_SND_SEQUENCER_OSS=m
CONFIG_SND_HRTIMER=m
CONFIG_SND_EMU10K1_SEQ=m
CONFIG_SND_EMU10K1=m
CONFIG_SND_EMU10K1X=m
CONFIG_SND_HDA_GENERIC=y


CONFIG_HID_PID=y
CONFIG_USB_HIDDEV=y


CONFIG_RTL8192SU=m
CONFIG_RTL8192U=m
CONFIG_RTL8192E=m


CONFIG_THINKPAD_ACPI=m

CONFIG_FSCACHE=y

Step 5a :

**If you are going to compile froyo-x86 for Asus EeePC, this step can be skipped. Or, you can download the iso file from the official website.

nano ~/froyo-x86/device/asus/eeepc/ts.conf

Uncomment all.

Step 6 :

cd froyo-x86
. build/envsetup.sh
lunch eeepc-eng
m -jX iso_img TARGET_ARCH_VARIANT=x86-atom


*where "X" is the number of core of your CPU and "TARGET_ARCH_VARIANT=x86-atom" is optional
e.g. "m -j2 iso_img" if you have a dual core

the iso file will be generated at froyo-x86/out/target/product/eeepc/eeepc.iso

*the compilation will take several hours just depends on your power of hardwares

Step 7 :

sudo apt-get update
sudo apt-get install unetbootin


Burn the iso file to the USB stick with unetbootin.

Or, you can burn your iso file to CD-R instead.

Step 8 (Optional) :

For the next compilation when there is any updates of the source, you need to do :

repo sync
. build/envsetup.sh
lunch eeepc-eng
m -jX iso_img TARGET_ARCH_VARIANT=x86-atom


*where "X" is the number of core of your CPU and "TARGET_ARCH_VARIANT=x86-atom" is optional
e.g. "m -j2 iso_img" if you have a dual core

Step 9 (Optional) :

If you want to delete all what you have compiled, you should do the following before perform Step 6.

make clean

Remarks :

Android-x86 1.6r2 works flawlessy on Gigabyte T1028X without any modification. You just download from the official site and it works out of box. However, it is Android 1.6 (Donut).

froyo-x86 may work on Asus EeePC as it is designed for this series. However, I tested on EeePC 701 and it cannot be bootup with the captioned compilation.

Known Issues

froyo-x86 also works on Lenovo ThinkPad X100e and Lenovo ThinkPad X200 but the response is quite lag as same as Gigabyte T1028X. Maybe there is a problem on the display driver.

Wifi is not working properly on Gigabyte T1028X unless Ethernet is disabled. It cannot be detected on Lenovo ThinkPad X100e and Lenovo ThinkPad X200. It is possibly the driver problem which is not included in the eeepc_defconfig.

Camera is not working on Gigabyte T1028X and Lenovo ThinkPad X100e.

Volume is low on Gigabyte T1028X, Lenovo ThinkPad X200 and Lenovo ThinkPad X100e.

Bluetooth can be detected on Gigabyte T1028X, Lenovo ThinkPad X100e and Lenovo ThinkPad X200. However, I have not test the connectivity.

No mouse pointer on Gigabyte T1028X. Mouse pointer working abnormal and lag on Lenovo ThinkPad X100e and Lenovo ThinkPad X200.

Ethernet cannot be detected on Lenovo ThinkPad X200 and Lenovo ThinkPad X100e. Possibly the driver problem as they cannot be config at eeepc_defconfig.

That's all! See you.