”Raspberry Piとは、これからのIT開発者やプログラマのために開発したLinuxベースで動作する超低価格で名刺サイズのパソコンです。このパソコンは小型で安価であり、更にBROADCOM社製ARMCoreベースのプロセッサ、GPUを搭載しています。また、HDMIやUSB2.0などの基本的なインターフェースも一通り装備されているため、ディスプレイやキーボードなどを接続することも可能です。”
http://www.raspberrypi.org/downloadsからイメージをダウンロードしてSDカードに書き込めば,電源とキーボード,マウス,モニタを用意すると素直に起動するLinuxBoxの出来上がり。
とりあえず,http://www.raspberrypi.org/downloadsからRaspbian “wheezy”をダウンロードしてddwinを使ってSDカードに書いてみた。SDカードは,SanDiskの8GBを使った。
電源投入。普通のLinuxとして起動する。あまりにあっさり動いた。X Windowも使えて,「おっ!意外に行けるかも」な感じ。本体も小さいし。
でも,X Windowはいらないんだけどね。
FREEBSD DEVELOPER'S NOTEBOOTやFreeBSD - easiest way to install on my RPi?で既にFreeBSDが動作しているらしい。
ということで、FreeBSDが走るRaspberry PiはFreeBSD/piと呼ばれるらしい。
すでにcurrentにもマージが始まっているとのことなので,楽勝で行けそーな気がするー。
FreeBSD/Pi setup HowToのU-Bootとbuild_world, build_kernel,imgの作成までを自動化するスクリプトがあったので実行してみた。
スクリプトを実行する前にコメントを読んでみるとtarのところでエラーになるので,書式を変えた方がいいよというコメントがあったので事前に変更して実行した。
バイナリを作成するスクリプトとイメージを作成するスクリプトを分けてみた。
BUILD-SRC.sh
#!/bin/sh set -e export TARGET=arm export TARGET_ARCH=arm export SRCROOT=/usr/home/shinichi/bsdpi/freebsd-pi export MAkEOBJDIRPREFIX=/usr/home/shinichi/Sources/obj export KERNCONF=RPI-B KERNEL_BIN=`realpath $MAKEOBJDIRPREFIX`/arm.arm`realpath $SRCROOT`/sys/$KERNCONF/kernel.bin make -C $SRCROOT kernel-toolchain make -C $SRCROOT KERNCONF=$KERNCONF WITH_FDT=yes buildkernel make -C $SRCROOT TARGET_CPUTYPE=armv6 MALLOC_PRODUCTION=yes buildworld
BUILD-IMG.sh
#!/bin/sh set -e export TARGET=arm export TARGET_ARCH=arm export SRCROOT=/usr/home/myaccount/bsdpi/freebsd-pi export MAkEOBJDIRPREFIX=/usr/home/myaccount/Sources/obj export KERNCONF=RPI-B #KERNEL_BIN=`realpath $MAKEOBJDIRPREFIX`/arm.arm`realpath $SRCROOT`/sys/$KERNCONF/kernel.bin KERNEL_BIN=/usr/obj/arm.arm`realpath $SRCROOT`/sys/$KERNCONF/kernel.bin IMG=bsd-pi.img rm -f $IMG dd if=/dev/zero of=$IMG bs=128M count=8 MDFILE=`mdconfig -a -f bsd-pi.img` gpart create -s MBR ${MDFILE} gpart add -s 32m -t '!12' ${MDFILE} gpart add -s 896m -t '!12' ${MDFILE} gpart set -a active -i 1 ${MDFILE} newfs_msdos -L boot -F 16 /dev/${MDFILE}s1 newfs /dev/${MDFILE}s2 mount_msdosfs /dev/${MDFILE}s1 /mnt tar -x -v -z --uname root -C /mnt -f freebsd-pi-uboot-20120806-sd.tar.gz cp $KERNEL_BIN /mnt umount /mnt mount /dev/${MDFILE}s2 /mnt make -C $SRCROOT DESTDIR=/mnt installworld make -C $SRCROOT DESTDIR=/mnt distribution # Minimal config echo 'hostname="freebsd-pi"' > /mnt/etc/rc.conf echo '/dev/mmcsd0s2 / ufs rw 1 1' > /mnt/etc/fstab umount /mnt mdconfig -d -u $MDFILE
ERROR: Required auditdistd user is missing, see /usr/src/UPDATING.
/etc/passwd
auditdistd:*:78:77::0:0:Auditdistd unprivileged user:/var/empty:/usr/sbin/nologin
/etc/group
audit:*:77:
imgをマウントする。 mdを使ってイメージをデバイスに変換してマウントする。
# mdconfig -a -t vnode -f /usr/obj-bpi/bpi.img md0 # ls /dev/md* /dev/md0 /dev/md0s1 /dev/md0s2 /dev/mdctl # mount /dev/md0s2 /mnt #
使い終わったmdファイルは,ちゃんとお片付けしましょう。
mdconfig -d -u /dev/md0 # ls /dev/md* /dev/mdctl #
しばらくRasberry Piに触れない日が続いていたんだけど,最近,少しずつ触っている。 FREEBSD DEVELOPER'S NOTEBOOTのスクリプトもアップデート版が出ていたので,Currentを更新してビルドした。
今のCurrentだとHDMIにメッセージを出すようで,シリアルコンソール側はしばらく何も表示されなくなるようになったのね。
HDMIのモニタは普段は使わないので途中がまるで見えないのはちょっと不安がある。
シリアルコンソールにメッセージを出すために以下の設定を/boot/loader.rcに書いておく
set console=comconsole
今度パッチを当てる予定。
> Hi > > I decide to test RRI-B as simple router (without NAT): [Host A] --- > [RPI-B] --- [Host B] > > I've created two vlans on RPI (if_vlan.ko was load as module) and run > iperf between Host A and Host B: > > [Host A~]# iperf -c 192.168.0.249 -P 5 -i 5 -t 300 | grep SUM > [SUM] 0.0- 5.0 sec 4.62 MBytes 7.76 Mbits/sec > [SUM] 5.0-10.0 sec 4.75 MBytes 7.97 Mbits/sec > [SUM] 10.0-15.0 sec 4.25 MBytes 7.13 Mbits/sec > > So RPI-B network's throughput was around 20Mbit/sec of full-duplex traffic: The problem is that USB works in PIO mode. With DMA mode enabled it's somewhat faster. Here is my half-baked patch: http://people.freebsd.org/~gonzo/patches/dwc_otg-dma-nosplit.diff Network interface should work, although USB keyboards will not work with this patch.
headをチェックアウトして件のパッチをあててみた。
# svn co svn://svn.freebsd.org/base/head head # cd head/sys/dev/usb/controle # patch < dwc_otg-dma-nosplit.diff # cd ../../../../ # sh build.sh
パッチをあてる前と後でpingしたときのラウンドタイムの変化を見てみた
# ping 8.8.8.8 min/avg/max/stddev = 10.108/13.068/30.192/5.389
# ping 8.8.8.8 min/avg/max/stddev = 6.945/9.183/20.723/2.582
# ping 8.8.8.8 min/avg/max/stddev = 6.723/8.131/17.493/1.662
パッチをあてる前は、onboardのNICを10としたとき、USB-NICであるLUA3-U2-ATXは20だった。
パッチ後は、おそよ同じ速度となっていた。
しかし、暫くするとNetworkの通信ができなくなるなぁ。
なんでだろ。
/etc/ttysを見てみるとターミナルタイプがdialupとなっていた。
ttyu0 "/usr/libexec/getty 3wire.115200" dialup on secure
ターミナルタイプをxtermに変更した
ttyu0 "/usr/libexec/getty 3wire.115200" xterm on secure
build.shで書き込んでいるので、スクリプトを変更しておいた。