Welcome to XDA

Search to go directly to your device's forum

Register an account

Unlock full posting privileges

Ask a question

No registration required
Post Reply

[HOW-TO] Compile AOSP Froyo + [ROM] Latest AOSP Froyo for Sapphire

OP dferreira

17th June 2010, 06:53 PM   |  #1  
dferreira's Avatar
OP Senior Member
Flag Oulu
Thanks Meter: 60
1,369 posts
Join Date:Joined: Jan 2007
Donate to Me
Tired of using someone else wrapped up Android OS? If you are like me, you probably would like to take control over what you are using on your device. There isn't any Market or any Google Applications on this. This is intended for developing applications and have a working phone using the latest Android OS for HTC Magic/Sapphire's.

The recommended system for downloading and compiling Android OS from source (AOSP - Android Open-Source Project) is Ubuntu. I have a Mac with Snow Leopard, so I use VirtualBox to run a virtual machine that has Ubuntu installed on it. Once you have Ubuntu installed on the virtual machine, you need to prepare it so that you can download and compile successfully AOSP.

First, make sure your OS is up-to-date, by running the Update Manager from the System>Administration menu. Once that is completed, go to Applications>Accessories and open Terminal.

Type this command to install all the needed libraries (this is all one line) - Ubuntu 10.04 64Bits:
sudo apt-get install git-core gnupg sun-java5-jdk flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl libncurses5-dev zlib1g-dev valgrind lib32readline5-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev ia32-libs x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev
Type this command to install all the needed libraries (this is all one line) - Ubuntu 32Bits (thanks to Szusz!):
Edit your /etc/apt/sources.list and add these lines on the end:
deb pl.archive.ubuntu.com/ubuntu/ jaunty multiverse
deb pl.archive.ubuntu.com/ubuntu/ jaunty universe
sudo apt-get install git-core gnupg sun-java5-jdk flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl libncurses5-dev zlib1g-dev valgrind libreadline5-dev gcc-multilib g++-multilib libc6-dev libncurses5-dev x11proto-core-dev libx11-dev libreadline5-dev libz-dev
Prepare the OS to run Java 5.0, which is the only compatible Java version for compiling. Recent versions of Ubuntu don't need this step (10.04+).
sudo update-java-alternatives -s java-1.5.0-sun
Fix a dependency with X11 (64Bits):
sudo ln -s /usr/lib32/libX11.so.6 /usr/lib32/libX11.so
Fix a dependency with X11 (32Bits):
sudo ln -s /usr/lib/libX11.so.6 /usr/lib/libX11.so
That's it for the Operative system. Now the tool that Google uses to control the source files is Repo. To install type this:
cd ~
mkdir bin
curl http://android.git.kernel.org/repo >~/bin/repo
chmod a+x ~/bin/repo
Now to download the source files, compile etc, all you need to do is to copy this text to a file in Ubuntu (to create one, just type "gedit android.sh"):
PHP Code:
#Created by dferreira (lizned.arierref@gmail.com)
#Checkout and compile master repositories out of source.android.com


#Check for Repo
if [ ! -~/bin/repo ]
mkdir bin
    curl http
://android.git.kernel.org/repo >~/bin/repo
chmod a+~/bin/repo

#Create project folder
if [ ! -d $SOURCE_FOLDER ]
    mkdir $SOURCE_FOLDER


#clean old compiled files, there can be new stuff!
make installclean
make clean

#Get updated source files from AOSP
repo init -u git://android.git.kernel.org/platform/manifest.git -b $BRANCH
git clone git://android.git.kernel.org/kernel/msm.git -b $KERNEL #clone latest kernel project
git pull 
#check if anything new
repo sync 
#update repo's

#Get HTC drivers if they don't exist already on folder
cd ~/magicDroid
if [ ! -f sapphire_update.zip ]
--referer=http://developer.htc.com/google-io-device.html http://member.america.htc.com/download/RomCode/ADP/signed-google_ion-ota-14721.zip?
mv signed-google_ion-ota-14721.zip sapphire_update.zip

#unzip the proprietary files from HTC for Sapphire
if [ ! -d vendor/htc/sapphire/proprietary ]

#Compile latest kernel
make ARCH
=arm msm_defconfig
make ARCH
=arm CROSS_COMPILE=$SOURCE_FOLDER/prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin/arm-eabizImage -j4

#copy kernel to source if success!
if [ -f $SOURCE_FOLDER/msm/arch/arm/boot/zImage ]
/msm/arch/arm/boot/zImage $SOURCE_FOLDER/device/htc/dream-sapphire/kernel

#Compile wifi module to match the kernel
cd $SOURCE_FOLDER/system/wlan/ti/sta_dk_4_0_4_32
=$SOURCE_FOLDER/msmARCH=arm CROSS_COMPILE=$SOURCE_FOLDER/prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin/arm-eabi- -j4

#copy updated wlan.ko that matches the kernel
if [ -f $SOURCE_FOLDER/system/wlan/ti/sta_dk_4_0_4_32/wlan.ko ]
/system/wlan/ti/sta_dk_4_0_4_32/wlan.ko $SOURCE_FOLDER/device/htc/dream-sapphire/wlan.ko

#setup compiling environment and build images


#get to compiled folder
cd $SOURCE_FOLDER/out/target/product/sapphire/
'Your files ready for flashing are here:'
ls *.img 
Save the file and make it executable with:
chmod 755 android.sh
To run it, just type:
That's it! Now just follow the instructions. It should ask for your name, email and then later to what device are you compiling. The script that you put on the text file is meant for Sapphire, so you should choose option that has sapphire on it, US version or EU version, with ENG on it, which will make the compiled OS with root access.

In the end, you'll have a set of .img files, ready to be installed on your device.

Using your favourite recovery, wipe everything before flashing the OS and then boot into fastboot. I'm pretty sure that if you really want to compile your own OS, you already know how to use fastboot. But anyway:
fastboot flash boot boot.img
fastboot flash system system.img
fastboot flash userdata userdata.img

Reboot your device and enjoy your own OS.

If you run into trouble, let me know.

Some fixes you might be interested:
Enable JIT on DalvikVM
Edit dalvik/vm/Android.mk
ifeq ($(TARGET_ARCH_VARIANT),armv5te)
    WITH_JIT := true
Edit vendor/htc/sapphire/BoardConfigVendor.mk
WITH_JIT := true
Add support for audio+video recording on camera
We need to add BUILD_WITH_FULL_STAGEFRIGHT := true to your vendor's Buildxxx.mk to be able to record audio+video on the camera.
Another property that needs to be active: Thanks to Jubeh

If you want to run this on 32A's, you need to replace the kernel for a 32A one and you should be good to go.

Fix the prelinks issues. Make sure to make a backup of the file (build/core/prelink-linux-arm.map) because I'm almost sure it will get officially fixed in the future.
PHP Code:
# 0xC0000000 - 0xFFFFFFFF Kernel
# 0xB0100000 - 0xBFFFFFFF Thread 0 Stack
# 0xB0000000 - 0xB00FFFFF Linker
# 0xA0000000 - 0xBFFFFFFF Prelinked System Libraries
# 0x90000000 - 0x9FFFFFFF Prelinked App Libraries
# 0x80000000 - 0x8FFFFFFF Non-prelinked Libraries
# 0x40000000 - 0x7FFFFFFF mmap'd stuff
# 0x10000000 - 0x3FFFFFFF Thread Stacks
# 0x00000000 - 0x0FFFFFFF .text / .data / heap

# Note: The general rule is that libraries should be aligned on 1MB
# boundaries. For ease of updating this file, you will find a comment
# on each line, indicating the observed size of the library, which is
# one of:
#     [<64K] observed to be less than 64K
#     [~1M] rounded up, one megabyte (similarly for other sizes)
#     [???] no size observed, assumed to be one megabyte

# core system libraries
libdl.so                0xAFF00000 # [<64K]
libc.so                 0xAFD00000 # [~2M]
libstdc++.so            0xAFC00000 # [<64K]
libm.so                 0xAFB00000 # [~1M]
liblog.so               0xAFA00000 # [<64K]
libcutils.so            0xAF900000 # [~1M]
libthread_db.so         0xAF800000 # [<64K]
libz.so                 0xAF700000 # [~1M]
libevent.so             0xAF600000 # [???]
libssl.so               0xAF400000 # [~2M]
libcrypto.so            0xAF000000 # [~4M]
libsysutils.so          0xAEF00000 # [~1M]

# bluetooth
liba2dp.so              0xAEE00000 # [~1M]
audio.so                0xAED00000 # [~1M]
input.so                0xAEC00000 # [~1M]
libbluetoothd.so        0xAEA00000 # [~2M]
libbluedroid.so         0xAE900000 # [<64K]
libbluetooth.so         0xAE800000 # [~1M]
libdbus.so              0xAE700000 # [~1M]

# extended system libraries
libril.so               0xAE600000 # [~1M]
libreference-ril.so     0xAE500000 # [~1M]
libwpa_client.so        0xAE400000 # [<64K]
libnetutils.so          0xAE300000 # [~1M]

# core dalvik runtime support
libandroid_servers.so   0xAE200000 # [~1M]
libicuuc.so             0xADE00000 # [~4M]
libicui18n.so           0xAD900000 # [~5M]
libandroid_runtime.so   0xAD300000 # [~6M]
libnativehelper.so      0xAD100000 # [~2M]
libdvm-ARM.so           0xAD000000 # [???]
libdvm.so               0xACA00000 # [~6M]
# Note: libicudata.so intentionally omitted

# graphics
libpixelflinger.so      0xAC900000 # [~1M]
# libcorecg is for backward-compatibility with donut
libcorecg.so            0xAC800000 # [???]
libsurfaceflinger_client.so 0xAC700000 # [~1M]
libsurfaceflinger.so    0xAC500000 # [~2M]
libGLES_android.so      0xAC400000 # [~1M]
libagl.so               0xAC300000 # [???]

libGLESv1_CM.so         0xAC200000 # [~1M]
libGLESv2.so            0xAC100000 # [~1M]
libOpenVG_CM.so         0xAC000000 # [???]
libOpenVGU_CM.so        0xABF00000 # [???]
libEGL.so               0xABE00000 # [~1M]
libETC1.so              0xABD00000 # [<64K]

libacc.so               0xABC00000 # [~1M]

libexif.so              0xABB00000 # [~1M]
libcamera_client.so     0xABA80000 # [~1M]
libui.so                0xAB900000 # [~1M]
# libsgl is for backward-compatibility with donut
libsgl.so               0xAB800000 # [???]
libskia.so              0xAB100000 # [~7M]
librs_jni.so            0xAB000000 # [~1M]
libRS.so                0xA9E00000 # [~2M]
libjnigraphics.so       0xA9D00000 # [<64K]
libskiagl.so            0xA9C00000 # [~1M]

# audio
libFLAC.so              0xA9B00000 # [???]
libaudiopolicy.so       0xA9A00000 # [~1M]
libaudiopolicygeneric.so 0xA9900000 # [???]
libsoundpool.so         0xA9800000 # [~1M]
libgps.so               0xA9700000 # [~1M]
libspeech.so            0xA9600000 # [~1M]
liboemcamera.so         0xA9400000 # [~1M]
libmedia_jni.so         0xA9300000 # [~1M]
libmediaplayerservice.so 0xA9200000 # [~1M]
libmedia.so             0xA9000000 # [~2M]
libFFTEm.so             0xA8F00000 # [~1M]
libSR_AudioIn.so        0xA8E00000 # [~1M] for external/srec
libaudioflinger.so      0xA8D00000 # [~1M]

# assorted system libraries
libsqlite.so            0xA8B00000 # [~2M]
libexpat.so             0xA8A00000 # [~1M]
libwebcore.so           0xA8300000 # [~7M]
libbinder.so            0xA8200000 # [~1M]
libutils.so             0xA8100000 # [~1M]
libcameraservice.so     0xA8000000 # [~1M]
libhardware.so          0xA7F00000 # [<64K]
libhardware_legacy.so   0xA7E00000 # [~1M]
libapp_process.so       0xA7D00000 # [???]
libsystem_server.so     0xA7C00000 # [~1M]
libime.so               0xA7B00000 # [???]
libaudio.so             0xA7A00000 # [~1M]
libcamera.so            0xA7900000 # [~1M]
libsonivox.so           0xA7800000 # [~1M]
libvorbisidec.so        0xA7700000 # [~1M]
libdiskconfig.so        0xA7600000 # [<64K]
libemoji.so             0xA7500000 # [<64K]
libjni_latinime.so      0xA7400000 # [~1M]
libjni_pinyinime.so     0xA7300000 # [~1M]
libttssynthproxy.so     0xA7200000 # [~1M] for frameworks/base
libttspico.so           0xA7000000 # [~2M] for external/svox

# pv libraries
libpvasf.so                    0xA6F00000 # [???]
libpvasfreg.so                 0xA6E00000 # [???]
libomx_sharedlibrary.so        0xA6D00000 # [~1M]
libopencore_download.so        0xA6C00000 # [~1M]
libopencore_downloadreg.so     0xA6B00000 # [~1M]
libopencore_net_support.so     0xA6800000 # [~3M]
libopencore_rtsp.so            0xA6200000 # [~6M]
libopencore_rtspreg.so         0xA6100000 # [~1M]
libopencore_author.so          0xA5D00000 # [~4M]
libomx_aacdec_sharedlibrary.so 0xA5B00000 # [~2M]
libomx_amrdec_sharedlibrary.so 0xA5A00000 # [~1M]
libomx_amrenc_sharedlibrary.so 0xA5900000 # [~1M]
libomx_avcdec_sharedlibrary.so 0xA5800000 # [~1M]
libomx_avcenc_sharedlibrary.so 0xA5700000 # [???]
libomx_m4vdec_sharedlibrary.so 0xA5600000 # [~1M]
libomx_m4venc_sharedlibrary.so 0xA5500000 # [???]
libomx_mp3dec_sharedlibrary.so 0xA5400000 # [~1M]
libopencore_mp4local.so        0xA5200000 # [~2M]
libopencore_mp4localreg.so     0xA5100000 # [~1M]
libopencore_player.so          0xA4800000 # [~9M]

# opencore hardware support
libmm-adspsvc.so              0xA4700000 # [<64K]
libOmxCore.so                 0xA4600000 # [<64K]
libOmxMpeg4Dec.so             0xA4500000 # [~1M]
libOmxH264Dec.so              0xA4400000 # [~1M]
libOmxVidEnc.so               0xA4300000 # [~1M]
libopencorehw.so              0xA4200000 # [~1M]
libOmxVdec.so                 0xA4100000 # [~1M]
libmm-omxcore.so              0xA4000000 # [<64K]

# pv libraries
libopencore_common.so         0xA3900000 # [~7M]
libqcomm_omx.so               0xA3800000 # [<64K]

# stagefright libraries
libstagefright_amrnb_common.so     0xA3700000 # [~1M]
libstagefright_avc_common.so       0xA3600000 # [~1M]
libstagefright_color_conversion.so 0xA3500000 # [<64K]
libstagefright_omx.so              0xA3400000 # [~1M]
libstagefrighthw.so                0xA3300000 # [~1M]
libstagefright.so                  0xA2F00000 # [~4M]

# libraries for specific hardware
libgsl.so               0xA2E00000 # [~1M]
libhtc_acoustic.so      0xA2D00000 # [<64K]
libhtc_ril.so           0xA2C00000 # [~1M]
liblvmxipc.so           0xA2B00000 # [~1M] for vendor/nxp
libreference-cdma-sms.so 0xA2A00000 # [<64K] for hardware/ril

# libraries for specific apps or temporary libraries
libcam_ipl.so           0x9F000000 # [???]
libwbxml.so             0x9EF00000 # [???]
libwbxml_jni.so         0x9EE00000 # [~1M]
libxml2wbxml.so         0x9EB00000 # [~1M]
libdrm1.so              0x9EA00000 # [~1M]
libdrm1_jni.so          0x9E900000 # [<64K]
libwapcore.so           0x9E800000 # [???]
libstreetview.so        0x9E700000 # [???]
libwapbrowsertest.so    0x9E600000 # [???]
libminiglobe.so         0x9E500000 # [???]
libearth.so             0x9E400000 # [???]
libembunit.so           0x9E300000 # [<64K]
libneon.so              0x9E200000 # [???]
libjni_example.so       0x9E100000 # [???]
libjni_load_test.so     0x9E000000 # [???]
libjni_lib_test.so      0x9DF00000 # [???]
librunperf.so           0x9DE00000 # [???]
libctest.so             0x9DD00000 # [<64K]
libUAPI_jni.so          0x9DC00000 # [???]
librpc.so               0x9DB00000 # [~1M]
libtrace_test.so        0x9DA00000 # [???]
libsrec_jni.so          0x9D800000 # [~2M]
libjpeg.so              0x9D700000 # [~1M]
libiprouteutil.so       0x9D600000 # [~1M] for external/iproute2
libnetlink.so           0x9D500000 # [<64K] for external/iproute2
libpagemap.so           0x9D400000 # [<64K] for system/extras/libpagemap
libstlport.so           0x9D100000 # [~3M] for external/stlport
libzxing.so             0x9D000000 # [<64K] for goggles
libinterstitial.so      0x9CF00000 # [<64K] for goggles
liblept.so              0x9CA00000 # [~5M] for external/leptonica 
How to fix the camera:
http://forum.xda-developers.com/show...&postcount=502 Drivers part
http://forum.xda-developers.com/show...&postcount=447 Kernel part


In case you don't want to do it yourself, you can just download this package, and flash it from recovery.

AOSP FROYO 2.2 v3.1

v3.1 - thanks to Jack for debugging it!
- Bootanimation is working!
- Wifi + Kernel from Cyanogen, as mine went boggus and I can't test it if it works without a device.
- Full APN list
- Known bugs: camera onscreen controls do FC sometimes. Switching from camera to camcorder works, but fc when reverting back.

- Live wallpapers support.
- Sound recorder is now visible to the user to use.
- All available languages are included.
- Fixed missing sound files.
- Cyanogen's camera fixes are included. Really a pleasure to learn from what he has done!

- Fixed camera - Use v2 and replace the boot.img with this one

What's on it:
- Fixed GPS (was missing gps.conf + libgps.so was being allocated to wrong prelink).
- Fixed all prelink errors by mapping all the libraries to the correct mmap banks (edited build/core/prelink-linux-arm.map).
- Replaced Gallery3D (not complete at sources) by old enhanced Gallery (multitouch working!)
- Added the Text-To-Speech libraries from source (got those from sdk.mk)
- Fixed missing sounds (Lock.ogg and Unlock.ogg in OriginalSounds.mk)
- Camera still not working, but now we don't have a prelink error, so should be fixable by replacing liboemcamera.so by one that works - maybe Cyanogen's??)
- Bootanimation still not working... (i've looked into it and I can't figure out why it doesn't!)

- AOSP 2.2 Froyo
- WiFi + Kernel 2.6.32 up and running.
- 3D Drivers
- JIT + JIT JSC enabled
- Multi-touch zoom on browser

Doesn't work:
- No boot animation, screen stays blank while booting but you can check it out using "adb logcat"
- Camera
- Gallery has missing mdpi graphics, I'll fix it later
Attached Thumbnails
Click image for larger version

Name:	apps.png
Views:	2488
Size:	38.5 KB
ID:	351467   Click image for larger version

Name:	device.png
Views:	2231
Size:	21.0 KB
ID:	351468   Click image for larger version

Name:	home.jpg
Views:	2390
Size:	26.0 KB
ID:	351469   Click image for larger version

Name:	keyboards.png
Views:	2007
Size:	17.5 KB
ID:	351470   Click image for larger version

Name:	messaging.png
Views:	1837
Size:	15.1 KB
ID:	351471   Click image for larger version

Name:	tethering.png
Views:	1618
Size:	9.5 KB
ID:	351472   Click image for larger version

Name:	wifi.png
Views:	1657
Size:	23.1 KB
ID:	351473  
Last edited by dferreira; 31st July 2010 at 04:02 PM. Reason: Camera video recording fix
The Following 3 Users Say Thank You to dferreira For This Useful Post: [ View ]
17th June 2010, 07:31 PM   |  #2  
Junior Member
Thanks Meter: 0
9 posts
Join Date:Joined: Oct 2009
Thumbs up
thanks at all
17th June 2010, 07:46 PM   |  #3  
omnikai's Avatar
Senior Member
Thanks Meter: 16
174 posts
Join Date:Joined: Mar 2010
Awesome, I'd love to start poking around with this.

Is there a way to flash an update with a camera fix on top of this?

Thanks for posting!
17th June 2010, 09:59 PM   |  #4  
dferreira's Avatar
OP Senior Member
Flag Oulu
Thanks Meter: 60
1,369 posts
Join Date:Joined: Jan 2007
Donate to Me
I never figured out how to add NCommander's hacked camera drivers that work with Eclair. If anyone knows how to do it, please share so that we can add it to the script. Maybe we can turn this script into something that will allow anyone build their own AOSP ROM
17th June 2010, 10:04 PM   |  #5  
Thanks Meter: 2
60 posts
Join Date:Joined: Aug 2008
cant find package sun-java5-jdk...
17th June 2010, 10:49 PM   |  #6  
dferreira's Avatar
OP Senior Member
Flag Oulu
Thanks Meter: 60
1,369 posts
Join Date:Joined: Jan 2007
Donate to Me
Originally Posted by ododoo

cant find package sun-java5-jdk...

Try it with whatever version comes with your Ubuntu. It's been a while since I had setup the system to compile and I have updated to Ubuntu 10.04 and it's compiling fine.

Just ignore that line
17th June 2010, 11:04 PM   |  #7  
Senior Member
Thanks Meter: 0
199 posts
Join Date:Joined: Aug 2009
So actually everythings work except camera?

How is this in terms of speed? : D
17th June 2010, 11:13 PM   |  #8  
Thanks Meter: 2
60 posts
Join Date:Joined: Aug 2008
Originally Posted by dferreira

Try it with whatever version comes with your Ubuntu. It's been a while since I had setup the system to compile and I have updated to Ubuntu 10.04 and it's compiling fine.

Just ignore that line

Tnx! Works like a charm! How can you add apps and such?
17th June 2010, 11:46 PM   |  #9  
Thanks Meter: 2
60 posts
Join Date:Joined: Aug 2008

Saving to: `signed-google_ion-ota-14721.zip'

100%[======================================>] 53*965*203 91,0K/s in 18m 50s

2010-06-17 23:30:19 (46,7 KB/s) - `signed-google_ion-ota-14721.zip' saved [53965203/53965203]

make: *** No rule to make target `installclean'. Stop.
make: *** No rule to make target `clean'. Stop.
./android.sh: line 27: repo: command not found
./android.sh: line 28: repo: command not found
./android.sh: line 32: build/envsetup.sh: No such file or directory
./android.sh: linje 35: cd: /home/ododoo/magicDroid/vendor/htc/sapphire-open/: No such file or directory
./android.sh: line 36: ./unzip-files.sh: No such file or directory
./android.sh: line 39: lunch: command not found
make: *** No targets specified and no makefile found. Stop.
./android.sh: linje 43: cd: /home/ododoo/magicDroid/out/target/product/sapphire-open/: No such file or directory
Your files ready for flashing are here:
ls: kan ikke pne *.img: No such file or directory

Did not get any question about anything.. Made a .zip file, but not sure if i dare to flash it...
18th June 2010, 12:26 AM   |  #10  
Senior Member
Flag Calgary
Thanks Meter: 2
179 posts
Join Date:Joined: May 2010
Originally Posted by ododoo

Did not get any question about anything.. Made a .zip file, but not sure if i dare to flash it...

According to that output it did not create the img files you would need to flash. Looks like your missing some binaries required in the script.

Post Reply Subscribe to Thread

android, aosp, compile, eclair, sapphire
Previous Thread Next Thread
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes