labs.beatcraft.com 2.6.29 kernel への更新 †kernel 2.6.24 の microSD boot 環境が用意できたので、この kernel 部分を 2.6.29 で置き換えます。 kernel source の取得 †今回は 2.6.29.4 で作業をしましたので、以下のようにして kernel soruce を取得します。 $ 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 bc9 用 patch の適用 †kernel.org から取得したいわゆる vanilla kernel は、そのままでは arm 用に build しても bc9 を起動することができません。 $ 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 (以下略) patch 済みの linux-2.6.29.4 を rename しておきます。 $ cd .. $ mv linux-2.6.29.4 linux-2.6.29.4-bc9 kernel build の準備 †kernel を bc9用に cross build するため以下のような script を用意し、これを source して $ 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 patch を当て終わると、linux-2.6.29.4-bc9/arch/arm/configs/bc9_defconfig ができているので、以下のように copy します。 $ cd linux-2.6.29.4-bc9 $ cp arch/arm/configs/bc9_defconfig .config この .config はすでに make menuconfig して調整をすませて作成したものですので、このまま build できます。 $ 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 †この script を kernel source のディレクトリで実行します。 $ mv make-bc9-kernel.sh linux-2.6.29.4-bc9 $ cd linux-2.6.29.4-bc9 $ ./make-bc9-kernel.sh build が正常に終了すると、標準の make を実行した場合に得られるファイルの他に以下の二つのファイルが得られます。 modules-2.6.29.4-bc9-r2.tgz uImage-bc9-2.6.29.4-bc9-r2.bin microSD へのコピー †上記のファイルを 2.6.24 が起動する microSD へ以下のようにコピーします。 $ 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 2.6.29.4-bc9 microSD boot †上記で用意できた microSD を bc9 の microSD スロットに戻して電源を入れると、 $ uname -a Linux gumstix-custom-verdex 2.6.29.4-bc9-r2 #1 Tue Jun 26 20:43:33 JST 2009 armv5tel unknown by 大塚聡史
|