Rebuilding OLPC kernel

From OLPC
Revision as of 15:51, 16 December 2008 by 64.34.172.97 (talk) (FIELD_OTHER)
Jump to: navigation, search
  This page is monitored by the OLPC team.
Merge-arrows.gif
It has been suggested that this article or section be merged with Kernel. (Discuss)


This document describes building an OLPC kernel from the olpc-2.6 git repository or SRPM. You will want to do this on a Fedora Core 6 machine. These instructions do not work for FC8, but reportedly work on FC7.

The OLPC kernel sources

The first step involves grabbing the kernel sources; either do a 'git clone' of the kernel git repository, or install the kernel SRPM. Both steps are described on the Kernel page.

Installing the SRPM will place the sources in /usr/src/redhat/SOURCES/olpc-2.6.tar.bz2

FIELD_MESSAGE_dardomro

Building the RPM (from scratch)

This is the way that the official kernel RPMs are built. Note that this allows you to build within a subdirectory somewhere (rather than using /usr/src/redhat).

First, grab the kernel sources:

git clone --quiet git://dev.laptop.org/olpc-2.6 linux-2.6.22

Note that the name of the directory these sources are cloned into is important. It must start with linux.2.6., followed by two numbers identifying the sublevel. These must match the sublevel defined in olpc-2.6/Makefile. Optionally check out a particular branch using:

git checkout origin/stable

Now construct the build directory structure:

BASE=`pwd`/build; CUR=0
git clone --quiet git://dev.laptop.org/users/dilinger/olpc-2.6-rpm $BASE
(cd $BASE && mkdir -p BUILD  RPMS  SOURCES  SPECS  SRPMS)
tar -jc --exclude=.git -f $BASE/SOURCES/olpc-2.6.tar.bz2 linux-2.6.22

You need to build a config file for the kernel. This is done in the source directory checked out using git:

make ARCH=i386 -C linux-2.6.22 olpc_defconfig
cp linux-2.6.22/.config $BASE/SOURCES/kernel-olpc-custom.config

If building for a school server, make xs_defconfig instead:

make ARCH=i386 -C linux-2.6.22 xs_defconfig
cp linux-2.6.22/.config $BASE/SOURCES/kernel-olpc-custom.config

Now you can actually build the kernel and package it into an RPM:

rpmbuild -ba --define "dist 1.olpc" --define "olpc 1" --define "head `echo $CUR|cut -b1-15`" --target=i586 --define "_topdir $BASE" $BASE/SPECS/olpc-2.6.spec

The git://dev.laptop.org/users/dilinger/olpc-2.6-rpm repository contains the RPM SPEC file and other things necessary to bootstrap the RPM. When complete, the RPMs will be in build/RPMS/i586/.

Upgrading your kernel build

You will first need to pull down the newest kernel sources, and tar them up:

BASE=`pwd`/build; CUR=0
pushd linux-2.6.22; git pull ; popd
tar -jc --exclude=.git -f $BASE/SOURCES/olpc-2.6.tar.bz2 linux-2.6.22

You need to build a new config file for the kernel. This is done in the source directory checked out using git:

make ARCH=i386 -C linux-2.6.22 olpc_defconfig
cp linux-2.6.22/.config $BASE/SOURCES/kernel-olpc-custom.config

Don't forget to delete the directory from a previous build!

rm -r $BASE/BUILD/*

Now you can actually build the kernel and package it into an RPM:

rpmbuild -ba --define "dist 1.olpc" --define "olpc 1" --define "head `echo $CUR|cut -b1-15`" --target=i586 --define "_topdir $BASE" $BASE/SPECS/olpc-2.6.spec

Fedora 8 (FC8) Notes

On May 1, 2008, Chris Ball mentioned that FC6 is still being used on the build server. He had also built an FC8 core by making these two changes:

  • GNU tar no longer allows you to (e.g.) "tar xf foo.tar '*.h'" without

adding a --wildcards before the pattern. In the specfile, change:

  'linux-2.6.[0-9][0-9]/Makefile'

to

  --wildcards 'linux-2.6.[0-9][0-9]/Makefile'
  • The debuginfo packaging failed. Adding:
  %define _enable_debug_packages 0

to the top of the specfile disables that part of the build, and produced a working kernel package.