Posts Tagged ‘FreeBSD’

その後のNanoBSD

Wednesday, March 3rd, 2010

freebsd_logo

「どうやってやるんだ?」と悩んでいたけど、普通にpkg_addでできるらしい。というかできた。
ルートボリュームは、通常リードオンリーなので、
# mount -u -o rw /
としてルートボリュームを読み書きできるようにする。
で、あとはpkg_addをすればいい。

試しにmpd5をpkg_addでネットワーク経由でインストールしてみたら、libpdelをインストールしている途中で、/varが一杯になってしまった。なので、逆順にpkg_addしてみた。

# pkg_add -r libpdel
# pkg_add -r expat
# pkg_add -r mpd5

うん、今度は素直にインストールされた。

その後、ルートボリュームをリードオンリーに戻してあげる。

# mount -u -o ro /

手動でmpd5を起動したけど、mpd.confを書いていないのでちゃんとは起動していない。

portsを使う場合は、NFSでマウントするとできそう。

pfSenseからnanoBSDに寄り道 (のまだまだ途中)

Tuesday, February 16th, 2010

pfSense_logoFreeBSDルータをつかっているんだけど、少しくたびれてきているのとサーバ達の中で一番うるさいマシンになってしまったので、リプレイスしようと画策している。今の所それほど緊急性が無いのもあって、進み具合はかなりゆるゆる。

そんな中、出会ったのがpfSense。ちょうど昨年開発者による本も出たのでAmazonで予約して購入。なにぶん英語の本なので未だに全部読んでなかったりする(爆)

pfSense-1.2.3-release-nanobsdバージョンも出たので手順通りにCFを作った。

といってもpfSenseのサイトからpfSense-1.2.3-RELEASE-4g.nanobsd.img.gzをダウンロードしてきて、


# gzcat pfSense-1.2.3-nanobsd.img.gz | dd of=/dev/disk1 bs=16k

でおしまい。

これをCF -> Serial ATAアダプタを介してCPUに接続し、あとは起動し、Webでアクセスすると…

起動しないんだな。これが。4Gのイメージで失敗。2Gにしても失敗。古いバージョンのpfSense-1.2.1-Embedded.img.gzを128MBのCFに書いてやっと起動した。

ここで、ふと思った。今時のUSBメモリはソケットから5mmしか飛び出ないのもあるので、実は行けるんじゃないか?と。

さっそくBaffaloの2GのUSBメモリを買ってきて試してみたら、ばっちり起動する。Webブラウザでアクセスし、必要項目をセットすると取りあえずは使えるようになった。

pfSense 1.2.3はnanoBSDをベースとしている。pfSense-1.2.3がなぜCFで起動しないのか気になりだした。気になりだすともうダメなので今度は、nanoBSDのイメージを作ってみた。作るのはnanoBSDのHowtoのままやってみた。


# /usr/src/tools/tools/nanobsd
# sh nanobsd.sh
# cd /usr/obj/nanobsd.full
# dd if=_.disk.full of=/dev/da0 bs=64k

母艦は、release-8.0

/dev/da0はpfSenseで使ったUSBメモリ。ところが起動はするが、/をマウントするところで止まってしまう。そう、母艦でddでライトするときは、/dev/da0なんだけど、fstabはad0になっているんだな。

nanobsd.shで指定されているディスクがad0となっているのでコンフィグファイルで、NANO_DRIVE=da0を指定する。これで再度スクリプトを走らせてUSBメモリに書き込むがやはりマウントポイントの所で、止まってしまう。一応手入力でufs:/dev/da0s1aを入力すると起動する。でもこれぢゃ今ひとつ。試しにCFに書いてみると今後はgeometoryが違うとおこられるので、diskifo -v /dev/da0でgeometoryを調べてまたまたスクリプトを走らせてみると今度はすんなり起動する。なんだかなー。

気を取り直してnanoBSDを調べていくとportsやらpackageがそのまま使えるらしい。というか中身はFreeBSDなので。がしかし、CFは書き込み回数に制限があるので、/etcや/varはmdを使ったいわゆるRAMディスクなので一癖あるらしい。うーむ、どうやってやるんだ? <- いまここ。

freebsd_logo

Frisk Mega88 on FreeBSD7.2 with libusb

Thursday, July 16th, 2009

FreeBSDのlibusbがちょっと違うらしいと思っていたんだけど、そうでも無いらしい。

FreeBSDでは、USBデバイスの認識をumassやukbdやulptとして認識する。
vusbを使ったFrisk Mega88(名前決めてないや)はHIDとして認識するようにしているので、WindowsやMacでは、ドライバ不要で使えたりする。FreeBSDでもhidでバイスは、uhidとして認識されるわけだが、どうやらFreeBSDのlibusbはuhidで認識されたデバイスにアクセスできないらしい。

FreeBSDのlibusbは汎用のUSBデバイスであるugenとして認識できたデバイスだと上手く操作出来るらしい。

ということをGoogle様で探してLipwoodさんのところで見つけた。
LipwoodさんはUSB-IOというデバイスをFreeBSD上でlibusbを使って動作させたということなので、早速実験してみた。

まず、Frisk Mega88をそのままFreeBSDマシンのUSBに接続する。
uhid0: on uhub1
やはりuhidで認識されている。

ここで、コマンドを叩いてみる。
# ./getemp
Could not find USB device “GETTEMPDev”
となり温度情報を取得することが出来ない。

というわけで、uhidをカーネルコンフィグからコメントアウトしてカーネルの再構築を実行。
待つことしばし。

reboot後、Frisk Mega88をFreeBSDマシンに接続。こんどは、
ugen0: on uhub1
という訳で、ugenデバイスとして認識している。

んじゃってことで、コマンドを叩いてみる。
% ./getemp
Could not find USB device “GETTEMPDev”
ダメじゃん!何かが違うんだろうなorz…

しばらくして、ふとrootでコマンドを叩いてみたら
# ./getemp
28.6
#
いぇい!まんまと温度を取得することが出来た。

そうか管理者権限が無いと出来ないらしい。
試しにPWM(一応組み込んではある。ドライブは出来ないだろうけど)の設定をしてみるとLEDの明るさを換えることができる。
# ./getemp 1
#
ついでにステータスも取得してみる。
# ./getemp status
Duty is 1
#

んじゃ、シェルスクリプトで温度取得をぶん回してみる。
# sh gett.sh
26.7
26.8
:
#
100回でも500回でも大丈夫らしい。

次は実験機に組み込んでみようと思う。

# そういえば、AVRライターであるHIDspxをFreeBSDで使ってみよ。
# 認識はするけど、使えないって
# 何処かに書いてあったような無かったような。
# もしかしら今の状態だと使えるかもしれないし。