|
labs.beatcraft.com 2.6.29 android kernel への更新 †OpenEmbedded の kernel と同様の手順で Android 用の kernel を 2.6.29 に更新することができます。 Android kernel source の取得 †以下のようにして kernel soruce を取得します。 $ git clone git://android.git.kernel.org/kernel/common.git kernel $ cd kernel $ git checkout --track -b android-2.6.29 origin/android-2.6.29 取得したら分かりやすいよう名前を変更しておきます。 $ mv kernel linux-2.6.29-android bc9 用 patch の適用 †Android の git repositry から取得したままの kernel では、 arm 用に build しても bc9 を起動することができません。 $ tar xvfz patch-kernel-2.6.29.4-bc9-r2.tgz $ ls linux-2.6.29-android patch-kernel-2.6.29.4-bc9 $ cd linux-2.6.29-android $ 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-android を rename しておきます。 $ cd .. $ mv linux-2.6.29-android linux-2.6.29-android-bc9 kernel build の準備 †kernel を bc9用に cross build するため以下のような script を用意し、これを source して #!/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-android-bc9/arch/arm/configs/bc9_defconfig ができているので、以下のように copy します。 $ cd linux-2.6.29-android-bc9 $ cp arch/arm/configs/bc9_defconfig .config この .config は OpenEmbedded 用の調整は終わっていますが、Android 用の調整は行われていません。 #!/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-android-bc9 $ cd linux-2.6.29-android-bc9 $ ./make-bc9-kernel.sh build が正常に終了すると、標準の make を実行した場合に得られるファイルの他に以下の二つのファイルが得られます。 modules-2.6.29-bc9-r2.tgz uImage-bc9-2.6.29-bc9-r2.bin microSD へのコピー †上記のファイルを 2.6.24 が起動する microSD へ以下のようにコピーします。 $ sudo cp linux-2.6.29-android-bc9/uImage-bc9-2.6.29-bc9-r2.bin /media/disk/uimage $ sudo tar -C /media/disk-1/ -xvfz linux-2.6.29-android-bc9/modules-2.6.29-bc9-r2.tgz 2.6.29-android-bc9 microSD boot †上記で用意できた microSD を bc9 の microSD スロットに戻して電源を入れると、 $ uname -a Linux gumstix-custom-verdex 2.6.29-bc9-r2 #1 PREEMPT Tue Jun 27 21:45:28 JST 2009 armv5tel unknown by 大塚聡史
|