Difference between revisions of "Kernel build instructions"

From Pandora Wiki
Jump to: navigation, search
(Applying The Patches)
(Getting The Patches)
Line 78: Line 78:
 
source ./op-env-oe.sh
 
source ./op-env-oe.sh
 
./initial-setup.sh
 
./initial-setup.sh
cd metadata/openembedded.git
+
cd metadata/openembedded.git/
 
git checkout op.openembedded.next
 
git checkout op.openembedded.next
 
</source>
 
</source>

Revision as of 01:19, 29 October 2011


Preparation

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. 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

C:\SourceryG++\

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.

Git

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.


mkimage

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


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://openpandora.org/pandora-kernel.git

This will now download the source from openpandora.org. 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/

Then:

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 Firmware_build_instructions).

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 ..

Then:

git clone git://git.openpandora.org/pandora-oe-environment.git pandora-firmware
cd pandora-firmware
source ./op-env-oe.sh
./initial-setup.sh
cd metadata/openembedded.git/
git checkout op.openembedded.next

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

Building

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

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

You also need to have CROSS_COMPILE set:

export CROSS_COMPILE=arm-none-linux-gnueabi-

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

export ARCH=arm

Now set up the default .config file:

make omap3_pandora_defconfig

If you want to customize kernel features, run

make menuconfig

When finished, just run

make uImage
make

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