Skip to end of metadata
Go to start of metadata

This is a page about TI's Cortex-A9 based; PandaBoard and PandaBoard ES.


PandaBoard at Digi-Key
PandaBoard ES at Digi-Key

Basic Requirements

ARM Cross Compiler: GCC

This is a pre-built (64bit) version of Linaro GCC that runs on generic linux, sorry (32bit) x86 users, it's time to upgrade...

wget -c
tar xf gcc-linaro-5.5.0-2017.10-x86_64_arm-linux-gnueabihf.tar.xz
export CC=`pwd`/gcc-linaro-5.5.0-2017.10-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-

Test Cross Compiler:

${CC}gcc --version
arm-linux-gnueabihf-gcc (Linaro GCC 5.5-2017.10) 5.5.0
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO

Bootloader: U-Boot

Das U-Boot – the Universal Boot Loader: patch archive:

git clone
cd u-boot/
git checkout v2017.03 -b tmp


wget -c
patch -p1 < 0001-omap4_common-uEnv.txt-bootz-n-fixes.patch

Configure and Build:

make ARCH=arm CROSS_COMPILE=${CC} distclean
make ARCH=arm CROSS_COMPILE=${CC} omap4_panda_defconfig

Linux Kernel

This script will build the kernel, modules, device tree binaries and copy them to the deploy directory.

git clone
cd armv7-multiplatform/

For v4.9.x (Longterm 4.9.x):

git checkout origin/v4.9.x -b tmp

For v4.9.x-rt (Longterm 4.9.x + Real-Time Linux):

git checkout origin/v4.9.x-rt -b tmp

For v4.10.x (Stable):

git checkout origin/v4.10.x -b tmp

For v4.11.x (Prepatch):

git checkout origin/v4.11.x -b tmp



Root File System

Debian 9








wget -c


sha256sum debian-9.3-minimal-armhf-2017-12-09.tar.xz
5120fcfb8ff8af013737fae52dc0a7ecc2f52563a9aa8f5aa288aff0f3943d61  debian-9.3-minimal-armhf-2017-12-09.tar.xz


tar xf debian-9.3-minimal-armhf-2017-12-09.tar.xz

Ubuntu 16.04 LTS






wget -c


sha256sum ubuntu-16.04.3-minimal-armhf-2017-12-09.tar.xz
cacc1a8c56649808e3bc27ca58f94dbe817b9e86e660780009a3535709823cc1  ubuntu-16.04.3-minimal-armhf-2017-12-09.tar.xz


tar xf ubuntu-16.04.3-minimal-armhf-2017-12-09.tar.xz

Setup microSD card

For these instruction we are assuming, DISK=/dev/mmcblk0, lsblk is very useful for determining the device id.

export DISK=/dev/mmcblk0

Erase partition table/labels on microSD card:

sudo dd if=/dev/zero of=${DISK} bs=1M count=10

Install Bootloader:

sudo dd if=./u-boot/MLO of=${DISK} count=1 seek=1 bs=128k
sudo dd if=./u-boot/u-boot.img of=${DISK} count=2 seek=1 bs=384k

Create Partition Layout:
With util-linux v2.26, sfdisk was rewritten and is now based on libfdisk.

sudo sfdisk --version
sfdisk from util-linux 2.27.1
sfdisk >= 2.26.x
sudo sfdisk ${DISK} <<-__EOF__
sfdisk <= 2.25.x
sudo sfdisk --unit M ${DISK} <<-__EOF__

Format Partition:

for: DISK=/dev/mmcblk0
sudo mkfs.ext4 -L rootfs ${DISK}p1
for: DISK=/dev/sdX
sudo mkfs.ext4 -L rootfs ${DISK}1

Mount Partition:
On most systems these partitions may will be auto-mounted...

sudo mkdir -p /media/rootfs/
for: DISK=/dev/mmcblk0
sudo mount ${DISK}p1 /media/rootfs/
for: DISK=/dev/sdX
sudo mount ${DISK}1 /media/rootfs/

Install Kernel and Root File System

To help new users, since the kernel version can change on a daily basis. The kernel building scripts listed on this page will now give you a hint of what kernel version was built.

Script Complete [user@localhost:~$ export kernel_version=4.X.Y-Z]

Copy and paste that "export kernel_version=4.X.Y-Z" exactly as shown in your own build/desktop environment and hit enter to create an environment variable to be used later.

export kernel_version=4.X.Y-Z

Copy Root File System

sudo tar xfvp ./*-*-*-armhf-*/armhf-rootfs-*.tar -C /media/rootfs/
sudo chown root:root /media/rootfs/
sudo chmod 755 /media/rootfs/

Set uname_r in /boot/uEnv.txt

sudo sh -c "echo 'uname_r=${kernel_version}' >> /media/rootfs/boot/uEnv.txt"

Device Tree Binary

PandaBoard EA1->A3
sudo sh -c "echo 'dtb=omap4-panda.dtb' >> /media/rootfs/boot/uEnv.txt"
PandaBoard A4->+ (non ES)
sudo sh -c "echo 'dtb=omap4-panda-a4.dtb' >> /media/rootfs/boot/uEnv.txt"
PandaBoard ES
sudo sh -c "echo 'dtb=omap4-panda-es.dtb' >> /media/rootfs/boot/uEnv.txt"
PandaBoard ES Rev B3
sudo sh -c "echo 'dtb=omap4-panda-es-b3.dtb' >> /media/rootfs/boot/uEnv.txt"

Copy Kernel Image

Kernel Image:

sudo cp -v ./armv7-multiplatform/deploy/${kernel_version}.zImage /media/rootfs/boot/vmlinuz-${kernel_version}

Copy Kernel Device Tree Binaries

sudo mkdir -p /media/rootfs/boot/dtbs/${kernel_version}/
sudo tar xfv ./armv7-multiplatform/deploy/${kernel_version}-dtbs.tar.gz -C /media/rootfs/boot/dtbs/${kernel_version}/

Copy Kernel Modules

sudo tar xfv ./armv7-multiplatform/deploy/${kernel_version}-modules.tar.gz -C /media/rootfs/

File Systems Table (/etc/fstab)

sudo sh -c "echo '/dev/mmcblk0p1  /  auto  errors=remount-ro  0  1' >> /media/rootfs/etc/fstab"


Edit: /etc/network/interfaces

sudo nano /media/rootfs/etc/network/interfaces


auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp


Install Firmware:

git clone git:// --depth=1
sudo mkdir -p /media/rootfs/lib/firmware/ti-connectivity
sudo cp -v ./linux-firmware/ti-connectivity/* /media/rootfs/lib/firmware/ti-connectivity

Setup WiFi

sudo nano /media/rootfs/etc/network/interfaces
auto wlan0
iface wlan0 inet dhcp
    wpa-ssid "essid"
    wpa-psk  "password"

Remove microSD/SD card

sudo umount /media/rootfs


PandaBoard ES Rev B3: New Memory Timings

Note: the U-Boot patch on this wiki has this fix already applied...

U-Boot SPL 2013.04-00015-gfe81c6a (Apr 24 2013 - 14:35:14)
OMAP4460 ES1.1
SDRAM: identified size not same as expected size identified: 0
expected: 40000000

Comment out:;a=blob;f=include/configs/omap4_common.h;h=2fa4382c3ef54a3f39102a26eb717afcabd1bfe3;hb=refs/tags/v2013.07-rc3#l258

/* Disable for PandaBoard ES Rev B3 #define CONFIG_SYS_EMIF_PRECALCULATED_TIMING_REGS */

PandaBoard A4 (with "M" Micron memory)

U-Boot SPL 2014.04-dirty (Apr 18 2014 - 13:51:58)
OMAP4430 ES2.3
SDRAM: identified size not same as expected size identified: 1000 expected: 40000000
SPL: Please implement spl_start_uboot() for your board
SPL: Direct Linux boot not active!
reading u-boot.img
reading u-boot.img

Fix: v2014.04:;a=blob;f=include/configs/ti_omap4_common.h;h=bcb5eabd75660c4388b094258fbe2d6964b93db3;hb=refs/tags/v2014.04#l50



Comments, feedback, and questions can be sent to:
Please use the Digi-Key's TechForum: TechForum


  1. Hi Robert,

    this is a great article for Pandaboard. It help me a lot for running debian on Panda (which I could not find anywhere so clean and organized).

    But I have few doubts on this

    1. does the kernel built from your steps is having SGX support on Pandaboard?

    2. there are two different scripts called and what are those and how to use them?

    3. Also can you gimme a insight what does??

    Basically, I was trying running XBMC on this (using this kernel + debian wheezy) but it was saying h/w media support is not present and it was asking me to install proper drivers.

    Can you please help me on this. You answers will be highly appreciated.


    1. Hi Tirtha,

      1. At this point, there's no support for the SGX hardware on omap4 class device with a mostly mainline kernel, I'm waiting for TI's rumored kms/sgx release..
      2. Those two scripts are currently only useful for omap3 class devices (Beagle, Beagle xM, and igepv2) to utilize the DSP and SGX hardware.
      3. ./ builds a deb file, useful for some people over zImage/modules..


      1. thanks for your quick reply.

        But I guess some 3rd party support for SGX is already there on Pandaboards. I am not sure but I saw is running xbmc which requires h/w accelerator support.

        Do you have any information on this? Any pointer to any patches on any kernel version, which can make SGX and/or DSP up on pandaboard?

        thanks again for your concern.

        1. Hi Tirtha,

          They are using one of the linaro omap4 kernel tree's that contain extra patches for the pvr bits..

          Graphics Drivers:;a=shortlog
          Linaro Kernel tree:;a=summary


      2. Hi Robert,
        Very good your article. Excellent.
        Just one thing, I wonder, with your experience, how can I find any reference to use support for SGX in PandaBoard.?
        I already tried some things like (but unsuccessfully)
        1) I used ( gfxsdk 4_04_00_04 ) from TI, with 2.6.37 kernel --> I compiled Kernel and gfxsdk successfully.
                 But when I run the linux on PandaBoard ES, it stop in "Uncompressing Linux... done, booting the kernel."  
        2) I used ( gfxsdk 4_04_00_04 ) from TI, with 3.5.rc7 kernel --> I compiled Kernel successfully.
                 But when I tried compile gfxsdk, I get the following error : error: implicit declaration of function 'cpu_is_omap3530' [-Werror=implicit-function- declaration]
        3) The newest SDK ( gfxsdk 4_08_00_01 ) from TI --> don't have support to es7.x, that is used from PandaBoard.
        Thank you.

        1. Hi Fabio,

          I actually have not done much with the SGX side on the PandaBoard...

          1. The Mainline v2.6.37 kernel does not include the omap4460 patchset, so it won't boot...
          2. The cpu_is_omap3530 define was moved see my patch here:
          3. Actually newest is 4_08_00_02 released a week ago. They do not include the es7.x as the group that creates these gfxsdk canned their am45xx version of the omap4 from the TI wireless group (AKA OMAP group).


          1. Robert Nelson Thanks for your quick reply.
            I'll use your patch, and see if it works.
            I do not know why they remove support for "es7.x" since it already existed.
            Thank her help.

            1. Hi Fabio,

              They removed es7.x because the am45xx line was removed from the Sitara Road Map (aka canned).

              Background: At TI, (well till a few weeks ago) there are two main Cortex-A based product groups. Sitara Group (am37xx/am335x products) and the OMAP Group (omap4430/omap5xxx products).

              These gfxsdk's (4_04_00_04/4_08_00_02) are from the Sitara group in TI. They only support their Sitara products, which currently consist of:

              • AM35xx (es3)
              • AM37xx (es5)
              • 38xx (es6)
              • AM335x (es8)


              If you want es7 drivers you need to talk to (now defunct) OMAP group, or companies they worked with like Canonical/Linaro who the OMAP group provided a special gfxsdk for..


              1. Thank you, Robert.
                With your help, it became clear to me.

  2. Hi,

    I am facing one issue. After all this, My pandaboard is up and running perfect. But when i made a simple "hello world" program, compile it with arm-linux-gnueabi-gcc and try to run on board, it showing one error "-bash: No such file or directory". Even though binary was there.

    Please help me on this issue.


    1. Hi Rahul,

      If the "binary" is actually present, then it is most likely you just have nt marked the file's execute permission bits...

      chmod a+x file

      After which, "./file" should now run as intended..

      If this is not the case, please see: and re-ask your question.


      1. Yes, I did that but problem doesn't solve.

        1. Hi Rahul,

          I'm Sorry, without more information, it's really hard to pin down what's going wrong.

          But, for reference I put up a quick Hello World example using C here:


        2. Hi Rahul,

          though without any further details, it is hard to tell any solution.

          Once wild guess, how did u build the hello.c?? did u used bionic libc???

          either you should build your source as a part of Android build else you need to include bionic headers file and standard libraries (libc, libm etc) build as part of bionic.

          If you have only used like following 

          $ arm-linux-gnueabi-gcc -o hello hello.c

          it would not work....rather you need to use

          $ arm-linux-gnueabi-gcc -o hello -L<path-to-bionic-lib> -lc -I<path-to-bionic-arm-headers> hello.c

        3. Hello, Rahul.
          I found on the PandaBoard that I needed to use a hard float linaro toolchain to get my binaries working.  When I did not use Hard Float I received the same error.  bash responded like the binary did not exist.  Try:
          If you "apt-get install gcc g++" you can also build directly on the board.

  3. Hi,

    After doing all the above steps for making sd-card with boot and rootfs partition and put related images, I am facing one issue on panda board,

    processing stops after this messages, "init: ureadahead main process (49) terminated with status 5", and no prints after this.

    Can you please suggest on this issue.


    Rahul Bhansali

    1. Hi Rahul,

      Please use and upload your full serial boot-log (from power on to crash), please also include your actual uEnv.txt and which kernel branch you built from.. Based on the error message, it sounds like you utilized the Ubuntu 12.10 image, so please confirm.. Did you also remember to set the serial/getty init script? Also your using the hdmi plug labeled as "dvi"?


      1. Here is the boot log,

        and uEnv.txt that I am using is

        kernel branch is 3.2.34-x15

        Yes I am using Ubuntu 12.10 image, and i set the getty init script and able to get login prompt but the problem is after

        "init: ureadahead main process (49) terminated with status 5" message, there is no prints for 5 minutes and then after login prompt appears.

        I just want to know the reason of this much wait before login prompt, Is there any way to solve it.

        1. Hi Rahul,

          So the login prompt does appear but there's a large delay?

          First make sure your ethernet cable is plugged in, by default Ubuntu has a failsafe boot script that delays boot for upto 2 Minutes while it's waiting for an IP address. (This message does not show up on the serial log, it's usually only on the first console window...)

          Second, Ubuntu does not really like starting without an initramfs, so once you've booted for the first time you can generate one: (It's a clsssic Chicken & Egg problem...)

          sudo update-initramfs -c -k $(uname -r)
          sudo cp -v /boot/initrd.img-$(uname -r) /boot/uboot/initrd.img

          Then in uEnv.txt:

          #Just: zImage
          #loaduimage=run mmc_load_image; echo Booting from mmc ...; run mmcargs; bootz 0x80300000


          #zImage and initrd
          loaduimage=run mmc_load_image; run mmc_load_initrd; echo Booting from mmc ...; run mmcargs; bootz 0x80300000 0x81600000:${initrd_size}


          1. Hi Robert,

            I followed the steps but still didn't get any success to reduce delay. Is there anything that can be try out to reduce delay before login prompt?


            Rahul Bhansali

            1. Hi Rahul,

              If you've implemented both those steps I pointed out and are still not getting a login prompt within 10 Seconds, I'm really not sure what's going on with your image and will not be able to confirm till next Monday as I am away from my hardware. If you want a faster login now, I'd advice you to switch to the non-upstart based Debian Wheezy Image posted on this site as that still uses system V based start-up scripts.

              *Update: on my PandaBoard: with Ubuntu 12.10 and 3.2.34-x15:

              2012-11-26,13:00:14: [    5.534423] init: ureadahead main process (49) terminated with status 5
              2012-11-26,13:00:19: Ubuntu 12.10 arm ttyO2

              About 5 second delay...

              Full Time log:


  4. Hi Robert,

    great work with that article here, thanks for that!

    I have PandaBoard ES with Ubuntu 11.10, but i need some more kernel modules so that i need to build a new kernel with this modules (usbip). With your buildscript it was pretty easy to build the kernel and i found the 3.7.1-x5.zImage and mods in deploy folder, but i don't know what to do with them right now? Could you please help to get booted from my new kernel? Thanks and greetings from Germany


    1. Hi Patrick,

      I just enabled and pushed out a config change with the CONFIG_USBIP_CORE module now enabled (in the past it wouldn't even build, so it had been disabled in my builds)..

      I left the CONFIG_USBIP_DEBUG option disabled encase it just increases the amount of spam the dmesg, if you could please also test with that enabled to see how badly it spam's...

      To quickly deploy the new image, you can either run my ./tools/ script from the stable-kernel directory or copy the zImage/uImage & modules as shown later in this section


  5. Hi, Robert,

    I am using Pnadaboard. I did all the steps as above but i am geting an error, which Rahul Bhansali\ also got.

    I am using arm-linux-gnueabhihf- ... as the Cross compiler.

    I am using ubuntu 12.10 as my file system.

    2.710510] platform twl6030_usb: Driver twl6030_usb requests probe deferral

    [    3.298095] init: ureadahead main process (69) terminated with status 5

    I tried what all was written in above step. But it still dint worked. ... i have uploaded my log. .. my Env.txt

    Can you tell me where would i have gone wrong.


    Ashish Chaple 

    1. Hi Ashish,

      Everything looks normal, but it looks like you mis-typed the serial parameter, as the serial login (via getty) did not appear. If you did enable serial, it's O in omap, not 0 in zero..