Building Android on Beagle

Beagle boardUpdated instructions to use Android on the Beagle board

These instructions are derived from Embinux.org’s Android Porting Guide to Beagle Board, based on their work to port Android on the Beagle board. They correct multiple inaccuracies in this guide, and also add many useful details.

These instructions were tested on xubuntu 9.04. There shouldn’t be many differences if you use other recent Ubuntu or Debian versions.

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
apt-get install git-core bison sun-java5-jdk flex g++ zlib1g-dev
apt-get install  libx11-dev libncurses5-dev gperf uboot-mkimage

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

We are also going to need a 2007q3 toolchain from Code Sourcery

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

Download sources

Our instructions 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 can 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 corporate network doesn’t let you use the git protocol, you can use our snapshot available on http://free-electrons.com/pub/demos/beagleboard/android/:

cd
tar --lzma -xvf beagledroid-git-20090603.tar.lzma

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!

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

Copying the Android root filesystem

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

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

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

You may need to adapt the video settings to the capabilities of your DVI display. You should now see Android boot!

About Michael Opdenacker

Michael Opdenacker is the founder of Free Electrons. He is best known for all the free embedded Linux and kernel training materials that he created together with Thomas Petazzoni. He is always looking for ways to increase performance, reduce size and boot time, and to maximize Linux' world domination. More details...
This entry was posted in Hardware, Technical and tagged . Bookmark the permalink.

12 Responses to Building Android on Beagle

  1. Sanjeev Kumar Verma says:

    I have downloaded the snapshot view from http://free-electrons.com/pub/demos/beagleboard/android/ which is in tar.tat format. I am not able to uncompress it. Pleawe help
    I have downloaded the following:
    arm-2007q3-51-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.tar
    beagledroid-git-20090603.tar.tar

    • mike says:

      Hi Sanjeev,

      Are you using Windows to extract these archives? In this case, we can’t help you?

      If you use GNU/Linux, you will find examples about how to use wget to download these files and how to extract the .tar.lzma archives. That’s what we recommend.

      Good luck,

      Cheers,

      Michael.

  2. sany says:

    Hi…i am not able to run the uImage obtained through the snapshot on our Beagle board.It says unsupported kernel image…what could be the problem?Please help!

    • mike says:

      Hi Sany,

      Try to run the following command:
      mkimage -l ~/beagledroid/kernel/arch/arm/boot/uImage

      … and give us the output (if you use Debian or Ubuntu, you may need the uboot-mkimage package). This way, we will be able to check whether the image looks correct or not.

      Here’s what we got:

      Image Name: Linux-2.6.29-omap1-07174-g7fbc41
      Created: Mon Jun 1 17:37:32 2009
      Image Type: ARM Linux Kernel Image (uncompressed)
      Data Size: 1913608 Bytes = 1868.76 kB = 1.82 MB
      Load Address: 0×80008000
      Entry Point: 0×80008000

      Cheers,
      Michael.

  3. sany says:

    My output was ,

    mkimage: Bad Magic Number: “uImage” is no valid image

  4. Ice7 says:

    Thank you for this guide. I was able to build Android for Beagle Board painlessly just following your instructions. I spent a day wrestling with the original Embinux guide to no avail.

  5. gambler says:

    I have downloaded the snapshot view from http://free-electrons.com/pub/demos/beagleboard/android/ which is in tar.lzma format.

    I have downloaded the following:
    beagledroid-git-20090603.tar.lzma

    When i try to uncompress, it give me the following errors:
    EOF in archive
    tar: Unexpected EOF in archive
    tar: Error is not recoverable: exiting now

    Please help…

  6. Siddharth A. Waikar says:

    Hi all,
    I am trying to create filesystem of android but when i run make command
    it gives following error..
    please help me out.
    Thanks in advance.

    Copying out/target/common/obj/JAVA_LIBRARIES/core-tests_intermediates/classes-full-debug.jar
    target Jar: core-tests (out/target/common/obj/JAVA_LIBRARIES/core-tests_intermediates/javalib.jar)
    java.util.zip.ZipException: duplicate entry: hyts_Foo.c
    at java.util.zip.ZipOutputStream.putNextEntry(ZipOutputStream.java:192)
    at java.util.jar.JarOutputStream.putNextEntry(JarOutputStream.java:109)
    at sun.tools.jar.Main.addFile(Main.java:731)
    at sun.tools.jar.Main.update(Main.java:585)
    at sun.tools.jar.Main.run(Main.java:220)
    at sun.tools.jar.Main.main(Main.java:1167)
    make: *** [out/target/common/obj/JAVA_LIBRARIES/core-tests_intermediates/javalib.jar] Error 1
    make: *** Deleting file `out/target/common/obj/JAVA_LIBRARIES/core-tests_intermediates/javalib.jar’

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>