2014年7月18日金曜日

Raspberry Pi に FreeBSDをインストール #2

ARMでは、まだMonoが動かない

Raspberry Pi + FreeBSDでも、OpenSimうごけばいいなーって思ってたんですが、Portsのlang/monoは、まだARM-CPUでは動きません。残念...。 いずれ移植されて動くようにはなると思うので、そのとき、再挑戦してみることにします。

ヒートシンクをつけてみた

Raspberry Pi のCPUやチップは、わりと熱をもつようです。OS全体をコンパイルする、make world, make kernel とかすると、かなり長時間高負荷でイジめることになるので、熱的に大丈夫か不安になったので、ヒートシンクを買いました。



私の部屋は南向きなので、日中はかなり温度があがってしまいます。これで、長時間システムを動かし続けても、ちょっとだけ安心です。

2014年7月15日火曜日

Raspberry Pi に FreeBSDをインストール #1

> まずは、順当にLinuxでも動かしてみようかしら...。

って書いたんですが、FreeBSD 10.0 のRaspberry Pi 用のインストールイメージがFreeBSD本家サイトにあったんで、こっちを先にインストールしてしまいました...(FreeBSDで遊ぶのに飽きたら Linuxもいじってみることにします www)。

FreeBSDディスクイメージのSDメモリへの書き込み

  現時点での最新は次のものです。
FreeBSD-10.0-STABLE-arm-armv6-RPI-B-20140630-r268038.img.bz2

この.bz2ファイルの展開して得られた .imgファイルをSDメモリカードに書き込みます。書き込みは、別に動いてるFreeBSDマシンにUSBメモリカードリーダーライターをつないで行います。 展開後のディスクイメージが1GBぐらいなので、 使用するメモリカードは、2GB以上の容量のものが良いと思われます。 私が、最初使ったメモリカードはClass4の4GBのものでした。

SDメモリカード (4GB)
使用したSDメモリカード

私のところの場合、SDメモリカードをFreeBSDマシンのUSBに挿すと /dev/da0 として認識されます。書き込みは4~5分で終わりました。

# bunzip2 FreeBSD-10.0-STABLE-arm-armv6-RPI-B-20140630-r268038.img.bz2
# dd if=FreeBSD-10.0-STABLE-arm-armv6-RPI-B-20140630-r268038.img of=/dev/da0 bs=1M

Windowsでディスクイメージを書き込む場合、DD for Windows というツールが使えます。Windows7で使えました。

シリアルコンソールの接続

次に、Raspberry Pi にシリアルコンソールケーブルを接続します。シリアルケーブルが無いと、ログインする方法がないので手も足もでないことになります(液晶ディスプレイやUSBキーボードが接続されていたら、なんとかなるのかもしれないけど、持ってないから分かりません。また、sshd_configを書き換えてrootログインを許可してssh経由で接続ということもできなくはないけど....)。ですんで、やるならシリアルケーブル接続することを、まずはお勧めします。


私はWindows7のマシンに、Amazonで買った次のようなUSBシリアルケーブルを接続しました(中国製でかなり安かったけど、到着まで時間かかるし、ちょっと怪しいので積極的にはお勧めしない www)。入出力の電圧レベルは、TTLレベルのものです。

USB-TTLシリアルコンソールケーブル

このケーブルをTeraTerm経由で接続します。設定は次の通りです。
Baud rate: 115200bps
Data bit: 8bit
Parity bit: none
Stop bit: 1bit,
Flow control: none
結線は、Raspberry Piのビン配置 を参考に、ケーブル赤(VCC, +5V)以外を接続します。
ケーブル緑(TxD) ---  Raspberry Pi  10番pin
ケーブル白(RxD) ---  Raspberry Pi  8番pin
ケーブル黒(GND) --- Raspberry Pi  6番pin
ケーブル赤(VCC) はつながない事! 最初、赤もつないでしまって、なにも出力されないので使えないのかと思ってしまいました。Raspberry Pi 壊れなくて良かった...www。

SDメモリカードに関する注意

FreeBSD for RPI のSDメモリカードドライバーにまだ不具合があるのかどうかはわかりませんが、SDカードによってはエラーになって動作しないものがあります。
次の手元にあったカードは、最初なんどもエラーになり、bootの途中で落ちました。が、何回か書き込みしたり、抜き差ししている間になんとなく動くようになりました(謎だ)。


また、 最初に使用したカードでも、portsツリーをportsnapで展開したり、ヘビーにコンパイルかけると、たまーにエラーでカーネルが落ちしてしまってることがありました。SDメモりカードをTranscend の16GB, Class 10のものに変えて試してみたら、エラーがでなくなり問題なく動作している雰囲気です。可能ならClass 10などの高速なカードを使うことをお勧めします。

SDメモリカードのモードに関して気づいたこと


しかし、今一度、OSが起動しないときのブートメッセージを見てみたら

mmcsd0: 4GB <SDHC LEXAR 1.0 SN 194340 MFG 11/2010 by 40 BE> at mmc0 50.0MHz/4bit
/65535-block
mmcsd0: Error indicated: 1 Timeout
mmcsd0: Error indicated: 1 Timeout
...

となっていました。一方、正常に起動したときのブートメッセージは、以下のようになりました。

mmcsd0: 4GB <SDHC LEXAR 1.0 SN 194340 MFG 11/2010 by 40 BE> at mmc0 25.0MHz/1bit
/65535-block
...
mmcsd0: 4GB <SDHC LEXAR 1.0 SN 194340 MFG 11/2010 by 40 BE> at mmc0 25.0MHz/4bit
/65535-block
...

これを見ると、50.0MHz/4bitのモードになったときはエラーになり、25.0MHzの場合は正常にメモリカードにアクセスできる、ということみたいです。
SDカードの仕様には、まったく詳しくないので、これが何を意味するのかは分かりませんが、メモリカードコントローラーの初期化の部分になんらかの不具合があるような気がします。

とりあえず Raspberry PiでFreeBSDが起動した

紆余曲折はありましたが、Raspberry Pi でFreeBSDが起動しました。
root@raspberry-pi:~ # uname -a
FreeBSD raspberry-pi 10.0-STABLE FreeBSD 10.0-STABLE #0 r268038: Tue Jul  1 04:2
9:43 UTC 2014     root@grind.freebsd.org:/usr/obj/arm.armv6/usr/src/sys/RPI-B  a
rm
root@raspberry-pi:~ #

いったん起動すると安定してうごいているように見えます。FreeBSDも10.0になってCコンパイラがClangになったりして、いろいろ変わっているので、まだまだいろいろ変わっていく途中なのだと思います。

SDメモリカードのベンチマークしてみましたが、読みこみはさほど遅くないのですが、書き込みがUSB-HDDディスクの1/4~1/5 のスピードしか出ません。原理的にしかたないようですし、フラッシュ系メモリは書き込み回数に制限あるので、次は、ルートファイルシステムをUSB-HDDにしようと思います。


2014年6月29日日曜日

Raspberry Pi を買ってしまった

今日、BeagleBone BlackでBSDを動かす事に関してSecondlifeの友人からIMがきました。BeagleBone Blackというのは、ARMコアCPUを使った超小型ボードPCです。
http://beagleboard.org/
http://akizukidenshi.com/catalog/g/gM-06867/
友人はこのPCボードでOpenSimを動かそうとしているらしいです。こういう小さいボードでOpenSimが動くというのはすごく面白そうです(それにしてもマニアックな....www)。

以前から、Raspberry Pi などのARMコアの超小型ボードPC には興味があったのですが、私には荷が重そうで、たぶん買っても使いこなせなさそうだったんで横目で見てました。が、しかし、さっき発作的にRaspberry PiをAmazonに注文してしまいました(あーあ、やってしもた...)。

BeagleBone BlackとRaspberry Piのどっちにしようか迷ったんですが、FreeBSD-CURRENTでサポートされているらしいので Raspberry Pi にしました。BeagleBone Blackも動かしている人いるようだしスペック的にはよさそうなのですが、初めてこのタイプのボードをいじるので、情報が得やすいRaspberry Piにしました(軟弱ものな私....BeagleBone Blackもよさげだけど、まあそのうち....www)。

ちなみにFreeBSDのARM-CPUのサポート状況は以下のページに情報があります。
https://wiki.freebsd.org/FreeBSD/arm
まずは、順当にLinuxでも動かしてみようかしら...。
余裕ができたらFreeBSDとかを動かしてみて、monoとか動かして、
そして最終的にOpenSimを動かせたらいいなぁ....。