2011年6月13日月曜日

obs600-08 Debianでmkimage

Debianで運用しだした時、kernelをアップデートするときだけ、ssd-linuxにしてkernelビルドするより、Debianのままでコンパイルするほうが、ドライバの動作テスト等にはスピーディで都合が良いので、ためしにDebianでkernelを2.6.36にしてみたいと思います。

(1) ソースとパッチの入手
http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.36.tar.bz2
http://www.kernel.org/pub/linux/kernel/v2.6/patch-2.6.36.4.bz2
http://download.filesystems.org/unionfs/unionfs-2.x/unionfs-2.5.8_for_2.6.36.4.diff.gz

http://ftp.plathome.co.jp/pub/ssdlinux/0.5-LATEST/source/src.tgz
-rw-rw-r-- 1 root wheel  8761531 Apr 15 01:24 src.tgz
#src.tgzから
/usr/src/mkdist/kernel/2.6.36/patches
-rw-r--r-- 1 root root      0 Oct 28  2010 Makefile.patch
-rw-r--r-- 1 root root  22277 Oct 28  2010 arch_powerpc.patch
-rw-r--r-- 1 root root   6852 Oct 28  2010 drivers_char.patch
-rw-r--r-- 1 root root    477 Oct 28  2010 drivers_net.patch
-rw-r--r-- 1 root root    543 Oct 28  2010 drivers_serial.patch
-rw-r--r-- 1 root root 494645 Oct 28  2010 drivers_usb.patch
-rw-r--r-- 1 root root    678 Oct 28  2010 include_asm_generic.patch
-rw-r--r-- 1 root root   3702 Oct 28  2010 include_linux.patch
-rw-r--r-- 1 root root   6493 Oct 28  2010 init.patch
-rw-r--r-- 1 root root   1390 Oct 28  2010 kernel.patch
-rw-r--r-- 1 root root    563 Mar 31 16:32 scripts.patch
(2) patchあて
#手でひとつずつpatchあては面倒なのでスクリプトを用意

root@squeeze:src# cat /usr/src/my_2636_patch.sh
#! /bin/bash
# cd /usr/src
# tar jxf /usr/src/dist/distfiles/linux-2.6.36.tar.bz2
# cd linux-2.6.36
# ../my_2636_patch.sh 2>&1 | tee my_2636_patch.log
MYCWD=`pwd`
if [ "/usr/src/linux-2.6.36" != "${MYCWD}" ]; then
  echo "Must be /usr/src/linux-2.6.36 (Now=${MYCWD})"
  exit 0
fi
date
KPATCH=/usr/src/dist/distfiles/patch-2.6.36.4.bz2
if [ ! -f ${KPATCH} ]; then
  echo "Not Found ${KPATCH}"
  exit 0
fi

echo "(0) bzip2 -dc ${KPATCH} | patch -p1"
bzip2 -dc ${KPATCH} | patch -p1

SPDIR=/usr/src/mkdist/kernel/2.6.36/patches
if [ ! -d ${SPDIR} ]; then
  echo "Not Found DIR ${SPDIR}"
  exit 0
fi

echo "OBS600 Patch START."
CUR=1
while read file
do
  ppath="${SPDIR}/${file}"
  echo -n "($CUR) cat ${ppath} | patch -p1"
  cat ${ppath} | patch -p1
  CUR=`expr $CUR + 1`
  echo ""
done <<EOF
arch_powerpc.patch
drivers_char.patch
drivers_net.patch
drivers_serial.patch
drivers_usb.patch
include_asm_generic.patch
include_linux.patch
init.patch
kernel.patch
scripts.patch
EOF
echo ""
date
exit 0
(3) make uImage
ssd-linux[10]# pwd
/usr/src/linux-2.6.36
ssd-linux[11]# cp -p /usr/src/mkdist/kernel/2.6.36/dot.config.powerpc-obs600.ipv6 .config
# diff Makefile.org Makefile    
4c4
< EXTRAVERSION = .4
---
> EXTRAVERSION = _obs600
ssd-linux[12]# make oldconfig
ssd-linux[13]# make uImage
ssd-linux[14]# make modules
ssd-linux[15]# make modules_install
ssd-linux[16]# 
(4) Debianで mkimage して uImage.initrd を作る
ただし、obs600.dtb と ramdisk.image-cfboot.gz はssd-linuxのものを持ってきます。
cp -p /dsk/sdb1/usr/src/distrib/powerpc-obs600/dtb/obs600.dtb /usr/src/linux-2.6.36
cp -p /dsk/sdb1/usr/src/distrib/powerpc-obs600/cfboot/initrd/ramdisk.image-cfboot.gz /usr/src/linux-2.6.36

# dpkg -S /usr/bin/mkimage
u-boot: /usr/bin/mkimage

# cd /usr/src/linux-2.6.36
# mkimage -n 20110613_1047-sda1 -A ppc -O linux -T multi -C gzip -d vmlinux.bin.gz:ramdisk.image-cfboot.gz:obs600.dtb uImage.36_20110613
Image Name:   20110613_1047-sda1
Created:      Mon Jun 13 10:47:09 2011
Image Type:   PowerPC Linux Multi-File Image (gzip compressed)
Data Size:    2264402 Bytes = 2211.33 kB = 2.16 MB
Load Address: 00000000
Entry Point:  00000000
Contents:
   Image 0: 1839432 Bytes = 1796.32 kB = 1.75 MB
   Image 1: 417113 Bytes = 407.34 kB = 0.40 MB
   Image 2: 7838 Bytes = 7.65 kB = 0.01 MB

新しい uImage.initrd で起動してみる

=> tftpboot 0x400000 192.168.1.70:uImage.36_20110613
=> bootm 0x400000
## Booting kernel from Legacy Image at 00400000 ...
   Image Name:   20110613_1047-sda1
   Created:      2011-06-13   1:47:09 UTC

root@squeeze:〜# uname -a
Linux squeeze 2.6.36_obs600 #3 Mon Jun 13 10:35:47 JST 2011 ppc GNU/Linux
なんとなく、Debian環境で2.6.36 をビルドして、2.6.36_obs600 が起動しました。
細かい調整をしつつ、次回は、無線LANのAP化に挑戦したいです。
--

0 件のコメント:

コメントを投稿