[[labs.beatcraft.com]]~ [[bc9/Software/OpenEmbedded/kernel2.6.29(1/2)]]~ *Updating kernel to 2.6.29 [#s51bc679] 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 [#bb1b002a] 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 [#sa8f8446] 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 &ref(patch-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 [#v841f766] 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.~ 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 [#kd978ec6] 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 [#yc21d043] 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 [#v6e13a91] 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 ----------------- RIGHT:by Satoshi OTSUKA