Kernel build instructions

From Pandora Wiki
Jump to: navigation, search


First you need a toolchain and several other tools.

Cygwin (Windows Users)

Cygwin is a Linux-like environment for Windows; download and install here. You will need additional packages installed to build the kernel:

  • diffutils
  • gcc4
  • make
  • ncurses
  • libncurses-devel
  • git (see below)

CodeSourcery G++

Usually CodeSourcery's ARM GNU/Linux tool chain is used to build OMAP3 kernels, but other variations can be used as well. For CodeSourcery, 2009q1-203 version is recommended (click "all versions" in above page), as 2007q3 doesn't work with kernels above 2.6.29, and 2008q1-2008q3 produce bad code in some situations. The 2011.03 does not work. See BeagleBoard page for more information.

Windows Users: When installing on Windows, do not use the default install path, as it contains spaces and will cause problems when building (when the build system uses -print-file-name=include). Install to


or similar. As mentioned here, create an environment variable called CYGPATH with the value 'cygpath' (minus the quotes). Patching your install using the SourceryG++ guide to kernel building as a reference is necessary to get your cygwin/windows builds off the ground.


For source control access, you need to have git installed. Use your packet manager or build it from source. On Windows, install via cygwin.

A guide for basic git usage.


Finally you need to have 'mkimage' tool in PATH, which can be built as part of u-boot build process, or download below:

The Kernel : Cloning and switching branches

Now you need to 'clone' kernel source using git tools from previous step. Make a directory you want to keep source in and cd into it. Then run:

git clone git://

This will now download the source from Note that it will take a while, so be patient. When done, you will have default 'master' branch checked out, but it doesn't have the latest files, so you need to checkout the current 'pandora-27-omap1' branch:

cd pandora-kernel/


git checkout --track -b pandora-27-omap1 origin/pandora-27-omap1

Firmware Compatibility

The firmware kernel is built using OE (openembedded), so the only sure way to get binary compatibility is to use that. see [[1]]

The manual procedure to do the same without using OE would be:

Getting The Patches

You have to come back to your initial directory:

cd ..


git clone git:// pandora-firmware
cd pandora-firmware
source ./
cd metadata/openembedded.git/
git checkout

Applying The Patches

Now go back into the previously downloaded kernel sources :

cd ../../../pandora-kernel/

And patch around:

patch -p1 < ../pandora-firmware/metadata/openpandora.oe.git/recipes/linux/omap3-pandora-kernel/0001-Add-EHCI-patch-suggested-by-Steven-Kipisz.patch
patch -p1 < ../pandora-firmware/metadata/openpandora.oe.git/recipes/linux/omap3-pandora-kernel/0002-Add-missing-define-to-EHCI-OMAP.c.patch
patch -p1 < ../pandora-firmware/metadata/openpandora.oe.git/recipes/linux/omap3-pandora-kernel/no-empty-flash-warnings.patch
patch -p1 < ../pandora-firmware/metadata/openpandora.oe.git/recipes/linux/omap3-pandora-kernel/oprofile-0.9.3.armv7.diff
patch -p1 < ../pandora-firmware/metadata/openpandora.oe.git/recipes/linux/omap3-pandora-kernel/no-cortex-deadlock.patch
patch -p1 < ../pandora-firmware/metadata/openpandora.oe.git/recipes/linux/omap3-pandora-kernel/read_die_ids.patch
patch -p1 < ../pandora-firmware/metadata/openpandora.oe.git/recipes/linux/omap3-pandora-kernel/fix-install.patch
patch -p1 < ../pandora-firmware/metadata/openpandora.oe.git/recipes/linux/omap3-pandora-kernel/mru-fix-timings.diff
patch -p1 < ../pandora-firmware/metadata/openpandora.oe.git/recipes/linux/omap3-pandora-kernel/mru-fix-display-panning.diff
patch -p1 < ../pandora-firmware/metadata/openpandora.oe.git/recipes/linux/omap3-pandora-kernel/mru-make-dpll4-m4-ck-programmable.diff
patch -p1 < ../pandora-firmware/metadata/openpandora.oe.git/recipes/linux/omap3-pandora-kernel/mru-improve-pixclock-config.diff
patch -p1 < ../pandora-firmware/metadata/openpandora.oe.git/recipes/linux/omap3-pandora-kernel/mru-make-video-timings-selectable.diff
patch -p1 < ../pandora-firmware/metadata/openpandora.oe.git/recipes/linux/omap3-pandora-kernel/mru-enable-overlay-optimalization.diff
patch -p1 < ../pandora-firmware/metadata/openpandora.oe.git/recipes/linux/omap3-pandora-kernel/dvb-fix-dma.diff
patch -p1 < ../pandora-firmware/metadata/openpandora.oe.git/recipes/linux/omap3-pandora-kernel/0001-Removed-resolution-check-that-prevents-scaling-when.patch
patch -p1 < ../pandora-firmware/metadata/openpandora.oe.git/recipes/linux/omap3-pandora-kernel/0001-Implement-downsampling-with-debugs.patch
patch -p1 < ../pandora-firmware/metadata/openpandora.oe.git/recipes/linux/omap3-pandora-kernel/musb-rxtx.patch
patch -p1 < ../pandora-firmware/metadata/openpandora.oe.git/recipes/linux/omap3-pandora-kernel/squashfs/0006-SquashFS-Backport-SquashFS4-to-our-2.6.27-tree.patch
patch -p1 < ../pandora-firmware/metadata/openpandora.oe.git/recipes/linux/omap3-pandora-kernel/aufs2/0007-AUFS2-Add-latest-AUFS2-in-tree-code-for-2.6.27.patch

More Dirty Things

If you have "mixed implicit and normal rules" errors (make >= 3.82), edit the Makefile:

Remove the "config" at the beginning of the line 448.

Remove the "/" at the beginning of the line 1610.

If you have "cc1: error: unrecognized command line option "-mlittle-endian"", then your toolchain is probably too recent.


To build you need to have several environment variables set. If you don't have your toolchain in PATH, you need to add it:


export PATH=$PATH:/usr/local/angstrom/arm/bin

GS G++:

export PATH=$PATH:/path/to/arm-2009q1/bin

You also need to have CROSS_COMPILE set (DJWillis):

export CROSS_COMPILE=arm-angstrom-linux-gnueabi-

Or (GS G++):

export CROSS_COMPILE=arm-none-linux-gnueabi-

Newer kernels (2.6.3x+) need ARCH set to arm:

export ARCH=arm

Now set copy the defconfig from the patch location :

cp /wherever_it_is/pandora-firmware/metadata/openpandora.oe.git/recipes/linux/omap3-pandora-kernel/defconfig ./.config

If you want to customize kernel features, run

make menuconfig

When finished, just run

make uImage

OR (in case of errors with CS G++) :

make CROSS_COMPILE="arm-none-linux-gnueabi-" uImage
make CROSS_COMPILE="arm-none-linux-gnueabi-" modules

and it should build you uImage and place it in arch/arm/boot/ . You will use it to boot from SD card (recommended) or replace the one in your flash. Last make command will build you kernel modules.

And (almost) finally :

rm /path/to/your/pandora/filesystem/boot/uImage
cp arch/arm/boot/uImage /path/to/your/pandora/filesystem/boot/
INSTALL_MOD_PATH="/path/to/your/pandora/filesystem/" make modules_install

Building Wi-Fi modules

Come back to your main directory, then clone the Wi-Fi git:

cd ..
git clone git://
cd pandora-wifi
git checkout --track -b pandora-wifi

Build (change env variables if needed):

export PATH=$PATH:/usr/local/angstrom/arm/bin/
export CROSS_COMPILE=arm-angstrom-linux-gnueabi-
make clean
make ARCH=arm KLIB=../pandora-kernel KLIB_BUILD=../pandora-kernel

And copy to your OP filesystem, ie if it's on /media/OS/ :

mkdir -p /media/OS/lib/modules/
cp compat/*.ko /media/OS/lib/modules/
chmod 0644 /media/OS/lib/modules/*.ko

mkdir -p /media/OS/lib/modules/
cp net/mac80211/*.ko /media/OS/lib/modules/
chmod 0644 /media/OS/lib/modules/*.ko

mkdir -p /media/OS/lib/modules/
cp net/wireless/*.ko /media/OS/lib/modules/
chmod 0644 /media/OS/lib/modules/*.ko

mkdir -p /media/OS/lib/modules/
cp net/rfkill/*.ko /media/OS/lib/modules/
chmod 0644 /media/OS/lib/modules/*.ko

mkdir -p /media/OS/lib/modules/
cp drivers/net/wireless/wl12xx/wl1251.ko /media/OS/lib/modules/
cp drivers/net/wireless/wl12xx/wl1251_sdio.ko /media/OS/lib/modules/
chmod 0644 /media/OS/lib/modules/*.ko

# some bonus not wl1251 related drivers

cp drivers/net/wireless/at76c50x-usb.ko /media/OS/lib/modules/
chmod 0644 /media/OS/lib/modules/

mkdir -p /media/OS/lib/modules/
cp drivers/net/wireless/rt2x00/*.ko /media/OS/lib/modules/
chmod 0644 /media/OS/lib/modules/*.ko

mkdir -p /media/OS/lib/modules/
cp drivers/net/wireless/p54/*.ko /media/OS/lib/modules/
chmod 0644 /media/OS/lib/modules/*.ko

First Boot

At the first boot, if modules don't load, type as root :

depmod -ae

And reboot.

- One forum thread about kernel recompilation here:.