トップ 差分 一覧 ソース 検索 ヘルプ PDF RSS ログイン

LinkStationでNetBSDを試す

玄箱でNetBSDを動かすをLinkStationを使って、実際に試してみた。そのめも。

注:このページの内容は古くなっています。このページの追試はおすすめしません。(このページの情報は、いわゆる「かわうち版」NetBSD/sandpointの情報になります。)NetBSD公式版を試したものは"KURO-BOX/HGでNetBSDを試す"に書きました。

はじめに

そもそも、初めて知ったのは、「玄箱でNetBSDを動かす」ではなくて、port-powerpc-ja MLの「KUROBOX Works! (Was: Seeking I2C Driver for MPC824x (kurobox/HG))」だったように思う。自分はこういうことは(も)なんにもできないので、「へぇーすごい人もいるんだなぁ」と思っていた。その後、2006 JNUG総会あとのNetBSD BoFで、くだんの人が発表を行った。現在では、インストールはUSBメモリストレージを使うように改良して、比較的簡単にできるようにされたらしい。試してみよっかな。

でも、わざわざ玄箱を買ってまではね。

ところが、2006年の6月だか7月のNBUG例会の日、知人のところにプリンタがうまく動かないというトラブルのサポートにいったおり、「最近調子悪いんで、新しいのを買ったんだよね」と、LinkStationを買い替えた事を聞いてしまったのがウンのつき。

もちろん調子の悪い方をもらってきましたとよ。

こうしてLinkStationが手に入ってしまったとさ。あとはやるだけ。

NetBSDでdiskをマウントするまで

 方針

おすすめのインストール方法によれば、「ハードディスクを取り出してPC上で書き込んでもOKです。この場合はLinux側にrootでログイン出来るようにする必要はありません。」とある。それならばそうしよう。

 分解

もらってきたのは、LinkStation HD-HLAN160(v1)。分解はハックキットで有名な山下さんのページを見ながら分解。

埃だらけ。知人は足元に置いていたもんなぁ。調子が悪くなったのは排熱不良の可能性大である。

 マウントできない

自分は、ふだん使っているのは、NetBSD/amd64 on Cressida 64T(Turion64 MT-30)なので、Linuxはない。以前調べた時に、ファイルシステムはext2/ext3であることを知っていたので、NetBSDでmountできるやとさっそくusb経由でつないて、mount。

ところが、データがある3番めのMBRパーティション(Linux風にいうとhda3)はなんのエラーもなくmountできるのだが、システムがあるはずの1番めのMBRパーティション(hda1)はまったくmountできない。なんぞエラーがでる。

うーむ。fsckしようと思って、sysutils/e2fsprogsパッケージをmake installしてe2fsckをためしてみてもダメ。

NetBSDがだめなのかも。と、部屋をほじり返し、knoppixを探しだして試してみたけどダメ。Qtpartedも「unknown」などとファイルシステムを示す。

ここで手詰まり。google大明神に聞いてみよう。

すると、同じように苦しんだ人を発見。LiMo WikiWikiのLinkStation:Versionによると、途中でファームがいじられてそうなったみたい。ありがたいことに、マジックナンバー修正ツールとして、問題解決のためのツールが公開されているので、ありがたく使わせていただく。

 fix_ext2_magic

ツールのmakeはNetBSD/amd64 3.1_RC2でも通った。(せっかくなのでツールはpkgsrc-wip-jpに入れた。)あとは、README.eucJPのとおりにやるだけ。ただし、NetBSD上でやるときは、当然デバイス名等が違うので注意。下記例。

 # cd /path/to/tempdir   <-- 適当なディレクトリへ。
 # disklabel sd0   <-- sd0はディスク名。usb経由でつなぐとsdになるはず。どこにみえるか確認。sd0eとして見えた。
 # dd if=/dev/sd0e of=kurobox.part1.dd
 # md5 /dev/rsd0e kurobox.part1.dd
 # fdisk /dev/sd0 > kurobox.fdisk   <-- ねんのためfdiskの出力をとっとく。
 # disklabel /dev/sd0 > kurobox.disklabel   <--- ねんのためdisklabelの出力をとっとく。

バックアップできた。

 # /path/to/fix_ext2_magic /dev/rsd0e
 Block group   0: magic number = 0xef54
 Block group   1: magic number = 0xef54
 Block group   3: magic number = 0xef54
 Block group   5: magic number = 0xef54
 Block group   7: magic number = 0xef54
 Block group   9: magic number = 0xef54
 # /path/to/fix_ext2_magic --fix /dev/rsd0e
 Block group   0: magic number = 0xef54 -> 0xef53 (fixed)
 Block group   1: magic number = 0xef54 -> 0xef53 (fixed)
 Block group   3: magic number = 0xef54 -> 0xef53 (fixed)
 Block group   5: magic number = 0xef54 -> 0xef53 (fixed)
 Block group   7: magic number = 0xef54 -> 0xef53 (fixed)
 Block group   9: magic number = 0xef54 -> 0xef53 (fixed)

お、できたっぽい。

 # e2fsck -f /dev/sd0e   <-- sysutils/e2fsprogsパッケージを事前にインストールしておく。
 e2fsck 1.32 (09-Nov-2002)
 Pass 1: Checking inodes, blocks, and sizes
 Pass 2: Checking directory structure
 Pass 3: Checking directory connectivity
 Pass 4: Checking reference counts
 Pass 5: Checking group summary information
 /dev/sd0e: 1893/32128 files (1.1% non-contiguous), 82165/128488 blocks

fsck通った。

 # mount -t ext2fs /dev/sd0e /mnt
 # ls -al /mnt
 total 22
 drwxr-xr-x  15 root  wheel  1024 Feb  3  2022 ./
 drwxr-xr-x  25 root  wheel  1024 Aug 28 06:36 ../
 drwxrwxr-x   2 root  wheel  1024 Feb  3  2022 bin/
 drwxrwxr-x   4 root  wheel  4096 Mar  6  2006 dev/
 drwxrwxr-x  22 root  wheel  2048 Mar  6  2006 etc/
 drwxr-xr-x   2 root  wheel  1024 Jan  9  2004 home/
 drwxr-xr-x   4 root  wheel  2048 Feb  3  2022 lib/
 drwxr-xr-x   2 root  wheel  1024 Feb 20  2002 lost+found/
 drwxr-xr-x   2 root  wheel  1024 May 16  2003 mnt/
 drwxr-xr-x   7 root  wheel  1024 May 23  2003 mnt2/
 drwxr-xr-x  10 root  wheel  1024 Nov 29  2001 proc/
 drws------   3 root  wheel  1024 Apr 17  2003 root/
 drwxrwxr-x   2 root  wheel  2048 Feb  3  2022 sbin/
 lrwxrwxrwx   1 root  wheel    13 Feb  3  2022 tmp@ -> mnt/spool/tmp
 drwxrwxr-x   8 root  wheel  1024 Aug 27  2003 usr/
 lrwxrwxrwx   1 root  wheel    12 Feb  3  2022 var@ -> mnt2/ram/var
 drwxrwxrwx   8 root  wheel  1024 Apr  6  2004 www/

やったー。mountできたー。

インストール

 前提

手頃なUSBメモリが手元にない状況で、なんとかインストールしてみる。

NetBSDをsysinstを使わずにインストールしたことがないという人は、『NetBSD オペレーティングシステム 簡単なガイド』の「B.sysinst を使わないインストール」を事前に読んでおくといいかも。

 とりあえずtelnetdの設置

必要なくてもやってみたくなるのよ。

LiMo WikiWikiのLinkStation:LinuxBoxによれば、「YellowDogLinux や Vine-PPC あたりが使えます」との事なので、取ってくる。

 ftp -A ftp://ftp.yellowdoglinux.com/pub/yellowdog/releases/yellowdog-2.3/ppc/YellowDog/ppc/telnet-server-0.17-20.ppc.rpm

-Aをつけているのは、パッシブ接続ではうまくとってこれなかったため。

とってきたら、misc/rpmパッケージをNetBSD上にインストールし、

 % mkdir /path/to/dir
 % cd /path/to/dir
 % rpm2cpio /path/to/telnet-server-0.17-20.ppc.rpm | cpio -idm

で、実行dirに展開されるので、telnetdバイナリをHDにコピーすればよい。

 # cp usr/sbin/in.telnetd /mnt/usr/sbin

あとは、inetd.confのtelnetdの行を有効にすればOK。

rootパスワードを空にしておくの忘れないように。(最初にloginした時につけなおす。)

 NetBSD化の準備

おすすめのインストール方法を読む限りでは、いきなりブートセレクタの設置からやってもよさそう。じゃぁそうしよう。

NetBSD-3.0.1系となんちゃってブートセレクタ2を使う方を選び、下記のように配置した。

  • カーネルはサンプルカーネルをそのまま配置。
  • ブートセレクタはtar ballを展開して、Makefileをみながら手動で設置。
  • ブートローダはv2とv3のどちらでもいいみたい。v3を使用することにした。本家の説明のまま。
  • /etc/kuro_boot.conf
    • v2ローダを使用するようになっているので、v3に書き換え。
    • AVR=ttyS1に。
    • No.2のを有効にしておく。(そうなっているはず。)

 NetBSDのインストール

NetBSD/sandpointをインストールする。まずは場所空けから。本家の説明どおり、MBRパーティションの3番めを縮めて、4番めをつくり、そこにNetBSDをインストールする。

GNU partedがパッケージにないので、knoppixを使って、knoppix上のGNU partedで作業することにする。詳細は省略。ついでに、MBRパーティションの4番めもcfdiskでつくっておく。(これは、NetBSD側でしてもいいけど、めんどくさかったので。)

あとはNetBSDで作業。disklabelをこしらえ、newfsする。

まずはfdiskで確認。

 # fdisk /dev/sd0
 Disk: /dev/sd0d
 NetBSD disklabel disk geometry:
 cylinders: 152627, heads: 64, sectors/track: 32 (2048 sectors/cylinder)
 total sectors: 312581808
 
 BIOS disk geometry:
 cylinders: 1023, heads: 64, sectors/track: 32 (2048 sectors/cylinder)
 total sectors: 312581808
 
 Partition table:
 0: Linux native (sysid 131)
     start 63, size 256977 (125 MB, Cyls 0/1/32-125/32/17), Active
 1: Linux swap or Prime or Solaris (sysid 130)
     start 257040, size 514080 (251 MB, Cyls 125/32/17-376/33/17)
 2: Linux native (sysid 131)
     start 771120, size 6136830 (2996 MB, Cyls 376/33/17-3373/1/15)
 3: NetBSD (sysid 169)
     start 6907950, size 305668755 (149252 MB, Cyls 3373/1/15-152625/22/2)

問題ないようだ。

disklabelを書こう。まず確認。

 % disklabel sd0
 # /dev/rsd0d:
 type: SCSI
 disk: mydisk
 label: fictitious
 flags:
 bytes/sector: 512
 sectors/track: 32
 tracks/cylinder: 64
 sectors/cylinder: 2048
 cylinders: 152627
 total sectors: 312581808
 rpm: 3600
 interleave: 1
 trackskew: 0
 cylinderskew: 0
 headswitch: 0           # microseconds
 track-to-track seek: 0  # microseconds
 drivedata: 0
 
 8 partitions:
 #        size    offset     fstype [fsize bsize cpg/sgs]
  c: 305668755   6907950     unused      0     0        # (Cyl.   3373*- 152625*)
  d: 312581808         0     unused      0     0        # (Cyl.      0 - 152627*)
  e:    256977        63 Linux Ext2      0     0        # (Cyl.      0*-    125*)
  f:    514080    257040       swap                     # (Cyl.    125*-    376*)
  g:   6136830    771120 Linux Ext2      0     0        # (Cyl.    376*-   3373*)
  h: 305668755   6907950     4.2BSD      0     0     0  # (Cyl.   3373*- 152625*)
 disklabel: boot block size 0
 disklabel: super block size 0

aにNetBSDのシステム領域、bはLinux swapと共通のswap、eはそのまま、gはfにし、gはデータ領域にすることにしよう。

 disklabel -i -I sd0

でインタラクティブモードに入るので、編集する。編集結果は、

 #        size    offset     fstype [fsize bsize cpg/sgs]
  a:  18948096   6907950     4.2BSD      0     0     0  # (Cyl.   3373*-  12625*)
  b:    514072    257048       swap                     # (Cyl.    125*-    376*)
  c: 305668755   6907950     unused      0     0        # (Cyl.   3373*- 152625*)
  d: 312581808         0     unused      0     0        # (Cyl.      0 - 152627*)
  e:    256977        63 Linux Ext2      0     0        # (Cyl.      0*-    125*)
  f:   6136830    771120 Linux Ext2      0     0        # (Cyl.    376*-   3373*)
  g: 286725762  25856046     4.2BSD      0     0     0  # (Cyl.  12625*- 152627*)

になった。本家には、Linux swapのoffsetを+8、sizeを-8した値をswapにするようにアドバイスがあるので、そうした。

次は、newfs。これがusb経由だからか、HDの回転速度が3600rpmだからかどうかはしらんけど、とんでもなく時間がかかる。aパーティションとgパーティション合計で、一晩はかかった。(ほかっておいて、寝てしまったので何時間かかったかはわからないのだ。)気になったので、gパーティションだけやりなおして/usr/bin/timeで時間を計った。結果は、

 real     66534.34
 user         3.34
 sys      65843.88

...。単位は秒である。こんなに遅いもんだっけ?

 ファイルの展開

  • 次に、HDを/mntにmountして、NetBSD/sandpoint 3.0.1のbase.tgzとetc.tgzを展開。
  • サンプルカーネルを/mnt/netbsdとして設置。
  • 3.0ベースの追加/上書きファイル群(kuro_annex3.YYYYMMDD.tar.bz2)を展開。
  • /mnt/etc以下を適当に編集
    • ifconfig.tlp0
      • IPアドレスを固定でふる(DHCPは使っていないので)
    • rc.conf
      • dhclientとno_swapの行をコメントアウト
      • hostnameを変えるとか
      • sshd=YESするとか
    • fstab
      • gパーティションを/dataなどとしてmountするとか

 AVR制御デーモンがない

kuro_annex3を展開して気づいたのだけれども、kuro_avrdがない。/mnt/etc/rc.d/kuro_avrdという起動スクリプトはあるけど、/mnt/usr/local/sbin/kuro_avrdがない。あわてて本家のページを見に行くと、ソースでしか配布されていない。

うーん。どうしよう。

  • USBメモリを買いにいくか。
  • 本家配布のUSBメモリ用imgをmountして、そっから取り出すか。
  • クロスコンパイル?

悩んだ末、クロスコンパイルなんてしたことなかったので、してみることにした。

NetBSD/sandpointの3.0.1のソースをとってくる。cvsからとってくると楽。

とってきたら、toolchainをつくる。/var/tmp/cross-sandpointにつくるとすると、

 /bin/sh ./build.sh -U -u -T /var/tmp/cross-sandpoint -m sandpont tools

ここからどうしていいかわからなかったので、苦労したが、結論からいえば、

 /bin/sh ./build.sh -U -u -T /var/tmp/cross-sandpoint -D /var/tmp/destdir -m sandpont build
 /bin/sh ./build.sh -U -u -T /var/tmp/cross-sandpoint -D /var/tmp/destdir -m sandpont distribution

して、NetBSD/sandpoint 3.0.1をつくる。

できたら、下記のようにする。

 cd /var/tmp/cross-sandpoint/powerpc--netbsd
 ln -s /var/tmp/destdir/usr/include .
 cd lib
 ln -s /var/tmp/destdir/usr/lib/* .
 ln -f -s /var/tmp/destdir/lib/* .

そして、AVR制御デーモンのソースを展開して、あとはmake。

 % env PATH=/var/tmp/cross-sandpoint/powerpc--netbsd/bin:${PATH} which gcc
 /var/tmp/cross-sandpoint/powerpc--netbsd/bin/gcc
 % env PATH=/var/tmp/cross-sandpoint/powerpc--netbsd/bin:${PATH} make all
 gcc -Wall -o kuro_avrd kuro_avrd.c -lutil
 strip kuro_avrd

お、makeできたっぽい。確認しよう。

 % file kuro_avrd
 kuro_avrd: ELF 32-bit MSB executable, PowerPC or cisco 4500, version 1 (SYSV), for NetBSD 3.0.10, dynamically linked (uses shared libs), stripped

やったー。できたー。(NetBSD 3.0.10になっているけど、いいんかな。)

あとは、/mnt/usr/local/sbinに移すだけ。

ではbootしてみる

 まずはLinux

HDをLinkStationに戻して、電源をいれてみる。そのまま放置してくるとLunuxが起動してくるはず。もともと付けていたIPアドレスにtelnetしてみる。

 % telnet 192.168.10.250
 Trying 192.168.10.250...
 Connected to 192.168.10.250.
 Escape character is '^]'.
 Password:
 Login incorrect
 
 HD-HLAN995 login: root
 Linux (none) 2.4.17_mvl21-sandpoint #970 2003年 9月 9日 火曜日 17:27:19 JST ppc unknown
 root@HD-HLAN995:~#

無事、Linux boot。パスワードをつけて、電源ボタンを長押しして、shutdownする。

 次はNetBSD。ところが...

bootしてこない

次はNetBSD。ところが、ちゃんとbootしてこない。

DISK FULL LED点灯中に、電源ボタンは2回押したし、それにブートセレクタは忠実に反応したようで、DIAG LEDはちゃんと2回点滅する。

でもpingもかえってこないし、telnetもできない。HDの音を聞いていると、カーネルをよんだ瞬間で止まっているようだ。(根拠はないけど。)

よく考えると

NetBSD側でMAKEDEVしてないや。あぁ。ということで、再度HDを外して、NetBSD/amd64上でmountして、MAKEDEVする。NetBSD/amd64上でしてもいいのかどうか不安だけど、とりあえずする。

本家より、MAKEDEVファイルをダウンロードして、入れ替えたあと、

 # cd /mnt/dev
 # ./MAKEDEV

でもbootしない

しかしやっぱりbootしない。

DIAG LEDはちゃんと2回点滅しているので、ブートセレクタの先の問題か。

やっぱり、NetBSD/amd64上でフォーマットからdisklabel書きからMAKEDEVやら、やったのが間違いかなぁ。シリアルコンソール改造をすれば、コンソールに何か出ていて、もう少しわかるのだけれども、改造はちょっとなぁ。

USBメモリを買いにいくか。うーん。ここまで来て敗北かぁ。

あれこれためす

パーミッションを確認したり、ファイルを入れ換えて見たりするも、bootしない。

いやになって、しばらくほかっておいた。

ふと、手動でbootさせるとどうなるかと思った。Linux側でbootし、

 # cd /lib/modules/`/bin/uname -r`/kernel
 # (sleep 30; umount -a; sync; insmod nbloader_v3.o kernel=/boot/netbsd.bin bootdev=0xa0000000) &

して試す。

すると、やっぱりbootしないが、DIAG LEDが3回点滅を繰り返すようになった。

もしかして、bootloader_v3ではうまくいかない?

そこで、bootloader_v2を使うように、kuro_boot.confを書き換えて、再度bootしてみた。

ようやくboot

あ、なんかHDの音が違う。DIAG LEDが2回点滅の後、しばらく音がする。これは!

pingしてみる。

 % sudo ifconfig vr0 inet 192.168.200.2/24 up
 % nmap -sP 192.168.200.0/24
 
 Starting Nmap 3.95 ( http://www.insecure.org/nmap/ ) at 2006-11-13 04:43 JST
 Host 192.168.200.2 appears to be up.
 Host 192.168.200.200 appears to be up.
 Nmap finished: 256 IP addresses (2 hosts up) scanned in 2.061 seconds

反応がある!

telnetしてみる。

 % telnet 192.168.200.200
 Trying 192.168.200.200...
 Connected to 192.168.200.200.
 Escape character is '^]'.
 Trying SRA secure login:
 User (isihara): bsduser
 Password:
 [ SRA accepts you ]
 
 NetBSD/sandpoint (MYBOX) (ttyp0)
 
 Copyright (c) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
     The NetBSD Foundation, Inc.  All rights reserved.
 Copyright (c) 1982, 1986, 1989, 1991, 1993
     The Regents of the University of California.  All rights reserved.
 
 NetBSD 3.0.1 (GENERIC.KUROBOX) #1: Fri Jul 28 14:20:56 UTC 2006
 
 Welcome to NetBSD!
 
 Terminal type is screen.
 We recommend creating a non-root account and using su(1) for root access.
 MYBOX%

やったーNetBSD化できたー。

現在の問題点

そもそも、本家お薦めのインストール方法でインストールしていないNetBSDを入れているのだから、しょうがないともいえる。えーん。

  • 電源ボタンや、shutdown -h nowやshutdown -r nowで落とした時、再度あげても、NICが使えなくなることがある。(電源ボタンとかはきいているので、動いているのだと思う。) いろいろ調べたのですが、いまいちよくわからない。電源ボタンやshutdownコマンド以外で落ちた時(コンセントを抜かれていきなり落ちた時とか)、NICが使えなくなることが多い、かな。こうなったら、コンセントも抜いて、完全に電源を落として、Linux側を上げて、echo -n 'CCCC' > /dev/ttyS1; shutdown -r nowして、そのあとNetBSD側を上げると、なおるみたい。
  • NFSで負荷をかけると無反応になる。これは、非力なNFSサーバ(LinkStation)にたいし、高速なNFSクライアント(最近のパソコン全部)でUDPでmountとしているとおこる。TCPで接続すると、よい。(NetBSDだとmount_nfs -T。)
  • NFSで負荷をかけるとときどき無反応になる。無反応になる直前に「tlp0: transmit underrun; new threshold: 96/256 bytes」のようなlogをsyslogに残す。tlpのドライバの不具合のようだがよくわからない。
  • NFS等で負荷をかけると、ときどき無反応になる。全然原因がわからなかったが、これは、kuro_avrdの反応が遅くなってしまって、おこるみたい。/usr/bin/renice -n -20とかしてあげると、無反応になることはほとんどなくなった。(1分平均のload averageが0.4以上になると、そうなるようなsh scriptを書いて、cronで回している。)
  • 室温が高めのところや、LinkStationの空気の流れをふさいでしまうようなところにおいておくと、hungupする。空気の流れを防がないようにし、ファンを高速で回すようにする。(/sbin/atactl wd0 smart status | grep Temperature | awk '{print $8}'、とかやるとHDDの温度が取得できたので、30度を越えると高速で回すようなsh scriptを書いて、cronで回している。)

参考 & 謝辞

下記のWebページのおかげで、isiharaは楽しむことができています。感謝です。_o_

そして、本家こと、かわうち様の

追記[2008/7/17]

本家でNetBSD 4.0ベースのものが配布されていることを知ったので、Updateをしてみました。

やったことは、まっさらインストールとそんなに変わりなくて、

  • 分解して、ハードディスクをとりだして、別のNetBSDマシンでmount。
  • システムのあるパーティション(aパーティション)からいるものを退避。
    • /etcと/usr/pkg/etcはとっとく。
  • システムのあるパーティション(aパーティション)をnewfs。
  • とってあった、/etcを展開。
  • downloadのページにある本家のパッチ(20080123.netbsd-4.diff.bz2)をダウンロード。
  • NetBSDのnetbsd-4枝の最新ソースをとってきて、上記パッチをあてる。
    • uplcom.cのところがrejctされるけど、使わないところなので、無視することにする。
  • configファイル(KUROBOX)をちょっといじる。
    • LFSとTMPFSを追加。;)
  • ユーザランドをコンパイルしてインストール
    • /path/to/cross-sandpoint の下にmakeしてできるものをあつめることにする
    • ./build.sh -U -T /path/to/cross-sandpoint/tools -D /path/to/cross-sandpoint/destdir -O /path/to/cross-sandpoint/obj tools
    • ./build.sh -U -T /path/to/cross-sandpoint/tools -D /path/to/cross-sandpoint/destdir -O /path/to/cross-sandpoint/obj distribution
    • sudo ./build.sh -U -T /path/to/cross-sandpoint/tools -D /path/to/cross-sandpoint/destdir -O /path/to/cross-sandpoint/obj install=/mnt
    • postinstallのチェックをいろいろ通らないので、エラーをみて直す。
  • 本家のUSBメモリからのブートのページで配布している追加/上書きファイル群(kuro_annex40.sandpoint.20080229.tar.bz2)を適当なとこに展開し、いるものを上書きコピー。
    • dev/MAKEDEV
    • etc/rc.d/kuro_avrd
    • sbin/disklabel
    • usr/local/sbin/kuro_avrd(今回はAVRデーモンが入っています♪)
    • (これ以外は、すでにある。)
  • デバイスファイルをつくりなおす。
    • cd /mnt/dev; ./MAKEDEV all
  • カーネルをコンパイルしてインストール。
    • ./build.sh -U -T /path/to/cross-sandpoint/tools -D /path/to/cross-sandpoint/destdir -O /path/to/cross-sandpoint/obj -m sandpoint kernel=KUROBOX
    • 一番最後のところで、「powerpc--netbsd-dbsym: symbol table (379480 bytes) too big for buffer (373760 bytes) Increase options SYMTAB_SPACE in your kernel config」などというエラーがでるはずなので、configファイル(KUROBOX)のSYMTAB_SPACEの値を直して、再度コンパイルしなおす。(この例でいうと、379480にする。)
    • 再度コンパイルして、出なくなったことを確認。
    • ねんのため、/mnt/netbsdにできたカーネルをコピー。
      • /path/to/cross-sandpoint/obj/sys/arch/sandpoint/compile/KUROBOX/netbsd
    • Linuxパーティションの/boot/netbsd.binにもコピー。
      • /path/to/cross-sandpoint/obj/sys/arch/sandpoint/compile/KUROBOX/netbsd.bin

あとは、bootできるか確認をして、必要なパッケージをばしばしmake installするだけ。

無事、NetBSD 4.0系になりました。(本家こと、かわうち様ありがとうございます。)dmesg.txt

おまけ。いわゆる"bcbentchbcbench"の結果 ;)。

 % /bin/echo "scale=2000; e(1)" | /usr/bin/time -p bc -l > /dev/null
 real        66.74
 user        66.46
 sys          0.01
 % /bin/echo "scale=2000; 4*a(1)" | /usr/bin/time -p bc -l > /dev/null
 real        54.38
 user        54.00
 sys          0.01

間違いの指摘や、ご意見などは、FrontPageにある連絡先にメールを下さるとうれしいです。

最終更新時間:2012年05月25日 01時48分09秒