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

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 を起動することができません。
そこで、bc9 が起動できるよう patch を当てます。
この filepatch-kernel-2.6.29.4-bc9-r2.tgz をダウンロードして展開すると、連番の patch ファイルがありますので、
以下のように番号順に kernel source に当てて下さい。(前の patch の適用を前提に追記する内容なので、順番に当てて下さい。)

$ 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 して
bitbake で生成された cross toolchain へ path を通します。

$ 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 できます。
調整したい項目がある場合は、念のため make oldconfig してから make menuconfig して下さい。
ここで make すれば kernel の build は成功して終了しますが、
bitbake で生成されるのと同じ uImage* + modules*.tgz を生成するため、以下のような script を用意します。

$ 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 へ以下のようにコピーします。
(作成時と同様、VFAT、ext2 partition はそれぞれ /media/disk、/media/disk-1 にmountしているものとします。)

$ 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 スロットに戻して電源を入れると、
LCD に linux の 起動logo が表示され 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 大塚聡史

添付ファイル: filepatch-kernel-2.6.29.4-bc9-r2.tgz 973件 [詳細] filebc9-kernel-patch-2.6.29.4-20090630-01.tgz 577件 [詳細]

BC::labsへの質問は、bc9-dev @ googlegroups.com までお願い致します。
トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   最終更新のRSS
Last-modified: 2009-07-21 (火) 20:30:13 (3046d)