HS-DHGLのカーネル(2.6.22)再構築

BuffaloのLinkStation(HS-DHGL)のカーネルを2.6.22で再構築してみました。

うちのHS-DHGLは新しいやつなので古いやつでも同じようにできるかはわかりません。
とりあえず忘れないように残しておく。クロスコンパイルも暇なときにやってみよう。

Debian化したHS-DHGLにログインする。

sshもしくはtelnetできることを前提としております。

カーネルソースの展開ディレクトリを/mntに用意してmount --bind する

/dev/sda2は500Mしかないのでしかたなく/mntで作業することにした。

# mkdir /mnt/usr_src
# mount --bind /mnt/usr_src /usr/src

ちなみに fstab に以下を記述しておけば自動でマウントしてくれる

/mnt/usr_src /usr/src none defaults,bind 0 0

mkimage コマンド作成

このコマンドでuImageを作ります。

# cd /usr/src
# wget ftp://ftp.denx.de/pub/u-boot/u-boot-1.3.0.tar.bz2
# tar jxf u-boot-1.3.0.tar.bz2
# cd u-boot-1.3.0
# make cp926ejs_config
# make tools
# cp tools/mkimage /usr/local/sbin/

カーネルソースとコンフィグファイル取得

# cd /usr/src
# svn checkout https://linkstationwiki.svn.sourceforge.net/svnroot/linkstationwiki/kernel_arm9/trunk/src/linux-2.6.22/
# svn checkout https://linkstationwiki.svn.sourceforge.net/svnroot/linkstationwiki/kernel_arm9/trunk/configs/
# tar jxf linux-2.6.22.tar.bz2
# cp configs-2.6/linux-2.6.22-config linux-2.6.22/.config

NICのドライバにパッチを当てる

http://forum.nas-central.org/viewtopic.php?p=40839&sid=909fafadf0d7ef3012f97ca9488465cc#p40839

Index: arch/arm/mach-mv88fxx81/LSP/core.c
===================================================================
--- arch/arm/mach-mv88fxx81/LSP/core.c   (revision 333)
+++ arch/arm/mach-mv88fxx81/LSP/core.c   (working copy)
@@ -924,7 +924,6 @@
            memcpy(mvMacAddr, mv_uboot->macAddr, 6);
         }

-         memcpy(mvMacAddr, mv_uboot->macAddr, 6);
         break;
      }

Index: drivers/net/egiga/mv_ethernet_main.c
===================================================================
--- drivers/net/egiga/mv_ethernet_main.c   (revision 333)
+++ drivers/net/egiga/mv_ethernet_main.c   (working copy)
@@ -2257,7 +2257,7 @@
     int i;
   for (i=0 ; i<6 ; i++)
   {
-      if (mvMacAddr[i] != 0) break;
+      if (mvMacAddr[i] != 0xFF) break;
   }
   /* if mvMacAddr is Zero then read from the Port itself */
   if (i==6)

このパッチファイルを作るくらいなら手動で編集したほうが早いんでviで編集した。

カーネルビルド

menuconfigで何を設定するかによりますがmakeに2時間くらいかかります。

# cd /usr/src/linux-2.6.22
# make menuconfig
# make uImage && make modules

カーネル差し替え

# cd /usr/src/linux-2.6.22
# make modules_install
# mv /boot/uImage.buffalo /boot/uImage.buffalo.org
# cp arch/arm/boot/uImage /boot/uImage.buffalo

再起動

あとは神に祈るのみ。
起動しなかったらHDDを別のマシンに繋いで /boot/uImage.buffalo.org を /boot/uImage.buffalo に上書きして起動しなおしてください。