Install Android ICS on PandaBoard with Touch Screen Support

Introduction

In this tutorial I will be covering the setup of PandaBoard ES and 10" LCD/LVDS bundle from the Chalkboard Electronics website. Also you will need a 20 position 1.27mm pitch female connector. I used the FCI part number 609-3759-ND which you can buy from Digi-Key. You will to need buy at least 2 connectors and solder them to PandaBoard jumpers J1 and J4.

FCI Connector

The build was done on Ubuntu 12.04 using the AOSP master branch. Android source documentation states that building on Ubuntu 12.04 is currently only experimentally supported and is not guaranteed to work on branches other than master. For up to date information on PandaBoard build status go to the Android build page.

Installing required packages (Ubuntu 12.04)

Before we start building Android source we need to install following required dependecies.

sudo apt-get install git-core gnupg flex bison gperf build-essential \
    zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev \
    libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev:i386 \
    g++-multilib mingw32 tofrodos python-markdown \
    libxml2-utils xsltproc zlib1g-dev:i386

For the latest build instructions you can go to the Android Initializing a Build Environment page.

Installing JDK 6

Download JDK 6 from the Oracle website and install the package to your favorite location. Make sure that you set JAVA_HOME and JDK_HOME environment variables, and add java binary to your PATH. For example, if you install java binaries to the /user/local/java location you can add following variables to your ~/.bashrc file.

export JAVA_HOME=/usr/local/java 
export JAVA_JDK=$JAVA_HOME
export PATH=$PATH:$JAVA_HOME/bin

Configuring USB access for Pandaboard

Add following lines to the /etc/udev/rules.d/51-android.rules file and change permission of the file to chmod a+x /etc/udev/rules.d/51-android.rules. Restart udev service with the sudo service udev restart command. This step is neccessery so you can later connect to your board with fastboot and adb commands.

# adb protocol on panda (PandaBoard)
SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d101", MODE="0666"
# fastboot protocol on panda (PandaBoard)
SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d022", MODE="0666"
# usbboot protocol on panda (PandaBoard)
SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d010", MODE="0666"

Downloading Android source

First step will be to download repo tool that will make work with Android source a lot easier. You can follow detailed instructions from the Android Downloading the Source Tree page, or just run commands below. Cloning the Android repositories will take very long time.

mkdir ~/bin
export PATH=~/bin:$PATH
curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
chmod a+x ~/bin/repo
mkdir -p ~/projects/android
cd ~/projects/android
repo init -u https://android.googlesource.com/platform/manifest
repo sync

After we pull the source with the repo command, we can got to the ~/projects/android directory and download the Imagination Technologies proprietary graphics drivers.

cd ~/projects/android
wget https://dl.google.com/dl/android/aosp/imgtec-panda-iml74k-cfb7bdad.tgz
tar xvf imgtec-panda-iml74k-cfb7bdad.tgz
./extract-imgtec-panda.sh

Downloading and compiling OMAP kernel

Now you have a complete source code and you can start building custom kernel. To start the process, go to the ~/projects/android/device/ti/panda directory and check what omap kernel corresponds to the current source tree.

git log kernel

You will get a log message that looks like the message below.

commit 793defdaa84b0375d34757db4dfb8fe437bf4340
Author: Jean-Baptiste Queru <jbq@xxxxxxxxxx>
Date:   Fri Feb 24 12:34:52 2012 -0800

    PandaBoard prebuilt kernel

    ebb6cb6 Panda: Support data usage statistic collection.
    522fb98 Panda: Bluetooth: Turn off Bluetooth spam logging
    5195fb9 ARM: OMAP4: Panda add ramconsole support

    Change-Id: Ieddb527b6dc2c7f27d5fd18f36e5a60bb6cce61d

Write down commit SHA1 (in this case that would be a ebb6cb6), and proceed with downloading omap kernel.

cd ~/projects/android
git clone https://android.googlesource.com/kernel/omap.git

After you have PandaBoard specific kernel you can checkout version that corresponds to the SHA1 commit (ebb6cb6) from the ~/projects/android/device/ti/panda directory. In order to compile arm kernel on x86 host you will need a cross-compiling toolchain. We can just use the one from the Android source tree located in the prebuilt/linux-x86/toolchain directory. If you want to read more about cross-compiling toolchains you can download an excellent PDF slides from the Free Electrons website.

cd ~/projects/android
export PATH=`pwd`/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin:$PATH
export ARCH=arm
export SUBARCH=arm
export CROSS_COMPILE=arm-eabi-    
cd omap
git checkout <commit SHA1>
make panda_defconfig

Before you compile custom kernel make sure you enable touch screen support and initialize correct screen resolution. The touch screen I'm using has 1024x600 resulution, so you have to pass arguments to notify omap frame buffer driver to set correct resolution for DVI output. You can do this by editing default kernel configuration file. You need to set the CONFIG_INPUT_TOUCHSCREEN param to y, and append the "omapfb.mode=dvi:1024x600MR-24@60 consoleblank=0" arguments to the CONFIG_CMDLINE configuration parameter. The other way to pass boot arguments would be to use U-Boot bootloader, but for that we would need to compile the bootloader source. For more information see the Appendix - Building U-Boot bootloader section.

vi .config
CONFIG_INPUT_TOUCHSCREEN=y 
CONFIG_CMDLINE="console=ttyO2,115200n8 mem=1G androidboot.console=ttyO2 omapfb.mode=dvi:1024x600MR-24@60 consoleblank=0"

The last step is to compile your kernel with the make command and copy newly compiled kernel to the ~/projects/android/device/ti/panda directory.

make -j8
cp arch/arm/boot/zImage ~/projects/android/device/ti/panda/kernel

Compiling Android

Finally you can proceed with building Android source. The first step is to initialize environment and with the lunch command choose what target you want to build. This will take around 30 min on i7 860 @2.80GHz with SSD drive.

source build/envsetup.sh
lunch full_panda-eng
make -j8

Installing to PandaBoard

These instructions are derived from the ~/projects/android/device/ti/panda/README file.

After you completed build process you can start installation. In the first step you will have to bootstrap your PandaBoard using the usbboot command. Before you start installation make sure you connect PandaBoard to PC USB port. Also, make sure that you don't insert your SD card before you load bootloader to your board.

cd ~/projects/android
device/ti/panda/usbboot device/ti/panda/bootloader.bin

The next step is to format and initialize SD card with xloader and bootloader files. Now you can insert your SD card into PandaBoard SD slot. Make sure that your SD card is equal or greater then 4GB. To complete this process just run following commands.

cd ~/projects/android
out/host/linux-x86/bin/fastboot oem format
out/host/linux-x86/bin/fastboot flash xloader device/ti/panda/xloader.bin
out/host/linux-x86/bin/fastboot flash bootloader device/ti/panda/bootloader.bin

Finally you can install your freshly built Android images to the SD card. Reboot the board while holding the GPIO_121 button, and run the following commands to load images to the SD card.

out/host/linux-x86/bin/fastboot erase cache
out/host/linux-x86/bin/fastboot flash userdata
out/host/linux-x86/bin/fastboot flashall

Finalizing installation

The last step left is to load vendor IDC (Input Device Configuration) file to the SD card. We need this step in order to set correct resolution for the touch screen. The LCD panel and touch screen that I have been using to create this tutorial can be purchased from Chalkboard Electronics website. You can download the file from their website, or for your convenience the IDC file is included here. To read more about IDC file format go to the Android IDC page.

cd ~/projects/android
out/host/linux-x86/bin/adb remount
out/host/linux-x86/bin/adb push Vendor_2087_Product_0a01.idc /system/usr/idc/Vendor_2087_Product_0a01.idc
out/host/linux-x86/bin/adb sync

After this reboot your PandaBoard and test new touch screen configuration. You should have your Android installation fully functional with enabled Wifi and Bluetooth.

LVDS Board

Appendix

Building U-Boot bootloader

Download the code from the omapzoom git site and checkout the latest tag. I tested the 4AI.5 tag on PandaBoard ES, and I was able to successfully boot the board.

cd ~/projects/panda-loader
git clone http://git.omapzoom.org/repo/u-boot.git
cd u-boot 
git checkout 4AI.5
export PATH= ~/projects/android/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin:$PATH
export ARCH=arm
export SUBARCH=arm
export CROSS_COMPILE=arm-eabi-
make omap4430panda_config
make -j4

If you want to see if there any more recent tags you can run following git command.

git for-each-ref --format '%(refname) %(taggerdate)' refs/tags

I didn't have to recompile custom x-loader, but if you want to thinker with x-loader source code you can download the code from the same git site.

cd ~/projects/panda-loader
git clone http://git.omapzoom.org/repo/u-boot.git

Hi, I am following your guide at the moment. Why do I need to write down the commit checksum? For me it doesn't look like you use it in the rest of the guide?

Comment by Sebbi Fri 11 May 2012 07:22:50 AM UTC
Forget it and delete my comments. (Looks like I am not really awake or my brain is still in suspend mode, have to get a coffee.)
Comment by Sebbi Fri 11 May 2012 07:25:27 AM UTC
You are right, it wasn't very clear what to do with commit SHA1 prefix.
Comment by Boris Sat 12 May 2012 07:33:49 PM UTC
Why I need to sold two "20 position 1.27mm pitch female connectors" to jumpers J1 and j4 ?
Comment by marietto2008@gmail.com Sun 20 May 2012 07:19:22 PM UTC
In order to connect the LVDS board you will have to solder jumpers J1 and J4. I'm not sure if there is any other way.
Comment by Boris Mon 21 May 2012 04:50:32 PM UTC

Hi,

just checked out AOSP 4.0.9. on a clean new Ubuntu 12.04 machine.

AOSP compiles without problems, but I cant compile the kernel. They removed the ./prebuilt folder, there is a ./prebuilts folder now which contains all the toolchain stuff. Environmental variable are written with the lunch command, so the omap kernel should find all he needs.

It always ends up with the following: http://pastebin.com/u8h8cguY

$PATH is looking good, all the stuff from ./prebuilts is included...

Have an ideal

Comment by Sebbi Tue 17 Jul 2012 09:02:20 AM UTC

OK, the error is not dependent on the compiler or something. I copied my old "omap" folder to /tmp and linked via PATH to the old compiler: export PATH=$HOME/Dokumente/WORKING_DIRECTORY/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin:$PATH

The error is still the same....

Comment by Sebbi Tue 17 Jul 2012 09:59:24 AM UTC

OK, found the problem. Google was my friend.

sudo apt-get install lib32ncurses5-dev

and everything works as it should

Comment by Sebbi Tue 17 Jul 2012 12:18:47 PM UTC
Comments on this page are closed.