Objective: Configure and Build Android on Beagle Board
Install needed software packages
Android also uses its own repo script as a git front-end
Download and Install 2007q3 Toolchain from Code Sourcerys
Download resources
Building Android
Building the kernel
Copying the android root file system
Formatting an MMC/SD card
Boot setup
Requirements:
Ubuntu 10.04 (Lucid Linux) on a virtual machine (VMware Player/Server/Workstation)
SD card (2 GB Preferred)
Procedures:
(1) Install needed software packages
At the time of this writing, note that Android requires Sun’s Java5 JDK, and doesn’t support the Java6 one.
$ apt-get update
$ apt-get dist-upgrade
Install following packages as below.
$ apt-get install git-core bison sun-java5-jdk flex g++ zlib1g-dev
$ apt-get install libx11-dev libncurses5-dev gperf uboot-mkimage
Sun JDK version 1.5 or 5 is deleted from Ubuntu 10.4 and 9.10 repositories and the version 6 has been replaced. The easiest way to install Sun JDK 5 version is add its repository from Ubuntu 9.04 to the list of repositories in 9.10 and 10.04. For this purpose, follow the steps as below.
- Open /etc/apt/sources.list with a text editor like gedit:
$ sudo gedit /etc/apt/sources.list
- Add the following lines to the end of the file then save it and close:
## For sun-java5-jdk
deb http://ir.archive.ubuntu.com/ubuntu jaunty-updates main multiverse
- Update the packages lists and install sun-java5-jdk:
$ sudo aptitude update
$ sudo aptitude install sun-java5-jdk
(2) Android also uses its own repo script as a git front-end
$ mkdir -p ~/bin
$ cd ~/bin
$ wget http://android.git.kernel.org/repo
$ chmod +x repo
(3) We are also going to need a 2007q3 Toolchain from Code Sourcerys
$ cd
$ wget http://www.codesourcery.com/sgpp/lite/arm/portal/package1787/public/arm-none-linux-gnueabi/arm-2007q3-51-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
$ cd /opt
$ sudo tar jxf arm-2007q3-51-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
You could also get this toolchain from our website:
$ cd
$ wget http://free-electrons.com/pub/demos/beagleboard/android/arm-2007q3-51-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.lzma
$ cd /opt
$ sudo tar --lzma -xf ~/arm-2007q3-51-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.lzma
(4) Download resources
Following instructions will create a directory in your home directory, but of course, it can be placed anywhere!
$ mkdir ~/beagledroid
$ cd ~/beagledroid
$ repo init -u git://labs.embinux.org/repo/android/platform/beaglemanifest.git/
$ repo sync
Caution: This will take a lot of time, as this downloads and extracts 2.4 GB of data. On a fast workstation with a 500KB/s Internet connection, it took about 90 minutes. If your network doesn't let you use the git protocol, you can use snapshot available on http://free-electrons.com/pub/demos/beagleboard/android/:
$ cd ~
$ tar --lzma -xvf beagledroid-git-20090603.tar.lzma
I used a 2nd option which is much faster than 1st method.
(5) Building Android
$ make
If your workstation has multiple CPUs, you could save a lot of time by running multiple jobs in parallel:
$ make -j 4
On our machine, this took about 4 hours!
(6) Building the kernel
$ export CC_PATH=/opt/arm-2007q3/bin/arm-none-linux-gnueabi-
$ cd ~/beagledroid/kernel
$ ../vendor/embinux/support-tools/beagle_build_kernel.sh
(7) Copying the Android root file system
Android’s root file system is generated in ~/beagledroid/out/target/product/generic
$ cd ~/beagledroid/out/target/product/generic
$ mkdir ~/beagledroid/rootfs
$ cp -a root/* ~/beagledroid/rootfs/
$ cp -a system/* ~/beagledroid/rootfs/system/
$ cd ~/beagledroid/rootfs
$ sudo chown -R root.root .
$ sudo chmod -R a+rwX data system
(8) Formatting an MMC/SD card
First connect your card reader to your workstation, with the MMC/SD card inside. Type the dmesg command to see which device is used by your workstation. Let’s assume that this device is /dev/sdb
Type the mount command to check your currently mounted partitions. If MMC/SD partitions are mounted, unmount them.
In a terminal edit partitions with fdisk:
$ sudo fdisk /dev/sdb
Delete any existing partition with the d command.
Now, create the boot partition:
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-239, default 1): 1
Last cylinder, +cylinders or +size{K,M,G} (1-239, default 239): +64M
Change its type to FAT32:
Command (m for help): t
Selected partition 1
Hex code (type L to list codes): c
Changed system type of partition 1 to c (W95 FAT32 (LBA))
Using the n command again, create a second partition filling up the rest of your card (just accept default values).
Now, format the partitions in your card:
$ sudo mkfs.vfat -n beagleboot -F 32 /dev/sdb1
$ sudo mkfs.ext3 /dev/sdb2
Remove and insert your card again. Your new partitions should be mounted automatically.
Copying data to the MMC/SD card
Start by copying the X-loader and U-boot on the first partition.
$ cd /media/beagleboot
$ wget http://free-electrons.com/pub/demos/beagleboard/android/MLO
http://free-electrons.com/pub/demos/beagleboard/android/u-boot.bin
$ cp ~/beagledroid/kernel/arch/arm/boot/uImage .
Now copy the Android root filesystem to the second partition (assuming it is mounted on/media/disk:
$ sudo rsync -a ~/beagledroid/rootfs/ /media/disk/
Finish by unmounting your MMC/SD partitions:
$ sudo umount /media/beagleboot
$ sudo umount /media/disk
(9) Boot setup
The last thing left to do is to specify how the board boots Linux.
Plug the Beagle board on your computer, and also connect it to a DVI-D monitor. Start minicom (corresponding to Hyperterminal in Windows) on /dev/ttyS0, or on /dev/ttyUSB0 if you are using a serial to USB adapter. Power up the board.First, stop Minicom from truncating long lines by typing [Ctrl] [a] followed by z and w.
In the U-boot prompt, make the board boot automatically on the MMC/SD card:
# setenv bootcmd 'mmc init;fatload mmc 0 80000000 uImage;bootm 80000000'
# saveenv
Now set the kernel command line arguments:
# setenv bootargs console=ttyS2,115200n8 noinitrd root=/dev/mmcblk0p2 video=omapfb.mode=dvi:1280x720MR-24@50 init=/init rootfstype=ext3 rw rootdelay=1 nohz=off androidboot.console=ttyS2
Type command as below on “beagleboard prompt” as below
# boot
Following snapshot shows Linux kernel prompt resides under Android.
References:
[1] Build Android on Beagle Board from Free Electron website http://free-electrons.com/blog/android-beagle/
[2] Solution of problem in installing sun-java5-jdk in Ubuntu 10.04 http://zebardast.ir/en/category/java/
[3] Android on BeagleBoard information page http://code.google.com/p/rowboat/wiki/BeagleBoard
[4] Configure and Build http://code.google.com/p/rowboat/wiki/ConfigureAndBuild