labs.beatcraft.com
bc9/Software/OpenEmbedded/kernel2.6.29(1/2)

Updating kernel to 2.6.29

Once you have prepared bootable microSD with kernel 2.6.24, replace its kernel with version 2.6.29.
Following is procedure.

Obtaining kernel source

This time, we modify 2.6.29.4 kernel, so get it as follows:

$ wget http://www.jp.kernel.org/pub/linux/kernel/v2.6/linux-2.6.29.4.tar.bz2
$ tar xvfj linux-2.6.29.4.tar.bz2

Applying patch for bc9

The kernel obtained from kernel.org (so called vanilla kernel) can't boot bc9 without modification,
even if it is built for ARM processor.
We must patch kernel for booting up bc9.
This tgz archive filepatch-kernel-2.6.29.4-bc9-r2.tgz contain patch files with sequential numbers.
Do patch in serial order as follows: (Bigger number patch require previous patch already applied. So please patch in serial order.)

$ tar xvfz patch-kernel-2.6.29.4-bc9-r2.tgz
$ ls 
linux-2.6.29.4  patch-kernel-2.6.29.4-bc9
$ cd linux-2.6.29.4
$ patch -p1 < ../patch-kernel-2.6.29.4-bc9/01-minimum.patch
$ patch -p1 < ../patch-kernel-2.6.29.4-bc9/02-lcd.patch
$ patch -p1 < ../patch-kernel-2.6.29.4-bc9/03-tsc.patch
$ patch -p1 < ../patch-kernel-2.6.29.4-bc9/04-usb.patch
$ patch -p1 < ../patch-kernel-2.6.29.4-bc9/05-proc-gpio.patch
*snip*

Rename patch applied linux-2.6.29.4 source directory.

$ cd ..
$ mv linux-2.6.29.4 linux-2.6.29.4-bc9

Preparing kernel build

In order to cross build patced kernel for bc9, prepare script as follows.
Source this script and set path to cross toolchain generated by bitbake.

$ vim setup_kernel_build.sh
#!/bin/sh

export PATH=/home/beat/gumstix/gumstix-oe/tmp/cross/bin:$PATH
export ARCH=arm
export CROSS_COMPILE=arm-angstrom-linux-gnueabi-
$ source setup_kernel_build.sh

After patch applied, there is linux-2.6.29.4-bc9/arch/arm/configs/bc9_defconfig. Copy this file as follows.

$ cd linux-2.6.29.4-bc9
$ cp arch/arm/configs/bc9_defconfig .config

This defconfig is already configured with make menuconfig in patched linux-2.6.29.4-bc9 kernel source.
Copy defconfig and you can build kernel just executing make command. ~ If you have something to configure, do make oldconfig just to be on the safe side, and execute make config.
After this, kernel build will successfully finish when you make.
But it's not enough for bc9. bc9 requires uImage* + modules*.tgz same as bitbake generates.
So prepare script as follows:

$ vim make-bc9-kernel.sh
#!/bin/sh

export LANG=C

GUMSTIX_HOME="/home/beat/gumstix/gumstix-oe"
SYSMAP="./System.map"

TOOL_PREFIX="${GUMSTIX_HOME}/tmp/cross/bin/arm-angstrom-linux-gnueabi-"
DEPMOD="${TOOL_PREFIX}depmod-2.6"
OBJCOPY=${TOOL_PREFIX}objcopy
MKIMG=${GUMSTIX_HOME}/tmp/staging/i686-linux/bin/uboot-mkimage
UBOOT_ENTRYPOINT="a0008000"
MOD_WORKDIR="./mod_work"

make ARCH=arm CROSS_COMPILE=${TOOL_PREFIX} prepare
KERNREL=`make kernelrelease`
KERNVER=`make kernelversion`
KERNIMG="uImage-${KERNREL}.bin"
MODTGZ="modules-${KERNREL}.tgz"
KERNIMGLN="uImage-${KERNVER}-bc9.bin"
MODTGZLN="modules-${KERNVER}-bc9.tgz"

echo "### Cleanup"
rm -rf ${MOD_WORKDIR}
rm -f ${KERNIMG} ${MODTGZ} ${KERNIMGLN} ${MODTGZLN}

echo "### Build kernel"
make ARCH=arm CROSS_COMPILE=${TOOL_PREFIX}
if [ $? != 0 ]; then
    echo "*** Failed to build kernel"
    exit 1
fi

echo "### Make kernel image"
${OBJCOPY} -O binary -R .note -R .comment 
-S ./arch/arm/boot/compressed/vmlinux linux.bin
if [ $? != 0 ]; then
    echo "*** Failed to make kernel image"
    exit 1
fi

${MKIMG} -A arm -O linux -T kernel -C none -a ${UBOOT_ENTRYPOINT} 
-e ${UBOOT_ENTRYPOINT} -n "oe/verdex/arm" -d linux.bin ${KERNIMG}
if [ $? != 0 ]; then
    echo "*** Failed to make kernel image"
    exit 1
fi

ln -s ${KERNIMG} ${KERNIMGLN}

echo "### Install modules"
make ARCH=arm DEPMOD=echo INSTALL_MOD_PATH=${MOD_WORKDIR} modules_install
if [ $? != 0 ]; then
    echo "*** Failed to modules_install"
    exit 1
fi

${DEPMOD} -A -b ${MOD_WORKDIR} -F ${SYSMAP} ${KERNREL}
if [ $? != 0 ]; then
    echo "*** Failed to depmod modules"
    exit 1
fi

echo "### Make modules tar ball"
tar czvf ${MODTGZ} -C ${MOD_WORKDIR} lib
if [ $? != 0 ]; then
    echo "*** Failed to make modules tarball"
    exit 1
fi

ln -s ${MODTGZ} ${MODTGZLN}

echo "### Finished"
ls -l ${KERNIMG} ${MODTGZ}

kernel build

Execute this script in kernel source directory.

$ mv make-bc9-kernel.sh linux-2.6.29.4-bc9
$ cd linux-2.6.29.4-bc9
$ ./make-bc9-kernel.sh

When build successfully finished, you will obtain two another files in addition to "make" generating files.

modules-2.6.29.4-bc9-r2.tgz
uImage-bc9-2.6.29.4-bc9-r2.bin

Copying to microSD

Copy those two files to kernel 2.6.24 bootable microSD as follows:
(We assume that vfat partition mount on /media/disk and ext2 partition mount on /media/disk-1 as described before.)

$ sudo cp linux-2.6.29.4-bc9/uImage-bc9-2.6.29.4-bc9-r2.bin /media/disk/uimage
$ sudo tar -C /media/disk-1/ -xvfz linux-2.6.29.4-bc9/modules-2.6.29.4-bc9-r2.tgz

Booting 2.6.29.4-bc9 from microSD

Insert prepared microSD into bc9's card slot and power on bc9.
Linux 2.6.29 boot logo(tuz) appear on LCD and bc9 boot with 2.6.29.4 kernel.

$ uname -a
Linux gumstix-custom-verdex 2.6.29.4-bc9-r2 #1 Tue Jun 26 20:43:33 JST 2009 armv5tel unknown

by Satoshi OTSUKA

Attach file: filepatch-kernel-2.6.29.4-bc9-r2.tgz 928 download [Information]

Front page   Edit Freeze Diff Backup Upload Copy Rename Reload   New List of pages Search Recent changes   RSS of recent changes
Last-modified: 2009-10-26 (Mon) 11:52:40 (2951d)