LinkStation/玄箱のkernelに関するページです。

クロスコンパイル環境の作成

emdebian-tools を用いる場合

apt-cross を用いる場合

crosstoolを用いる場合

loader.o や uloader.o のコンパイルはカーネルをビルドしたのと同じgccのバージョンが必要なので、gcc-2.95.3が必要だった。apt-crossではうまく作成できなかったので、crosstoolを用いた。
参考:Build (and use) a cross-toolchain using Dan Kegel's crosstool 0.38 - NAS-Central Buffalo - The Linkstation Wiki

crosstool本体のダウンロードと展開

pre> $ mkdir workdir $ cd workdir $ wget http://www.kegel.com/crosstool/crosstool-0.43.tar.gz $ tar zxvf crosstool-0.43.tar.gz $ cd crosstool-0.43

/pre>

LinkStation/玄箱用コンフィグファイルのダウンロード

コンフィグファイルの修正

  • powerpc-hdhglan.dat

    pre> $ diff -Nur powerpc-hdhglan.dat.orig powerpc-hdhglan.dat

    • powerpc-hdhglan.dat.orig 2009-03-21 18:47:06.000000000 +0900
    1. powerpc-hdhglan.dat 2009-03-21 18:42:26.000000000 +0900 @@ -1,4 +1,4 @@
      KERNELCONFIG=`pwd`/powerpc-hdhglan.config
    • TARGET=powerpc-hdhglan-linux
    1. TARGET=powerpc-linux-gnu
      TARGET_CFLAGS="-O -mcpu=603e"
      GCC_EXTRA_CONFIG="--with-cpu=603e --enable-cxx-flags=-mcpu=603e"

      /pre>

  • powerpc-hdhglan.sh

    pre> $ diff -Nur powerpc-hdhglan.sh.orig powerpc-hdhglan.sh

    • powerpc-hdhglan.sh.orig 2009-03-21 18:47:14.000000000 +0900
    1. powerpc-hdhglan.sh 2009-03-21 18:42:26.000000000 +0900 @@ -1,7 +1,7 @@
      #!/bin/sh
      set -ex
      TARBALLS_DIR=$HOME/downloads
    • RESULT_TOP=/usr/local/linkstation
    1. RESULT_TOP=/usr/cross/linkstation
      export TARBALLS_DIR RESULT_TOP
      GCC_LANGUAGES="c,c++"
      export GCC_LANGUAGES
      @@ -11,6 +11,7 @@
      mkdir -p $RESULT_TOP
      
      # Build the toolchain.  Takes a couple hours and a couple gigabytes.
    • eval `cat powerpc-hdhglan.dat gcc-3.3.5-glibc-2.3.2.dat` sh all.sh --notest
    1. eval `cat powerpc-hdhglan.dat gcc-2.95.3-glibc-2.2.5.dat` sh all.sh --notest
      echo Done.

      /pre>

      • gcc-2.95.3-glibc-2.2.5.dat
        • カーネルのバージョンを linux-2.4.17_mvl21-sandpoint にする場合

          pre> $ diff -Nur gcc-2.95.3-glibc-2.2.5.dat.orig gcc-2.95.3-glibc-2.2.5.dat

          • gcc-2.95.3-glibc-2.2.5.dat.orig 2009-03-21 19:08:38.000000000 +0900
          1. gcc-2.95.3-glibc-2.2.5.dat 2009-03-21 19:07:25.000000000 +0900 @@ -1,6 +1,6 @@
            BINUTILS_DIR=binutils-2.15
            GCC_DIR=gcc-2.95.3
            GLIBC_DIR=glibc-2.2.5
          • LINUX_DIR=linux-2.4.26
          1. LINUX_DIR=linux-2.4.17_mvl21-sandpoint
            GLIBCTHREADS_FILENAME=glibc-linuxthreads-2.2.5
            GDB_DIR=gdb-6.5

            /pre>

            • カーネルのバージョンを linux-2.4.17_mvl21 にする場合

              pre> $ diff -Nur gcc-2.95.3-glibc-2.2.5.dat.orig gcc-2.95.3-glibc-2.2.5.dat

              • gcc-2.95.3-glibc-2.2.5.dat.orig 2009-03-21 19:08:38.000000000 +0900
              1. gcc-2.95.3-glibc-2.2.5.dat 2009-03-21 19:07:25.000000000 +0900 @@ -1,6 +1,6 @@
                BINUTILS_DIR=binutils-2.15
                GCC_DIR=gcc-2.95.3
                GLIBC_DIR=glibc-2.2.5
              • LINUX_DIR=linux-2.4.26
              1. LINUX_DIR=linux-2.4.17_mvl21
                GLIBCTHREADS_FILENAME=glibc-linuxthreads-2.2.5
                GDB_DIR=gdb-6.5

                /pre>

カーネルソースのダウンロードとパッチ当て

インストール先ディレクトリの作成と所有者の変更

pre> $ sudo mkdir /usr/cross $ sudo chown -R ユーザ名 /usr/cross

/pre>

実行

pre> $ cd ~/workdir/crosstool-0.43 $ sh ./powerpc-hdhglan.sh

/pre>

uloader.o の作成

フラッシュROMに内蔵されているカーネルのバージョンに合わせて、uloader.o をコンパイルする。その際に、カーネルをコンパイルしたのと同じ gcc-2.95.3 が必要。ここでは、crosstool でインストールしたものを用いる。

ソースコードのダウンロードと展開

pre> $ mkdir workdir $ cd workdir $ wget http://www.linuxnotincluded.pwp.blueyonder.co.uk/linkstation/downloads/uloader-2.4.17.tar.gz $ tar zxvf uloader-2.4.17.tar.gz $ cd wget uloader-2.4.17

/pre> uloader-2.4.20.tar.gz にも uloader.o 作成用の同じソースコードが含まれる。

クロスコンパイル用にパッチを当てる

pre>

  • Makefile.orig 2009-03-25 17:01:32.000000000 +0900
  1. Makefile 2009-03-25 17:09:35.000000000 +0900 @@ -25,7 +25,7 @@
    # 2.4.17_mvl21-sandpoint and gcc 2.95
    
    # Change INCLUDE to match your environment
  • INCLUDE = -nostdinc -I/opt/embedded/ppc/list/linux-2.4.17_mvl21-sandpoint.ref/include -I/opt/embedded/ppc/list/linux-2.4.17_mvl21-sandpoint.ref/arch/ppc -I/opt/embedded/ppc/toolchain/usr/lib/gcc-lib/powerpc-linux/2.95.3/include
  1. INCLUDE = -nostdinc -I/usr/cross/kurohg/gcc-2.95.3-glibc-2.2.5/powerpc-linux-gnu/powerpc-linux-gnu/include -I/usr/cross/kurohg/gcc-2.95.3-glibc-2.2.5/powerpc-linux-gnu/lib/gcc-lib/powerpc-linux-gnu/2.95.3/include
    CFLAGS = -D__KERNEL__ -Wall -Wstrict-prototypes -Wno-trigraphs -O2 -fomit-frame-pointer -fno-strict-aliasing -fno-common -fsigned-char -msoft-float -pipe -ffixed-r2 -Wno-uninitialized -mmultiple -mstring -DMODULE

/pre>

コンパイル

pre> $ export PATH=/usr/cross/kurohg/gcc-2.95.3-glibc-2.2.5/powerpc-linux-gnu/bin:$PATH $ make CROSS_COMPILE=powerpc-linux-gnu-

/pre>

DTC対応U-Bootの作成

kernel 2.6.20以降からDTCを利用するようになったので、ブートローダもDTCに対応したものでないといけない。ただし、DTCを利用せずに、以前からの loader.o を使った起動も可能。

ダウンロードとパッチ当て

U-Boot 1.2.0 以降しか DTC に対応できないので、U-Boot 1.2.0 と LinkStation 用パッチをダウンロードする。

pre> $ cd /usr/src $ wget ftp://ftp.denx.de/pub/u-boot/u-boot-1.2.0.tar.bz2 $ wget http://git.openmoko.org/git/openmoko.git/packages/u-boot/u-boot-1.2.0/u-boot-kurobox.patch $ wget http://git.openmoko.org/git/openmoko.git/packages/u-boot/u-boot-1.2.0/u-boot-kurobox-fdt.patch $ wget http://git.openmoko.org/git/openmoko.git/packages/u-boot/u-boot-1.2.0/defconfig_lsppchg $ tar jxvf u-boot-1.2.0.tar.bz2 $ cd u-boot-1.2.0 $ patch -p 1 < ../u-boot-kurobox.patch $ patch -p 1 < ../u-boot-kurobox-fdt.patch

/pre>

include/configs/linkstation.h の編集

IPアドレス関係

pre>

#define CONFIG_IPADDR_LS 192.168.10.145 ←LinkStation/玄箱のIPアドレス

#define CONFIG_SERVERIP_LS 192.168.10.21 ←nc(network console)を起動するマシンのIPアドレス

/pre>

ブートパラメータ

ルートパーティションやnc関連の設定を自分の環境に合わせて変更する。

pre>

#define CONFIG_BOOTARGS "root=/dev/hda1"

#define CONFIG_BOOTARGS "root=/dev/sda1 netconsole=6666@192.168.10.145/,@192.168.10.21/ rtc-rs5c372.probe=0,0x32"

/pre>

IMAGEROOTの定義

pre> #define IMAGEROOT "usr/src/"追加

#if defined(CONFIG_HLAN) || defined(CONFIG_LAN)

#define UBFILE IMAGEROOT "u-boot-hd.flash.bin"

#elif defined(CONFIG_HGLAN)

#define UBFILE IMAGEROOT "u-boot-hg.flash.bin"

#elif defined(CONFIG_HTGL)

#define UBFILE IMAGEROOT "u-boot-ht.flash.bin"

/pre>

ubpartの設定

/usr/srcが含まれるパーティションが /dev/hda4 ならば

pre> "ubpart=0:4\0"

/pre> となる。

クロスコンパイル用設定

emdebian-tools や apt-cross で構築したクロスコンパイル環境でコンパイルするには、環境変数 CROSS_COMPILE やパスの設定をする必要がある。

  • emdebian-tools の場合
    コンパイラ等のバイナリは /usr/bin にインストールされるので、パス追加する必要はない。しかし、gcc-4.2.4 ではコンパイルはできたが、起動させると FLASH: のところまで表示して、ハングアップしてしまった。apt-cross でも同様。gcc-4 系でのクロスコンパイルに問題があるのかもしれない。(gcc-3.4.6 で動いたので、それ以上は深く追求していない。
    • Makefile

      pre>

      • Makefile.orig 2009-03-25 12:13:20.000000000 +0900
      1. Makefile 2009-03-25 12:13:36.000000000 +0900 @@ -122,7 +122,7 @@
        CROSS_COMPILE =
        else
        ifeq ($(ARCH),ppc)
      • CROSS_COMPILE = ppc_6xx-
      1. CROSS_COMPILE = powerpc-linux-gnu-
        endif
        ifeq ($(ARCH),arm)
        CROSS_COMPILE = arm-linux-

        /pre>

  • gcc-4.2.4 でのコンパイル
    いろいろ試してみたが、以下のところでおかしくなっているようだ。(2009-03-31追記:gcc-4.3.3 でも同様だった。)どうすればよいかは、皆目検討がつかないが...
    • board/linkstation/flash.c

      #pre{{
      90 /* Basic Query Structure */
      91 struct cfi_ident {
      92 __u8 qry[3];
      93 __u16 P_ID;
      94 __u16 P_ADR;
      95 __u16 A_ID;
      96 __u16 A_ADR;
      97 __u8 VccMin;
      98 __u8 VccMax;
      99 __u8 VppMin;
      100 __u8 VppMax;
      101 __u8 WordWriteTimeoutTyp;
      102 __u8 BufWriteTimeoutTyp;
      103 __u8 BlockEraseTimeoutTyp;
      104 __u8 ChipEraseTimeoutTyp;
      105 __u8 WordWriteTimeoutMax;
      106 __u8 BufWriteTimeoutMax;
      107 __u8 BlockEraseTimeoutMax;
      108 __u8 ChipEraseTimeoutMax;
      109 __u8 DevSize;
      110 __u16 InterfaceDesc;
      111 __u16 MaxBufWriteSize;
      112 __u8 NumEraseRegions;
      113 __u32 EraseRegionInfo[MAX_ERASE_REGIONS];
      114 } __attribute__*1;
      115
      116 struct cfi_private {
      117 __u32 base;
      118 int device_type;
      119 int addr_unlock1;
      120 int addr_unlock2;
      121 struct cfi_ident *cfiq;
      122 int mfr;
      123 int id[3]; /* Supports AMD MirrorBit flash */
      124 char *flash_name;
      125 int wrd_wr_time;
      126 int buf_wr_time;
      127 int erase_time;
      128 int (*blk_erase)(flash_info_t *info, int s_first, int s_last);
      129 int (*blk_write)(flash_info_t *info, __u8 *buf, __u32 addr, int sz);
      130 };

      165 flash_info_t flash_info[CFG_MAX_FLASH_BANKS];
      166 static struct cfi_private cfis;
      167 static struct cfi_ident cfi_idents;
      168 static struct cfi_private *cfi;
      169
      170 static int cfi_probe_chip(struct cfi_private *cfi);
      171 static unsigned long cfi_amdstd_setup(struct cfi_private *cfi, int primary);
      172 static void print_cfi_ident(struct cfi_ident *)

      - gcc-4.2.4 の場合
      address of cfi = 0x7f2d1c8
      address of cfi->cfiq = 0x7f2d198

      - gcc-3.4.6 の場合
      address of cfi = 0x7f2c2a8
      address of cfi->cfiq = 0x7f2c2e4
      }} static にメモリを割り当てている変数 cfi と cfi->cfiq のメモリ上の位置が逆転している。そのため、gcc-4.2.4 では、以下に示すように構造体 cfi の内容が改変されてしまう。

      pre> mem[0] = ff mem[1] = c0 mem[2] = 0 mem[3] = 0 mem[4] = 0 mem[5] = 0 mem[6] = 0 mem[7] = 2 mem[8] = 0 mem[9] = 0 mem[10] = 0 mem[11] = 0 mem[12] = 0 mem[13] = 0 mem[14] = 0 mem[15] = 0 mem[16] = 7 mem[17] = f2 mem[18] = d1 mem[19] = 98 mem[20] = 0 mem[21] = 0 mem[22] = 0 mem[23] = 0 mem[24] = 0 mem[25] = 0 mem[26] = 0 mem[27] = 0 mem[28] = 0 mem[29] = 0 mem[30] = 0 mem[31] = 0 mem[32] = 0 mem[33] = 0 mem[34] = 0 mem[35] = 0 mem[36] = 0 mem[37] = 0 mem[38] = 0 mem[39] = 0 mem[40] = 0 mem[41] = 0 mem[42] = 0 mem[43] = 0 mem[44] = 0 mem[45] = 0 mem[46] = 0 mem[47] = 0 mem[48] = 0 mem[49] = 0 mem[50] = 0 mem[51] = 0 mem[52] = 0 mem[53] = 0 mem[54] = 0 mem[55] = 0 mem[56] = 0 mem[57] = 0 mem[58] = 0 mem[59] = 0 i = 0 addr[ffc00020] = 0x51 i = 1 addr[ffc00022] = 0x52 i = 2 addr[ffc00024] = 0x59 i = 3 addr[ffc00026] = 0x2 i = 4 addr[ffc00028] = 0x0 i = 5 addr[ffc0002a] = 0x40 i = 6 addr[ffc0002c] = 0x0 i = 7 addr[ffc0002e] = 0x0 i = 8 addr[ffc00030] = 0x0 i = 9 addr[ffc00032] = 0x0 i = 10 addr[ffc00034] = 0x0 i = 11 addr[ffc00036] = 0x27 i = 12 addr[ffc00038] = 0x36 i = 13 addr[ffc0003a] = 0x0 i = 14 addr[ffc0003c] = 0x0 i = 15 addr[ffc0003e] = 0x7 i = 16 addr[ffc00040] = 0x7 i = 17 addr[ffc00042] = 0xa i = 18 addr[ffc00044] = 0x0 i = 19 addr[ffc00046] = 0x1 i = 20 addr[ffc00048] = 0x5 i = 21 addr[ffc0004a] = 0x4 i = 22 addr[ffc0004c] = 0x0 i = 23 addr[ffc0004e] = 0x16 i = 24 addr[ffc00050] = 0x2 i = 25 addr[ffc00052] = 0x0 i = 26 addr[ffc00054] = 0x5 i = 27 addr[ffc00056] = 0x0 i = 28 addr[ffc00058] = 0x2 i = 29 addr[ffc0005a] = 0x7 i = 30 addr[ffc0005c] = 0x0 i = 31 addr[ffc0005e] = 0x20 i = 32 addr[ffc00060] = 0x0 i = 33 addr[ffc00062] = 0x3e i = 34 addr[ffc00064] = 0x0 i = 35 addr[ffc00066] = 0x0 i = 36 addr[ffc00068] = 0x1 i = 37 addr[ffc0006a] = 0x0 i = 38 addr[ffc0006c] = 0x0 i = 39 addr[ffc0006e] = 0x0 i = 40 addr[ffc00070] = 0x0 i = 41 addr[ffc00072] = 0x0 i = 42 addr[ffc00074] = 0x0 i = 43 addr[ffc00076] = 0x0 i = 44 addr[ffc00078] = 0x0 i = 45 addr[ffc0007a] = 0x0 i = 46 addr[ffc0007c] = 0x0 i = 47 addr[ffc0007e] = 0x0 i = 48 addr[ffc00080] = 0x50 i = 49 addr[ffc00082] = 0x52 i = 50 addr[ffc00084] = 0x49 i = 51 addr[ffc00086] = 0x31 i = 52 addr[ffc00088] = 0x33 mem[0] = 50 ←ここ mem[1] = 52 ←ここ mem[2] = 49 ←ここ mem[3] = 31 ←ここ mem[4] = 33 ←ここ mem[5] = 0 mem[6] = 0 mem[7] = 2 mem[8] = 0 mem[9] = 0 mem[10] = 0 mem[11] = 0 mem[12] = 0 mem[13] = 0 mem[14] = 0 mem[15] = 0 mem[16] = 7 mem[17] = f2 mem[18] = d1 mem[19] = 98 mem[20] = 0 mem[21] = 0 mem[22] = 0 mem[23] = 0 mem[24] = 0 mem[25] = 0 mem[26] = 0 mem[27] = 0 mem[28] = 0 mem[29] = 0 mem[30] = 0 mem[31] = 0 mem[32] = 0 mem[33] = 0 mem[34] = 0 mem[35] = 0 mem[36] = 0 mem[37] = 0 mem[38] = 0 mem[39] = 0 mem[40] = 0 mem[41] = 0 mem[42] = 0 mem[43] = 0 mem[44] = 0 mem[45] = 0 mem[46] = 0 mem[47] = 0 mem[48] = 0 mem[49] = 0 mem[50] = 0 mem[51] = 0 mem[52] = 0 mem[53] = 0 mem[54] = 0 mem[55] = 0 mem[56] = 0 mem[57] = 0 mem[58] = 0 mem[59] = 0

      /pre> fileflash.c デバッグ用に改変した board/linkstation/flash.c

  • apt-cross の場合
    コンパイラー等のインストール先にパスを通す必要がある。

    pre> $ export PATH=/usr/cross/powerpc/bin;$PATH

    /pre> あとは、emdebian-tools 同様 Makefile を編集し、コンパイルする。

RAM版 U-Bootのビルド

KuroBox/Linkstation HDLANの場合

pre> $ cd /usr/src/u-boot-1.2.0 $ make linkstation_HDLAN_RAM_config $ make linkstation_HDLAN_RAM $ cp u-boot-hd.ram.bin ..

/pre>

KuroBoxHG/Linkstation HGLANの場合

pre> $ cd /usr/src/u-boot-1.2.0 $ make linkstation_HGLAN_RAM_config $ make linkstation_HGLAN_RAM $ cp u-boot-hg.ram.bin ..

/pre> 古い binutils だと、以下のようなエラーが出る場合がある。

pre> cd /usr/src/u-boot-1.2.0 && ld -Bstatic -T /usr/src/u-boot-1.2.0/board/linkstation/u-boot.lds

-Ttext 0x07F00000  -n $UNDEF_SYM cpu/mpc824x/start.o
--start-group lib_generic/libgeneric.a board/linkstation/liblinkstation.a
cpu/mpc824x/libmpc824x.a lib_ppc/libppc.a fs/cramfs/libcramfs.a
fs/fat/libfat.a fs/fdos/libfdos.a fs/jffs2/libjffs2.a fs/reiserfs/libreiserfs.a
fs/ext2/libext2fs.a net/libnet.a disk/libdisk.a rtc/librtc.a dtt/libdtt.a
drivers/libdrivers.a drivers/nand/libnand.a drivers/nand_legacy/libnand_legacy.a
drivers/sk98lin/libsk98lin.a post/libpost.a post/cpu/libcpu.a
common/libcommon.a --end-group -L /usr/lib/gcc-lib/powerpc-linux/3.3.5 -lgcc
-Map u-boot.map -o u-boot

make[1]: *** [u-boot] Error 139

/pre> Binutils のバージョンを上げるか、場当たり的対応だが、Makefileから -Map u-boot.map を消去すればよい。

pre> $ diff -c Makefile.orig Makefile

Makefile.orig Tue Mar 17 10:50:26 2009

  • Makefile Tue Mar 17 10:50:47 2009

************

297,303 ****

               UNDEF_SYM=`$(OBJDUMP) -x $(LIBS) |sed  -n -e 's/.*\(__u_boot_cmd_.*\)/-u\1/p'|sort|uniq`;\
               cd $(LNDIR) && $(LD) $(LDFLAGS) $$UNDEF_SYM $(__OBJS) \
                       --start-group $(__LIBS) --end-group $(PLATFORM_LIBS) \

! -Map u-boot.map -o u-boot

 $(OBJS):
               $(MAKE) -C cpu/$(CPU) $(if $(REMOTE_BUILD),$@,$(notdir $@))
  • 297,303 ----
                   UNDEF_SYM=`$(OBJDUMP) -x $(LIBS) |sed  -n -e 's/.*\(__u_boot_cmd_.*\)/-u\1/p'|sort|uniq`;\
                   cd $(LNDIR) && $(LD) $(LDFLAGS) $$UNDEF_SYM $(__OBJS) \
                           --start-group $(__LIBS) --end-group $(PLATFORM_LIBS) \
    ! -o u-boot
 $(OBJS):
               $(MAKE) -C cpu/$(CPU) $(if $(REMOTE_BUILD),$@,$(notdir $@))

/pre>

FlashROM版 U-Bootのビルド

KuroBox/Linkstation HDLANの場合

pre> $ cd /usr/src/u-boot-1.2.0 $ make linkstation_HDLAN_config $ make linkstation_HDLAN $ cp u-boot-hd.flash.bin ..

/pre>

KuroBoxHG/Linkstation HGLANの場合

pre> $ cd /usr/src/u-boot-1.2.0 $ make linkstation_HGLAN_config $ make linkstation_HGLAN $ cp u-boot-hg.flash.bin ..

/pre>

コンパイル済みバイナリ

LinkStation HDLAN/初代KuroBox用

LinkStation HGLAN/KuroBoxHG用

2.6.28.* のインストール

2.6.28.8

emdebian-tools でクロスコンパイルした場合

pre> $ wget http://ring.maffin.ad.jp/archives/linux/kernel.org/kernel/v2.6/linux-2.6.28.8.tar.bz2 $ tar jxvf linux-2.6.28.8.tar.bz2 $ cd linux-2.6.28.8 $ make ARCH=powerpc CROSS_COMPILE=powerpc-linux-gnu- linkstation_defconfig $ cp -p ./.config ./.config.orig $ make ARCH=powerpc CROSS_COMPILE=powerpc-linux-gnu- menuconfig $ make ARCH=powerpc CROSS_COMPILE=powerpc-linux-gnu- uImage modules $ &color(blue){ $ &color(blue){ $ &color(blue){

/pre>

2ちゃん情報

久しぶりにカーネルを上げようと調べてみたら、結構以前と変わっていたので、メモを残す。情報源は2ちゃんねるの「玄人志向「玄箱」で自宅サーバ Part13」の201-218ぐらい。
ただし、kernel-2.6.30 からは dtc の位置が arch/powerpc/boot から scripts/dtc に変更になったので注意。([PATCH] Move dtc and libfdt sources from arch/powerpc/boot to scripts/dtc

#pre{{
201 :193:2009/02/22(日) 00:44:12 ID:???
初代玄箱でkernel2.6.28.6の動かしかた
ちょっと長くなる。すまんね。あと自己責任でよろしく。

①カーネルコンパイル
…2.6.28.7でてるし。がっかり。(´・ω・`)
ダウンロード/解凍していつもどおり。
# wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.28.6.tar.gz
# tar -xvzf linux-2.6.28.6.tar.gz
# cd linux-2.6.28.6
# make ARCH=powerpc linkstation_defconfig
# cp -p ./.config ./.config.org
# make menuconfig
※適当にコンフィグ

# nohup make uImage modules modules_install &

# cp -p System.map /boot/System.map
# cp -p arch/powerpc/boot/uImage /boot/vmlinux.UBoot
※シンボリックリンクするとかは勝手にどうぞ

②dts→dtbにをコンパイルする
Device Tree Compilerっていうものだそうだよ。
これで/bootの下にkuroboxHD.dtbってファイルが作られる
# arch/powerpc/boot/dtc -f -I dts -O dtb -o /boot/kuroboxHD.dtb -V 16 arch/powerpc/boot/dts/kuroboxHD.dts
※dtcプログラムはカーンルにソースが同梱されてコンパイルの時に作られる。


202 :193:2009/02/22(日) 00:46:42 ID:???
続き

③u-boot1.2.0化する
俺はだいぶ前からu-boot1.1.4にしてたから、買ったときからの変更手順忘れた。
まー危険なので自己責任で。
http://buffalo.nas-central.org/index.php/Freelink%2BUBoot%2Bkernel2.6_on_Kurobox
ファイルは上記から外人さんに感謝しながらダウンロードして。

# cat /proc/mtd
でmod_bootcodeを調べて
mtd1: 00070000 00010000 "mtd_bootcode"
上記だと
# dd if=u-boot-lsppchd-flash-1.2.0-r2.bin of=/dev/mtdblock1 bs=1k
なんだかmtd0の人もいるみたい。その場合はmtdblock0で。

mtd見えないカーネルならflushから起動して確認、書き込みで。

④u-bootの環境変数変更
1.1.4からアップデートだとu-bootの環境変数が1.1.4のままで動かなかった。
新規u-boot1.2.0だと大丈夫かも。

設定したのは以下。
setenv hdload 'echo Loading ${hdpart}:${hdfile}; ext2load ide ${hdpart} ${ldaddr} ${hdfile}; ext2load ide ${hdpart} 7f0000 kuroboxHD.dtb'
setenv boothd 'setenv bootargs root=/dev/sda2 netconsole=6666@192.168.0.100/,@192.168.0.200/; bootm ${ldaddr} - 7f0000'
※kuroboxHD.dtbは②で作ったdtbファイルと同じ名前ね。シンボリックリンクでもおk。
※/dev/sda2は"/"があるパーティション
※192.168.0.100は玄箱自身、192.168.0.200はncする他のサーバ

printenvで確認。
saveenvで書き込み。

関係ありそうな環境変数は下にようになってたよ。
ldaddr=800000
hdpart=0:1
hdfile=vmlinux.UBoot
hdboot=run hdload boothd


203 :193:2009/02/22(日) 00:49:11 ID:???
⑤u-bootからresetするなり、hdbootで。

## Booting image at 00800000 ...
Image Name: Linux-2.6.28.6
Image Type: PowerPC Linux Kernel Image (gzip compressed)
Data Size: 1701296 Bytes = 1.6 MB
Load Address: 00000000
Entry Point: 00000000
Verifying Checksum ... OK
Uncompressing Kernel Image ... OK
Booting using flat device tree at 0x7f0000
Using Buffalo Linkstation machine description
Linux version 2.6.28.6 (root@kurobox) (gcc version 4.3.2 (Debian 4.3.2-1.1) ) #1 Sat Feb 21 23:19:25 JST 2009
console [udbg0] enabled
Adding PCI host bridge /soc10x/pci@fec00000
PCI host bridge /soc10x/pci@fec00000 (primary) ranges:
IO 0x00000000fe000000..0x00000000febfffff -> 0x0000000000000000
MEM 0x0000000080000000..0x00000000efffffff -> 0x0000000080000000
BUFFALO Network Attached Storage Series
(C) 2002-2005 BUFFALO INC.
Zone PFN ranges:
DMA 0x00000000 -> 0x00004000
Normal 0x00004000 -> 0x00004000
Movable zone start PFN for each node
early_node_map[1] active PFN ranges
0: 0x00000000 -> 0x00004000
Built 1 zonelists in Zone order, mobility grouping on. Total pages: 16256
Kernel command line: root=/dev/sda2 netconsole=6666@192.168.0.100/,@192.168.0.200/
mpic: Setting up MPIC " EPIC " version 1.2 at 80040000, max 1 CPUs

・・・・あとダラダラ
とりあえずエラーなさそう。
でもどーせだから2.6.28.7を今からコンパイルするよ。

204 :193:2009/02/22(日) 00:59:17 ID:???
ちなみに内蔵HDDはhdaからsdaに変更されるから気をつけて。
ってあ。上で書くの忘れた。
新カーネルでブートする前に
/dev/hda1とかで指定しているならfstabの修正忘れないように。
カーネルが正しくても起動しなくなるよ。

副作用として、kuro-sataでIDE-SATA変換してても
hdparm、hddtemp、smartctlでSMARTとかのパラメータ、
温度なんか見られるようになった。やほーい。
※実はこれが主な目的だったんだけど。

207 :193:2009/02/22(日) 11:48:55 ID:???
>41氏の玄箱sarge化実況
うーん、その辺みてなかったからよくわからん。すまん。

>両方書いておくと、片方は失敗しつつも(warning程度?)
>どちらかが成功するってことがあったりしない?

それでもいけるんじゃないかと思うけど、(errorsの指定はいるけど)
俺はパーティションにラベルつけて、fstabではラベル指定にした。
e2label /dev/sda1 /bootでつけて
fstabには
LABEL=/boot /boot ext3 defaults,noatime,errors=remount-ro 1 1

SWAPはswapoffしてから
mkswap -L swap /dev/sda3
LABEL=swap swap swap defaults 0 0

ラベルにして困るのは…クラスタ化そふととか動かさないのなら大丈夫じゃない?
とりあえず、これで2.6.25でも2.6.28.6動くようになってた。
(もう戻してないのでわからんけど)

【そのほか】
・あと2.6.28.7も普通に動いたよ。
・lennyにするならkuroevtdはコンパイルし直し


208 :193:2009/02/22(日) 14:58:55 ID:???
カーネル2.6.28.7でシャットダウンの電源停止、
再起動ができるようになった。
結果からいうと

ttyS0:制御用
ttyS1:シリアルコンソール
というふうに、今までと逆になってた。
たぶん2.6.28からだと思われ。
なのでいろいろ書き直し

・/etc/inittab
シリアルコンソール用
con:2345:respawn:/sbin/getty 57600 ttyS1

・/etc/init.d/kuro_boot, halt, reboot, kuroevtd
制御用
/dev/ttyS1から/dev/ttyS0に

・kuroevtd.c
lennyでコンパイルすると警告出たりするのでちょっと修正。

kurobox:/usr/local/src/kuroevtd# diff kuroevtd.c.org kuroevtd.c -c
*** kuroevtd.c.org 2004-11-13 00:32:13.000000000 +0900
--- kuroevtd.c 2009-02-22 12:52:29.000000000 +0900
***************
*** 12,18 ****
#endif /* NOLOG */

#define BAUDRATE B9600
! #define DEVICE "/dev/ttyS1"
#define EVT_POWER_DOWN "/etc/kuroevtd/powerdown"
#define EVT_POWER_UP "/etc/kuroevtd/powerup"
#define EVT_POWER_PRESS "/etc/kuroevtd/powerpress"
--- 12,18 ----
#endif /* NOLOG */

#define BAUDRATE B9600
! #define DEVICE "/dev/ttyS0"
#define EVT_POWER_DOWN "/etc/kuroevtd/powerdown"
#define EVT_POWER_UP "/etc/kuroevtd/powerup"
#define EVT_POWER_PRESS "/etc/kuroevtd/powerpress"
***************
*** 23,28 ****
--- 23,31 ----
#define SEC_BUTTON_PRESS 3
#define USEC_POLL_TIME (500 * 1000)

+ #include <string.h>
+ #include <stdlib.h>
+
struct termios oldtio;
int fd = 0;

いたって順調なので玄箱をトイレに戻すよ。
echo -n "SSSS" > /dev/ttyS0でちかちか。
echo -n "RRRR" > /dev/ttyS0でちかちか停止。
コマンドについては以下を参考にさせてもらった。ありがとう
http://www.dyg.jp/category/kurobox/22.htm
}}

独自kernelのインストール

270氏作成のkernelとmoduleは必要最低限のオプションしか設定されておらず、各種USB機器やOpenVPNを利用することができない。しかし、最新カーネルに対するパッチも公開されているので、それを用いて独自のkernelを作成することができる。
270氏関連ファイル公開サイト
上記ミラーサイト

新型HGLANへの対応

最近のHGLANではIDEコントローラにTeraStationと同じITE社製のIT8211を採用し、クロックのずれ対策もなされている。270氏提供のKuroHG用カーネルでは動かないので、ソースを修正のうえコンパイルする必要がある。

ソースの修正点

pre> diff -Nur linux-2.6.19.1-old/config_kuroboxhg linux-2.6.19.1/config_kuroboxhg

  • linux-2.6.19.1-old/arch/ppc/platforms/linkstation.c 2006-12-29 17:28:04.000000000 +0900
  1. linux-2.6.19.1/arch/ppc/platforms/linkstation.c 2006-12-29 18:00:59.000000000 +0900 @@ -310,7 +310,7 @@
           ulong   freq;
#if defined(CONFIG_KUROBOXHG)
  • freq=32522240; /* {32.768MHz*(100% - 0.75%)} * 4 / 4 */
  1. freq=32768000; /* 32.768MHz */
    #elif defined(CONFIG_KUROBOX)
           freq=24391680;  /* {24.576MHz*(100% - 0.75%)} * 3 / 4 */
    #else
    • linux-2.6.19.1-old/config_kuroboxhg 2006-12-29 17:28:04.000000000 +0900
    1. linux-2.6.19.1/config_kuroboxhg 2006-12-29 17:47:25.000000000 +0900 @@ -475,12 +475,12 @@
      # CONFIG_BLK_DEV_JMICRON is not set
      # CONFIG_BLK_DEV_SC1200 is not set
      # CONFIG_BLK_DEV_PIIX is not set
  • # CONFIG_BLK_DEV_IT821X is not set
  1. CONFIG_BLK_DEV_IT821X=y
    # CONFIG_BLK_DEV_NS87415 is not set
    # CONFIG_BLK_DEV_PDC202XX_OLD is not set
    # CONFIG_BLK_DEV_PDC202XX_NEW is not set
    # CONFIG_BLK_DEV_SVWKS is not set
  • CONFIG_BLK_DEV_SIIMAGE=y
  1. # CONFIG_BLK_DEV_SIIMAGE is not set
    # CONFIG_BLK_DEV_SLC90E66 is not set
    # CONFIG_BLK_DEV_TRM290 is not set
    # CONFIG_BLK_DEV_VIA82CXXX is not set

    /pre>

U-Boot対応kernelのコンパイル

参考:

mkimageの作成

U-Boot対応のkernelは make uImage で作成するが、このなかで mkimage コマンドが呼ばれる。これは U-Boot のソースツリーに含まれるので、あらかじめコンパイルしてインストールしておく必要がある。

pre> $ wget ftp://ftp.denx.de/pub/u-boot/u-boot-1.1.4.tar.bz2 $ wget http://www.linuxnotincluded.pwp.blueyonder.co.uk/linkstation/downloads/u-boot-1.1.4-list-2.1.0.diff.gz $ tar jxvf u-boot-1.1.4.tar.bz2 $ cd u-boot-1.1.4 $ zcat ../u-boot-1.1.4-list-2.1.0.diff.gz | patch -p 1 $ export PATH=/usr/local/linkstation/gcc-4.1.1-glibc-2.3.6/powerpc-hdhlan-linux/bin:$PATH $ make CROSS_COMPILE=powerpc-hdhlan-linux- linkstation_HDLAN_config $ make CROSS_COMPILE=powerpc-hdhlan-linux- linkstation_HDLAN

/pre> makeのバージョンが3.81以上だと以下のエラーが発生する。

pre> powerpc-hdhlan-linux-gcc -g -Os -fPIC -ffixed-r14 -meabi -fno-strict-aliasing

-D__KERNEL__ -DTEXT_BASE=0xFFF00000 -I/home/itou-r/U-Boot/u-boot-1.1.4.hdlan.orig/include
-fno-builtin -ffreestanding -nostdinc
-isystem /usr/local/linkstation/gcc-4.1.1-glibc-2.3.6/powerpc-hdhlan-linux/lib/gcc/powerpc-hdhlan-linux/4.1.1/include
-pipe  -DCONFIG_PPC -D__powerpc__ -DCONFIG_MPC824X -ffixed-r2 -ffixed-r29
-mstring -mcpu=603e -msoft-float -DTEXT_BASE=0xFFF00000 -Wall -Wstrict-prototypes
-c -o stubs.o stubs.c

powerpc-hdhlan-linux-ar crv libstubs.a ppc_longjmp.o ppc_setjmp.o stubs.o a - ppc_longjmp.o a - ppc_setjmp.o a - stubs.o make[2]: *** No rule to make target `hello_world.srec', needed by `all'. Stop. make[2]: Leaving directory `/home/itou-r/U-Boot/u-boot-1.1.4.hdlan.orig/examples' make[1]: *** [examples] Error 2 make[1]: Leaving directory `/home/itou-r/U-Boot/u-boot-1.1.4.hdlan.orig' make: *** [linkstation_HDLAN] Error 2

/pre> Makefileの解釈が変わったのが原因。こことかこことかここに情報あり。以下のパッチを example/Makefile に当てることにより回避できる。

pre> diff -Nur u-boot-1.1.4.hdlan.orig/examples/Makefile u-boot-1.1.4/examples/Makefile

  • u-boot-1.1.4.hdlan.orig/examples/Makefile 2005-12-17 01:39:27.000000000 +0900
  1. u-boot-1.1.4/examples/Makefile 2007-10-10 05:34:26.000000000 +0900 @@ -56,39 +56,39 @@
    include $(TOPDIR)/config.mk
SREC   = hello_world.srec
  • BIN = hello_world.bin hello_world
  1. BIN = hello_world hello_world.bin
ifeq ($(CPU),mpc8xx)
SREC   = test_burst.srec
  • BIN = test_burst.bin test_burst
  1. BIN = test_burst test_burst.bin
    endif
ifeq ($(ARCH),i386)
SREC   += 82559_eeprom.srec
  • BIN += 82559_eeprom.bin 82559_eeprom
  1. BIN += 82559_eeprom 82559_eeprom.bin
    endif
ifeq ($(ARCH),ppc)
SREC   += sched.srec
  • BIN += sched.bin sched
  1. BIN += sched sched.bin
    endif
# The following example is pretty 8xx specific...
ifeq ($(CPU),mpc8xx)
SREC   += timer.srec
  • BIN += timer.bin timer
  1. BIN += timer timer.bin
    endif
# The following example is 8260 specific...
ifeq ($(CPU),mpc8260)
SREC   += mem_to_mem_idma2intr.srec
  • BIN += mem_to_mem_idma2intr.bin mem_to_mem_idma2intr
  1. BIN += mem_to_mem_idma2intr mem_to_mem_idma2intr.bin
    endif
# Utility for resetting i82559 EEPROM
ifeq ($(BOARD),oxc)
SREC   += eepro100_eeprom.srec
  • BIN += eepro100_eeprom.bin eepro100_eeprom
  1. BIN += eepro100_eeprom eepro100_eeprom.bin
    endif
ifeq ($(BIG_ENDIAN),y)

@@ -113,7 +113,7 @@

CPPFLAGS += -I..
  • all: .depend $(OBJS) $(LIB) $(SREC) $(BIN)
  1. all: .depend $(OBJS) $(LIB) $(BIN) $(SREC)
#########################################################################
$(LIB): .depend $(LIBOBJS)

/pre> toolsディレクトリに mkimage コマンドができるので、これをパスが通っているところにコピーし、実行権を設定する。

pre> $ su

# cp tools/mkimage /usr/local/bin

/pre>

クロスコンパイル

ソースファイルの展開とLinkStation/玄箱用のパッチ適用済みとする。

pre> $ make ARCH=ppc CROSS_COMPILE=powerpc-hdhlan-linux- oldconfig

  • カーネルのオプションを変更する場合 $ make ARCH=ppc CROSS_COMPILE=powerpc-hdhlan-linux- menuconfig
  • 変更しない場合 $ make ARCH=ppc CROSS_COMPILE=powerpc-hdhlan-linux- prepare

$ make ARCH=ppc CROSS_COMPILE=powerpc-hdhlan-linux- uImage $ make ARCH=ppc CROSS_COMPILE=powerpc-hdhlan-linux- modules $ make ARCH=ppc CROSS_COMPILE=powerpc-hdhlan-linux- INSTALL_MOD_PATH=../module-tmp modules_install

/pre> kernel類とモジュール群をtar ballに固める。

pre> $ cp System.map ../System.map-$(kernelversion)-kuroBOX $ cp .config ../config-$(kernelversion)-kuroBOX $ cp arch/ppc/boot/images/uImage ../uImage-$(kernelversion)-kuroBOX $ cd .. $ tar cjvf kernel-$(kernelversion)-kuroBOX.tar.bz2 System.map-$(kernelversion)-kuroBOX config-$(kernelversion)-kuroBOX uImage-$(kernelversion)-kuroBOX $ cd modules-tmp/lib/modules $ tar cjvf ../../../modules-$(kerneversion)-kuroBOX.tar.bz2 $(kernelversion)-kurobx

/pre>

未整理


*1 packed

添付ファイル: fileflash.c 993件 [詳細] fileu-boot-1.2.0-hd.flash.bin 465件 [詳細] fileu-boot-1.2.0-hd.ram.bin 476件 [詳細] fileu-boot-1.2.0-hg.flash.bin 1416件 [詳細] fileu-boot-1.2.0-hg.ram.bin 1239件 [詳細] fileuloader-2.4.17_mvl21-sandpoint.o 519件 [詳細] fileuloader-2.4.17_mvl21.o 1169件 [詳細]

トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2009-08-20 (木) 19:10:34 (3038d)