OpenBlockSでNetBSDを動かしてみようとするページ。
このページは改造中です。最新の情報が完全に反映されていません。
ごく最近いろいろと動きがあります。port-powerpc-jaなMailing Listを読むと、 IDEや10BASE-TなEtherも動作しているようです。
OpenBlockSの各種デバイス動作状況は次のとおりです。
デバイス | 対応状況 |
---|---|
ブート | bootp + NFS |
100BASE-TX LAN | OK |
10BASE-T LAN | OK (N/A) |
CF or HDD | IDE HDD OK, CF N/A |
LED | OK |
Serial | OK (N/A) |
リセットSW | 未検証 |
NetBSD/openblocksに関するメーリングリスト (netbsd-obs@freeml.com)を作りました。
自由に参加でき、流れたメールは一般公開されます。 メーリングリストへの発言は、メーリングリストへの参加が必要です (事前にメーリングリストに参加してください)。
メーリングリストの詳しい情報はFreeMLのページ から参照できます。
FreeMLのサービスを利用しています。 ですから、メールの最後の数行には広告が入ります。
参加方法は二通りあります。
Majordomoのコマンドメールで参加する場合には、 次のようなメールを送信してください。
宛先 | majordomo@freeml.com |
件名 (Subject) | 空のまま |
本文 | subscribe netbsd-obs あなたのメールアドレス |
一旦確認メールがくるので、返信すると登録完了です。
詳細なヘルプはFreeML のコマンドメールについてのページに書かれています。
ネタとしてはこんなところです。
このページで紹介しているNetBSDのOpenBlockSへのPortはメーリングリスト port-powerpc-jaに流れた Tsubai Masanariさんのメール とそのメールに対する一連のスレッドを参考にして作ったものです。
正式なPortとしてのNetBSD/openblocksは OpenBlockSの販売を行っているぷらっとホームの細川さんが正式なメンテナとして 登録されています。 ちゃんとしたNetBSD/openblocksのWebページも http://www.netbsd.org/Ports/openblocks/ (日本語ページ) にあったりします。
てことで、そのうちNetBSDのCVSリポジトリに OpenBlockSのPortが正式にお目みえすることでしょう。 そういう意味で、このページは正式版がリリースされるまでの予告というか、 つなぎというかそういう位置づけです。 私はつい手がすべってNetBSD/openblocksと記述したりしますが、 正式なものではないので誤解なきようお願いします。
NetBSD/openblocksのメンテナである細川さんにはメールを送ったり、 OpenBlockS S東京製品発表展示会でお目にかかったりしました。 ちなみに 展示会の模様をレポートしたページのどこかに細川さんが写っています。
細川さんに実際に話をうかがったところ、 作業は行っているもののNetBSD-currentに追従する (というかpmapが変わったらしい?) のは非常に大変で、 なかなか安定動作しないそうです。 細川さんは非常に多忙な中、多くの作業をされており、 シリアルコンソールまわりの改善や FPUエミュレーションがらみの問題解決をされているそうです。
最近 (2002-06) になってTsubaiさんが最新のNetBSD への追従とその他のデバイス (IDE, 10M Ether) を動かしたというメールが流れています。
NetBSD-1.6Aの2002-06-14 UTCなソースを取り出して、 build.shをかけたのですがユーザランドがうまく作れません。 kernelだけはなんとかcompileできたので、 NetBSD-1.5Yなuserlandのkernelだけ入れ換えてbootしてテストしてみました。
IDE HDDは認識され、disklabelを書いてnewfsしてmountできました。 ファイルの読み書きなども問題ありません。すばらしい!
10BASE-TのEtherは私の環境では認識はされるものの、動作していません。
これでほとんどのデバイスが動作し始めたと言えるのではないでしょうか
しかも最新のNetBSDに対応したおかげでbuild.shが使えるようになることもあり、このページのような面倒な構築手順も不要になるのかもしれません。
いまのところ古い情報として残しておきますが、今後は新しいソースに対応して書き換えたいと思います。
まずは環境整備から行う。項目としては次のとおりである。
OpenBlockSではセルフ開発は今のところ不可能なので、 クロスコンパイル環境が必須である。 てことで、まずはクロスコンパイル環境を作る。
クロスコンパイルを行うOSはやはりNetBSDが一番便利である (BSD MagazineによるとFreeBSD上にNetBSD のクロスコンパイル環境を作ることもできるそうだ)。 で、i386マシンをでっちあげNetBSD/i386 1.5.2をフルインストールした。
使い慣れたtcshとソースを取り出すために必要なCVSをインストールした。
ソースのアーカイブが取得できない場合は、前述のftp.jp.netbsd.orgから FTPした。
# cd /usr/pkgsrc/devel/cvs # make; make install # cd /usr/pkgsrc/shells/tcsh # make; make install
CVSはソースをチェックアウトするために必須である。
さて、クロスコンパイルするためのソースを用意しなければならない。 今回対象とするソースは2001/05/12のソースなので CVSを用いてチェックアウトする。
ソースは/usr/srcにチェックアウトするのが一般的だろう。
手元のマシンにcvsupしてきたNetBSDのリポジトリを持っていれば、 リポジトリごと/usr/CVS/NetBSDにNFSマウントし、 ローカルマシンでcvs checkoutすればよい。
# mkdir /usr/src # cvs -d /usr/CVS/NetBSD/cvsroot checkout -D 2001-05-12 src
手元にNetBSDのリポジトリがない場合には、
# mkdir /usr/src # cvs -d :pserver:anoncvs@sup.jp.netbsd.org:/cvs/cvsroot checkout -D 2001-05-12 src
などと入力する。 詳しくはNetBSDの 本家Webサイトのドキュメントを参考にしてほしい。
ちなみに、ソースの準備には非常に時間がかかる。
無事にソースが準備できたらOpenBlockS用のカーネルソースを追加する。
カーネルソースは ftp://nandra.iri.co.jp/pub/NetBSD/mpc860/OLD/ にある。そこにあるmpc860-0512.tar.gzを入手し、展開する。
# cd /usr/src # tar xvzf ~/mpc860-0512.tar.gz
OpenBlockS用のファイルを置くビルドディレクトリを作成する。
ここでは/usr/openbloksというディレクトリを作成する。
# mkdir /usr/openblocks
このディレクトリにはOpenBlockS 用にコンパイルされたソフトウェアがインストールされる (正確にはバイナリ以外のincludeファイルや /etcに置かれる設定ファイルなどのファイルシステムのイメージそのもの)。
現時点ではOpenBlockSのIDEドライバがないため、 OpenBlockS単体でブートすることができない。 そこで、ネットワークブートを利用する。
ネットワークブートにはbootpを使い、 ブート後のファイルシステムはNFSを使う。 ということで、bootpサーバとNFSサーバの設定を行う必要がある。
bootpサーバに使ったマシン (ppr) のIPアドレスは192.168.100.70である。
bootpでカーネルをロードするのでbootpの設定が必要である。 /etc/bootptabを編集する。なければ作る。
ppr# cat /etc/bootptab obs.tokuda.net:\ :ht=ether:\ :ha=00806D4729D5:\ :sm=255.255.255.0:\ :lg=192.168.100.70:\ :ip=192.168.100.60:\ :hn:\ :bf=netbsd:\ :bs=auto:\ :rp=/usr/openblocks:
指定した項目の意味は次のとおり。
/etc/inetd.confでbootpを有効にする (25行目)。
bootps dgram udp wait root /usr/sbin/bootpd bootpd
inetdにHUPシグナルを送って、設定を有効にしておく。
# kill -HUP `cat /var/run/inetd.pid`
NFSは/usr/openblocksがマウントできるように設定しておく。 /etc/exportsにその旨記述する。私は面倒なので/usr 以下すべてマウントできるような設定にしてしまっている。
ppr# cat /etc/exports /usr -alldirs -maproot=root 192.168.100.60
OpenBlockSのIPアドレスを192.168.100.60にするので、 OpenBlockSからのアクセスを許可する設定である。
/etc/rc.confにNFSデーモンが起動するような記述を加えておく。
nfs_server="YES" rpcbind="YES"
OpenBlockS用のバイナリをコンパイルするために、
を行う必要がある。
PowerPCのクロスコンパイラはpkgsrcからインストールする訳だが、 includeとlibは自分で作成する必要がある。
まずは、コンパイラと周辺ツール (ar, as, ld, nm, ranlibなど) を作成する。 クロスコンパイラはpkgsrcをつかってmake一発、 あとはビルド用のスクリプトを作ればオッケーである。
OpenBlockSはMPC860というCPUを搭載している。 MPC860はPowerPCシリーズ (統合型らしい) なので、 PowerPC用のクロスコンパイラを用意する必要がある。
NetBSDはさまざまなプラットフォームで利用できるように工夫されており、 FreeBSDのportsに相当する pkgsrcを利用すれば非常に用意にクロスコンパイラがインストールできる。
NetBSDのFTPサイトからpkgsrcの最新版を入手し、 /usrに展開した。目的のクロスコンパイラは、 /usr/pkgsrc/cross/powerpc-netbsdである。
ところが、2001/10/28のpkgsrc.tar.gzを使ったら、egcs-1.1.1.tar.gzが無い、 という理由でストップする。とりあえず、 ftp://ftp.jp.netbsd.org/pub/NetBSD/packages/distfiles/ から必要なファイルを手動でFTPしてきた。
さっそくmakeする。
# cd /usr/pkgsrc/cross/powerpc-netbsd # make; make install
インストールが終ると/usr/pkg/cross/powerpc-netbsd にクロスコンパイラができあがっているはずである。
i386版のmakeを更新する。ただし、他への影響を防ぐため、 もとのmakeはバックアップしておく。
# cd /usr/src/usr.bin/make # make # mv /usr/bin/make /usr/bin/make.bak # cp make /usr/bin
OpenBlockS用のビルドスクリプトを用意する (obsmake.sh)。
obsmake.sh ---- #!/bin/sh NOCLEANDIR=yes; export NOCLEANDIR NOGCCERROR=yes; export NOGCCERROR DESTDIR=/usr/openblocks; export DESTDIR OBJMACHINE=openblocks; export OBJMACHINE RPCGEN=/usr/bin/rpcgen; export RPCGEN MKLINT=no; export MKLINT MKNLS=no; export MKNLS MKPROFILE=no; export MKPROFILE STRIPFLAG= ; export STRIPFLAG MACHINE=mpc860; export MACHINE MACHINE_CPU=mpc860; export MACHINE_CPU MACHINE_ARCH=powerpc; export MACHINE_ARCH TARGET=/usr/pkg/cross/powerpc-netbsd/bin CPP=`${TARGET}/gcc -print-prog-name=cpp` make AR=${TARGET}/ar \ AS=${TARGET}/as \ CC=${TARGET}/cc \ LD=${TARGET}/ld \ NM=${TARGET}/nm \ RANLIB=${TARGET}/ranlib \ SIZE=${TARGET}/size \ STRIP=${TARGET}/strip \ OBJCOPY=${TARGET}/objcopy \ CXX=${TARGET}/c++ CPP=${CPP} $*
パスの通ったディレクトリにobsmake.shを置き、実行権限をつけておく。
# mv obsmake.sh /usr/local/bin # chmod +x /usr/local/bin/obsmake.sh
以降はこのobsmake.shを使ってビルドを行う。
いよいよ/usr/srcの下で作業である。
OpenBlockSのルートディレクトリにディレクトリツリーを作成する。 ただ、そのままmake beforeinstallを実行すると namedというユーザおよびグループがないと怒られるので、 namedというユーザとグループを追加する。
# vi /etc/group ---- named:*:5555: ---- # vipw ---- named:*:9:5555::0:0:Domain Name Service:/etc/namedb:/sbin/nologin ----
準備完了につき、DESTDIRにディレクトリツリーを作成する。
# cd /usr/src # obsmake.sh beforeinstall
PowerPCのクロスコンパイラをインストールしただけでは i386のように最初からincludeファイルやlibファイルが存在しない。 そこで、まずはインクルードファイルを作成する必要がある。
これから作成するincludeおよびlib をクロスコンパイラが使えるようにシンボリックリンクを張っておく。
# cd /usr/pkg/cross/powerpc-netbsd # rmdir include lib # ln -s /usr/openblocks/usr/include . # ln -s /usr/openblocks/usr/lib .
また、/usr/src/Makefileの77行目にあるregress ディレクトリをコメントアウトしとく。
76 .ifmake !(install) 77 #SUBDIR+= regress 78 .endif
また、さきほど展開したカーネルソースにinclude ファイルが付属しているが、足りないファイルが存在する。 そこで足りないファイルをpowerpcのincludeファイルから借りてくる。 とりあえずシンボリックリンクを張ることにした。
シンボリックリンクを張るシェルスクリプト (includes.sh) は次のとおり。
includes.sh ---- SRCROOT=/usr/src DESTDIR=/usr/openblocks PPCINCLUDE=${SRCROOT}/sys/arch/macppc/include MPCINCLUDE=${SRCROOT}/sys/arch/mpc860/include ln -s ${PPCINCLUDE}/adbsys.h ${MPCINCLUDE} ln -s ${PPCINCLUDE}/bat.h ${MPCINCLUDE} ln -s ${PPCINCLUDE}/bus.h ${MPCINCLUDE} ln -s ${PPCINCLUDE}/grfioctl.h ${MPCINCLUDE} ln -s ${PPCINCLUDE}/ipkdb.h ${MPCINCLUDE} ln -s ${PPCINCLUDE}/keyboard.h ${MPCINCLUDE} touch ${MPCINCLUDE}/machine_type.h ln -s ${PPCINCLUDE}/z8530var.h ${MPCINCLUDE} ln -s ${MPCINCLUDE} ${DESTDIR}/usr/include/mpc860
.WAITディレクトリがうまく扱えないので、エラーになってしまった。 これはどうやらbsd.subdir.mkファイルが古いのが原因らしいので、 新しいファイルに差し替える。
ppr# mv /usr/share/mk/bsd.subdir.mk /usr/share/mk/bsd.subdir.mk.org ppr# cp /usr/src/share/mk/bsd.subdir.mk /usr/share/mk
いよいよincludeファイルを作る。結構時間がかかる。
# obsmake.sh includes
includeファイルができたら次はライブラリを作る。
まずはlib/csuを作る。
# cd /usr/src/lib/csu # obsmake.sh dependall; obsmake.sh install
libを作る。これまた結構時間がかかる。
# cd /usr/src/lib # obsmake.sh dependall; obsmake.sh install
ここまでくれば、あとはbuildするだけ。
まだCFやHDDからブートできないので、 bootp+NFSでブートするためのブートローダをbuildする。
# cd /usr/src/sys/arch/mpc860/stand # obsmake.sh
/usr/CVS/0512/basesrc/sys/arch/mpc860/stand/boot/boot がbootプログラムになる。このbootをOpenBlockSに転送する。 転送するためにWindowsを使ったのは内緒。
CD-ROMのtcpdwl.cをコンパイルしても良い。
# gcc -o tcpdwl tcpdwl.c # ./tcpdwl -v 192.168.100.60 /usr/src/sys/arch/mpc860/stand/boot/boot
bootをOpenBlockSに転送する作業は最初の一回だけでよい。 転送方法は通常のファームウェアのアップデート手順と同じである。 ぷらっとホームのWebサイト ( ファームウェアアップデート手順) にやりかたが書いてある。
また、このブートローダを転送した後、 元のOpenBlockSに戻すときには再度ファームウェアのアップデートを行えば、 問題なく戻る (実験して確認済み)。
さて、いよいよカーネルのbuildである。 がその前に、少し作業がある。
先に展開したOpenBlockS用のカーネルソースをそのままbuild するとシングルユーザモードで起動するようになっている。 そこで、マルチユーザモードにするためにカーネルソースを修正する。
カーネルのソース /usr/src/sys/arch/mpc860/mpc860/machdep.cの591行目の boothowtoにRB_SINGLEを代入してシングルユーザモードにしているので、 この部分をコメントアウトしてカーネルの再構築を行う。
589 __syncicache((void *)EXC_RST, EXC_LAST - EXC_RST + 0x100); 590 591 /* boothowto = RB_SINGLE; ここをコメントアウトした */ 592 593 #ifdef DDB
また、/usr/src/sys/arch/mpc860/conf/Makefile.mpc860の121行目で /export/openblocksにカーネルをコピーしているところを /usr/openblocksに変更する。
120 SYSTEM_LD_TAIL+=; \ 121 echo cp $@ /export/openblocks; cp $@ /usr/openblocks 122
修正したら通常のカーネルの構築と同様の手順でmakeを行う。
# cd /usr/src/sys/arch/mpc860/conf # config MPC860 # cd ../compile/MPC860 # obsmake.sh depend # obsmake.sh
ついにユーザランドの作成に突入である。
例によって、うまくコンパイルできないところがあるので回避する。 本来ならばコンパイルできるようにソースを直すのが正しいのだが、 スキル不足ゆえご容赦くだされ。
まず、usr.bin/fileのコンパイルが通らない。 そこでMakefileから削る。
次に、gnu/usr.bin/egcs/f771もコンパイルが通らなかったので Makefileから削る。
# cp /usr/src/gnu/usr.bin/egcs/Makefile /usr/src/gnu/usr.bin/egcs/Makefile.org # vi /usr/src/gnu/usr.bin/egcs/Makefile
7行目のf771を削る。
6 SUBDIR= c89 cc cpp collect2 g++ g77 gcov \ 7 common .WAIT cc1 cc1plus cc1obj 8 .endif
それ以外にもコンパイルできない物があれば、 Makefileから削って対処する (消極的だなー)。
いよいよbuild。
# cd /usr/src # obsmake.sh dependall # obsmake.sh install
/etcを作るためにはetc.mpc860が必要なので、etc.powerpcにシンボリックリン クを張っておく。
# cd /usr/src/etc # ln -s ./etc.macppc etc.mpc860 # obsmake.sh distribution
デバイスファイルのデバイス番号がだいぶ違うので、 /usr/src/sys/arch/mpc860/mpc860/conf.cを見ながら /usr/openblocks/dev/MAKEDEVを直す。結局、こんなパッチ (MAKEDEV.patch) を作った。
パッチを当ててデバイスファイルを作り直す。
# cd /usr/openblocks/dev # patch < MAKEDEV.patch # ./MAKEDEV all
/etc/fstabがないとシングルユーザモードに落ちるので作成する。
# cd /usr/openblocks/etc # touch fstab
/etc/rc.confを修正する。 18行目のrc_configuredをYESにして、 IPアドレスなどのネットワーク設定を追加する。
17 # 18 rc_configured=YES 19 20 # Add local overrides below 21 # 22 hostname="obs.tokuda.net" 23 ifconfig_fec0="192.168.100.60" 24 defaultroute="192.168.100.1"
ftpとtelnetぐらいはできるように/etc/inetd.confを修正する (下の例では7,9行目)。
inetd.conf ---- 7 ftp stream tcp nowait root /usr/libexec/ftpd ftpd -ll 8 #ftp stream tcp6 nowait root /usr/libexec/ftpd ftpd -ll 9 telnet stream tcp nowait root /usr/libexec/telnetd telnetd 10 #telnet stream tcp6 nowait root /usr/libexec/telnetd telnetd
telnet経由のrootのログインを許可するためにroot/etc/ttysを修正 (下の例では17から19行目)。
ttys ---- 16 tty07 "/usr/libexec/getty std.9600" unknown off secure 17 ttyp0 none network off secure 18 ttyp1 none network off secure 19 ttyp2 none network off secure 20 ttyp3 none network
ブートメッセージはシリアルコンソールから出力される。 シリアルコンソールに出力できないとブートが進まないので、 シリアルコンソールのをモニタリングは必須である。
ここではFreeBSDのtipを使った (rootで実行する)。 WindowsならTeraTermとか使うんかな。
ACアダプタを挿してみる。するとコンソールからメッセージがながれる。
tokuda@jetworld> su Password: jetworld# tip cuaa0c connected >> OpenBlockS Boot, Revision 1.1 >> (tokuda@cutiepie.tokuda.net, Mon Jun 25 11:30:04 JST 2001) Using IP address: 192.168.100.60 root addr=192.168.100.70 path=/usr/openblocks 993648timeout +157800 [94+62752+46541]=0x133f8c start=0x10000 ssym = 1291d8, esym = 14c000 [ using 142888 bytes of netbsd ELF symbol table ] Copyright (c) 1996, 1997, 1998, 1999, 2000, 2001 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 1.5V (MPC860) #0: Tue Nov 6 12:36:54 JST 2001 tokuda@ppr:/usr/src/sys/arch/mpc860/compile/MPC860 total memory = 16384 KB avail memory = 13668 KB using 230 buffers containing 920 KB of memory mainbus0 (root) cpu0 at mainbus0: Version 50 (Revision 0) pbus0 at mainbus0 scc0 at pbus0: console intr_calculatemask: none ffbf0000, bio ffbf0006, net ffbf0006, high ffff000f fec0 at pbus0 vec 5: address 00:80:6d:47:29:d5 tqphy0 at fec0 phy 1: 78Q2120 10/100 media interface, rev. 11 tqphy0: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto intr_calculatemask: none ffaf0000, bio ffaf0006, net ffbf0006, high ffff000f boot device:root on fec0 nfs_boot: trying DHCP/BOOTP ioctl: ENETRESET nfs_boot: BOOTP server: 192.168.100.70 nfs_boot: my_name=obs.tokuda.net nfs_boot: my_addr=192.168.100.60 nfs_boot: my_mask=255.255.255.0 ioctl: ENETRESET ioctl: ENETRESET root on ppr:/usr/openblocks Thu Nov 8 04:02:22 UTC 2001 Automatic boot in progress: starting file system checks. mount: /: unknown special file or file system. Setting tty flags. ttyflags: open /dev/tty00: Operation not supported by device ttyflags: open /dev/tty01: Operation not supported by device Setting sysctl variables: Starting network. Hostname: obs.tokuda.net add net 127.0.0.0: gateway 127.0.0.1 Configuring network interfaces: fec0ioctl: ENETRESET ioctl: ENETRESET . add net default: gateway 192.168.100.1 Adding interface aliases: Building databases... Starting syslogd. Checking for core dump... savecore: no core dump (no dumpdev) Mounting all filesystems... Clearing /tmp. Starting virecover. Checking quotas: done. Setting securelevel: kern.securelevel: 0 -> 1 /etc/rc: WARNING: No swap space configured! dmesg: can't get size of msgbuf Updating motd. starting local daemons:. Starting inetd. Starting cron. Thu Nov 8 04:03:22 UTC 2001 Nov 8 04:03:26 obs getty[157]: /dev/tty00: Operation not supported by device Nov 8 04:03:26 obs getty[156]: /dev/ttyE0: Device not configured
やっとここまできた。すなおに感動。
ブートメッセージからブートの成功を確認したら、 さっそくtelnetしてみる。
tokuda@jetworld{102}> telnet obs Trying 192.168.100.60... Connected to obs.tokuda.net. Escape character is '^]'. login: root Last login: Thu Nov 8 04:05:42 2001 from 192.168.100.70 Copyright (c) 1996, 1997, 1998, 1999, 2000, 2001 The NetBSD Foundation, Inc. All rights reserved. Copyright (c) 1980, 1983, 1986, 1988, 1990, 1991, 1993, 1994 The Regents of the University of California. All rights reserved. NetBSD 1.5V (MPC860) #0: Tue Nov 6 12:36:54 JST 2001 Terminal type is kterm. We recommend creating a non-root account and using su(1) for root access. obs# ls / .cshrc altroot dev home netbsd sbin sys usr .profile bin etc mnt root stand tmp var obs# ps axw PID TT STAT TIME COMMAND 0 ?? DKs 0 :00.02 (swapper) 1 ?? Is 0 :00.35 init 2 ?? IK 0 :04.79 (nfsio) 3 ?? IK 0 :01.65 (nfsio) 4 ?? IK 0 :00.42 (nfsio) 5 ?? IK 0 :00.08 (nfsio) 6 ?? DK 0 :00.02 (pagedaemon) 7 ?? DK 0 :01.28 (reaper) 8 ?? DK 0 :00.11 (ioflush) 9 ?? DK 0 :00.31 (aiodoned) 68 ?? Is 0 :01.00 /usr/sbin/syslogd -s 151 ?? Is 0 :00.25 /usr/sbin/inetd -l 154 ?? Is 0 :00.37 /usr/sbin/cron 156 ?? I 0 :00.50 /usr/libexec/getty std.9600 ttyE0 157 ?? I 0 :00.40 /usr/libexec/getty std.38400 tty00 213 ?? S 0 :01.28 telnetd 214 p0 Ss 0 :01.67 -csh 220 p0 R+ 0 :00.03 ps axw obs#
動くコマンドもあり、動かないコマンドもあり。 ifconfigなんかは固まっちゃう。ps auxのuがだめみたい。 dmesgもだめですな。gccもだめ。これはつらい。
mailコマンドでメール送ってみたりできる。/etc/resolv.conf にちゃんとネームサーバ指定してやるとインターネットにもメールが出せる。
/usr/gamesもある。rogueで遊んでみた。遊べるよ、これ。
LinuxではOpenBlockSの前面にあるLEDが点滅してくれる。 健気に動いているのを「よしよし、動いているな」と見守ることができる。
NetBSDでもLEDを光らせたいということでLEDドライバを書いた。 といってもpseudoな手抜きドライバである。
LEDドライバはカーネルソースにパッチを当てる (led.patch)。
# cd /usr/src/sys/arch/mpc860 # patch < led.patch
パッチはconf/MPC860, conf/files.mpc860 にledドライバを使うための記述を追加し、 dev/led.cというドライバ本体のファイルを作成する。
で、カーネルを再コンパイルする。 手順は先のカーネルのコンパイルと同様の手順なので省略するが、 config MPC860してobsmake.sh dependしてobsmake.shすればよい。
パッチを見るとわかるがLEDドライバはデバイス/dev/ledでメジャー番号が24 であることを期待して作成されているため、 手動でデバイスを作成してやる必要がある。
# mknod /dev/led c 24 0
デバイスを使う準備ができたので、簡単なプログラムを作って遊んでみよう (happy.c)。
#include <fcntl.h> #include <stdio.h> #include <sys/ioctl.h> int main() { int i; int skel_dev; int str[] = {0xEC, 0xEE, 0xE6, 0xE6, 0xDC, 0x00}; if ((skel_dev = open("/dev/led", O_RDONLY, 0)) < 0) { fprintf(stderr, "Failed to open /dev/led\n"); exit(2); } for (i = 0; i < 6; i++) { if (ioctl(skel_dev, str[i], 0) < 0) { perror("ioctl failed"); exit(2); } sleep(1); } exit(0); }
プログラムは非常にシンプルである。
ioctlに送るデータの下位8bitがLEDのそれぞれのセグメントに対応している。 LEDと各bitの関係は次の図のとおりである。
-(1)- | | (6) (2) | | -(7)- | | (5) (3) | | -(4)- .(0)
つまりすべてのLEDを点灯させたければ0xFF (11111111) だし、 数字の5を点灯させたければ、0xDA (11011010) である。
クロスコンパイル環境でhappy.cをコンパイルする。
# cp happy.c /usr/openblocks/root # cd /usr/openblocks/root # /usr/pkg/cross/powerpc-netbsd/bin/cc -o happy happy.c
コンパイルが終ったらOpenBlockSにログインしてhappy を実行するとLEDがHAPPyと表示されるはず。
LEDを点灯させるにはIMMR (In Memory Map Register?) を取得し、 PIP (Parallel Interface Port) のPort B Data Register に直接値を書き込んでいる。
LEDのセグメントに対するレジスタは次の図のようになっている。
それぞれのレジスタにビットを立てればLEDが光る。
せっかく動いているんだから、Webサーバの一つでも動かしてみるか、 ってことでWebサーバをインストールして遊んでみた。
とはいっても、gccが動かないのでセルフコンパイルは無理。 つまりクロスコンパイルできるWebサーバが必要になる。
Apache, publicfile, thttpdなどを試してみたものの、 サクッとコンパイルできるWebサーバは見付からない。 と、そんな中boaというWebサーバはコンパイルが完了し、 うまく動作した。
boaのアーカイブ (今回はboa-0.94.8.3を使用) を展開し、 configureしてobsmake.shを叩くだけである。
# tar xvzf boa-0.94.8.3 # cd ./boa-0.94.8.3/src # ./configure # obsmake.sh
コンパイルができたら、boaを適切なディレクトリにコピーして、 いくつか設定ファイルを作成する。
まずは設定ファイルのメインとなるboa.confである。 サンプルはboaのアーカイブを展開したディレクトリにあるものをそのまま使う。
なにも考えないと次のような設定になる。
てことで、準備する (コンパイルしたsrcディレクトリにいるとする)。
# mkdir /etc/boa # mkdir /etc/www # mkdir /var/log/boa # echo text/html html > /etc/mime.types # cp boa /etc/boa # cp ../boa.conf /etc/boa
mime.typesはとりあえずhtmlだけ追加しておいた。
さっそくboaを起動しよう。
# cd /etc/boa # ./boa -c ./boa.conf
適当なHTMLファイルを/etc/wwwに作ってブラウザでアクセスし、 動作の確認を行う。
ということで、Webサーバの一丁あがりである。
SCC Ethernetドライバ (sce) がTsubaiさんによってサポートされました。
mpc860-020616.tar.gzなカーネルを作るとsceドライバが入ってます。
いまのところ私の手元では動作していないのですが、 まともにNetBSD-1.6Aのユーザランドを作れていなので検証できてない状況です。
IDEドライバがTsubaiさんによってサポートされました。
このページがあるのも皆様のおかげです。
すべて無断リンクです。ごめんなさい。
OpenBlockSを販売しているぷらっとほーむのページ。 最近は新しい話題がないなぁ。 と思っていたらOpenBlockSSが発表されましたね。
OpenBlockSのOEM元となったES1-200のカーネルソースが公開されています。
OpenBlockSのCPUであるMPC860のページ。 ここではMPC860のスペックがPDFで見られます。
OpenBlockS User MLを運営されている柴田さんのページです。 迷わずMLには参加でしょう。情報の宝庫。お世話になってます。
OpenBlockSの導入と設定が書かれてます。 セキュリティを考慮した設定があります。
Linux 2.4系のカーネルを構築するためのパッチがあります。 さらに、MPC860の内部設定などの詳しい技術情報があります。
Linux 2.4系のカーネルを構築するためのパッチがあります。 若林さんのパッチは村瀬さんのパッチに対して当てるものです。 LEDもNICもシリアルもIDEもRTCもOKだそうです。いいなぁ。
OpenBlockSを買う要因になったNetBSDのports-powerpc-jp メーリングリストの記事です。この記事以外にも何通か OpenBlockSの話題があります。
FreeBSD上にOpenBlockS (Linux PowerPC) のクロスコンパイル環境を作るためのページ。
OpenBlockS用にコンパイルされたソフトウェアのバイナリがFTP サイトに公開されています。 [obu00502] Re [FYI] ftp サイトのソフト一覧(OpenBlockS MLより) で公開されているソフトウェアの説明付きリストがあります (ただし4月時点のリストなので現在はもっと増えてます)。
OpenBlockSでNetBSDが動くことを証明し、 そのソースを公開していただいたTsubai Masanoriさん。 Tsubaiさんのおかげでこのページがあります。
NetBSD/openblocksのPortメンテナである細川さん。 細川さんにはメールや展示会でとても親切に対応していただきました。
OpenBlockSというオモチャをこの世に送りだした ぷらっとホームさん。 使い倒すには大変ですが、十分楽しんでおります。