タイトル レイアウト

FreeBSD/arm
Raspberry Pi 2 ModelB で動作確認
たかのゆ~じ
[email protected]
http://running-dog.net/
発表者紹介
•
running-dog.net の著者
•
•
FreeBSD-2.0.0(PC98)からのFreeBSD利用者
基本的にはユーザランドの人(Xバリバリだぜぃ;-)
•
最近のvesaはなかなかやるよ。
•
JKUG(Japan KDE Usres GroupのFreeBSD担当
•
もしくはただ単に宴会参加者;-)
•
•
[email protected]ではなく、どちらかというとkde.orgとかopendesktop.orgに加担
•
一時期はKDEの日本語化を押してた。
•
最近は翻訳系が楽しい
カーネルだけでなく、ユーザランドも楽しいですよ;-)。
そんな人が本日発表するのは?
•
FreeBSD/arm です。
•
持っている人?
•
Portsコンパイルしてね・・。
インストール
•
Raspberry Pi 2 ModelBを購入;-)。
•
isoイメージをダウンロード。
•
http://ftp.iij.ad.jp/pub/FreeBSD/releases/arm/armv6/ISO-IMAGES/10.2/
•
FreeBSD-10.2-RC1-arm-armv6-RPI-B.img.xz
$ unxz FreeBSD-10.2-RC1-arm-armv6-RPI-B.img.xz
$ ls –l FreeBSD-10.2-RC1-arm-armv6-RPI-B.img
-rw-r--r-- 1 root ftp 503316480 Jul 24 23:21 FreeBSD-10.2-RC1-arm-armv6-RPI-B.img
•
もとは81MByteのimg.xzですが、500MByte のイメージができました。
インストール (2)
•
これを MicroSD カードに焼き付けます。
# dd if=FreeBSD-10.2-RC1-arm-armv6-RPI-B.img of=/dev/da0 bs=10240
•
準備完了。
•
MicroSDをRaspberry Pi 2 ModelBにセットしHDMIかシリアルコンソールを接
続して電源投入。
•
MicroSDのサイズはどれくらいでも良いです。
•
•
2/4/8GByte程度あればぐー。
一発目の起動でgtppartが動き出しメディアサイズにパーティションを調
整してくれます。(すげー。)
インストール (3)
•
僕の環境。
Filesystem
1024-blocks
/dev/mmcsd0s2a
7466396
devfs
1
/dev/msdosfs/MSDOSBOOT
51128
/dev/md0
29340
/dev/md1
14492
/dev/md2
11420
•
Used
960724
1
7320
24
280
8
Avail Capacity
5908364
14%
0
100%
43808
14%
26972
0%
13056
2%
10500
0%
Mounted on
/
/dev
/boot/msdos
/tmp
/var/log
/var/tmp
/tmpと/var/log、/var/tmpはmdを利用しているので再起動後は毎回消えてなく
なる。
使ってみる
•
遅いけど、フツーに動くFreeBSD。
•
しかし、portsが無いと「わーい。起動したー。いじょ。」な状態。
•
portsツリーは他のFreeBSDからNFSする。
•
CPUの動作クロックは600MHz (実際は900MHzで動作可能なCPU)
•
Linux方面では1GHzで動作するパッチがあるらしい。
dev.cpu.0.temperature: 49.7C
dev.cpu.0.freq_levels: 900/-1 600/-1
dev.cpu.0.freq: 600
使ってみる (2)
•
NICは40Mbpsまでしか出ないUSB接続のNIC。
•
ハードウェア的な制限がかかっている
smsc0: <vendor 0x0424 product 0xec00, rev 2.00/2.00, addr 3> on usbus0
smsc0: chip 0xec00, rev. 0002
miibus0: <MII bus> on smsc0
ukphy0: <Generic IEEE 802.3u media interface> PHY 1 on miibus0
ukphy0: none, 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto
ue0: <USB Ethernet> on smsc0
ue0: Ethernet address: b8:27:eb:46:24:b6
使ってみる (3)
•
OTG 対応のUSB HUBのようだ。電源供給に利用?
•
USBに色々刺すとFreeBSDの実装で動作するモノがある。
•
rum0 / run0 / urtwn0 / ubt0 / cuse4bsd (UVCカメラ)
•
PCI BUSは無いようだ。
# usbconfig list
ugen0.1: <OTG Root HUB DWCOTG> at usbus0, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=SAVE (0mA)
ugen0.2: <product 0x9514 vendor 0x0424> at usbus0, cfg=0 md=HOST spd=HIGH (480Mbps)
pwr=SAVE (2mA)
ugen0.3: <product 0xec00 vendor 0x0424> at usbus0, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=ON
(2mA)
ugen0.4: <802.11 n WLAN Ralink> at usbus0, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=ON (450mA)
ugen0.5: <CSR8510 A10 vendor 0x0a12> at usbus0, cfg=0 md=HOST spd=FULL (12Mbps) pwr=ON
(100mA)
# pciconf -lv
pciconf: /dev/pci: No such file or directory
何に使う?
•
ウェブカメラは一応使える。
•
cuse4bsd-kmod
•
webcamd
•
v4l_compat
•
mjpg-streamer
•
UVC (USB Video Class) は何とか動くよ。
•
svgalibはFreeBSD/armではコンパイルできないのが痛い・・。
•
pwcview は必要なライブラリが揃わないので動作しないのよ・・。
何に使う? (2)
•
マルチメディア系はどんな感じか?
•
mplayer-1.1 はコンパイル通したけど、再生ができない (video 部分は省き)
•
•
•
•
•
•
•
ffmpeg
faac
x265
sdl
xvid
lame
mp4v2
•
結局動いたのはmpg123のみ・・。orz
•
音楽再生はLinuxのvolmioのほうが遥かに良い感じ。
その他のOS
•
Windows10 IoTが動作するですよ。
•
デベロッパ登録する。
•
imgをダウンロードする。
•
•
IOT Core Rpi.ISOが必要
開発環境(MicroSD書き込みツール含む)をWindows8.1にインストール。
•
ISOイメージの中のWindows_10_IoT_Core_RPi2.msiを実行
•
MicroSDに書き込みRaspberry Pi 2にセット。
•
Raspberry Pi 2にHDMIとUSBマウスを接続する。
•
電源オン。うりゃーっ!!
•
画面が現れる。やったぁ。
•
マウスを2,3箇所クリックしてしゅーりょー。orz
•
開発しましょう;-)。
その他のOS (2)
•
•
Volmioってなんか良いらしい。
•
ubuntuベースの音楽配信・再生に特化したOS。
•
NFSマウントした音楽データやUSBメモリの音楽データを再生できる。
•
defaultでBluetoothに対応してないのでA2DP経由のスピーカが利用できないのが
痛い。
他にも色々あるようです。(僕はまだ使ったことがないf(^^;;)
•
Light MPD
•
runeaudio
portsのコンパイル
•
NFS mountした/usr/ports配下でmakeを走らせひたすら待つ。
•
NICが40Mbpsしか出ないのでソースの展開が遅い。
•
母艦(nfsd)側で make patch すると良い
•
make installと叩いたら扇風機で風を送りつつひたすら待つ・・。
•
CPUが四つとはいえずいぶんと遅い・・。 orz
•
Atom270 (FreeBSD/i386)よりはるかに遅い・・。orz
portsのコンパイル (2)
•
portsのmake installが正しく動作しないモノもあるよ・・。
•
特にperlモジュールのstage環境が悲惨。ほぼ100%の割合。
•
make installしてもstageの中は空っぽなので実際のmake installに失敗する。
•
pkg-plistを確認しつつwork/source-code/の中からコンパイルが完了したものを
stage/の中に手動で移してからmake install。
•
•
net-mgmt/mrtg/
イヤになる・・。 orz
portsのクロスコンパイル環境構築
•
やりたいこと。
•
FreeBSD/amd64上でFreeBSD/armのコンパイルを行う
•
色々試してみた。
•
nkfやslなどちっこいのはコンパイルが通り、pkgもでけた。ふぅ。
•
しかし、ヘビーなやつはほぼ不可能。
•
Xなんて動かそうと思わない・・。
•
jail一発でできる環境とか知りたいところ。
portsのクロスコンパイル環境構築 (2)
mkdir /home/armv6/armv6-root
mkdir /home/armv6/obj
cp -pr /usr/src /home/armv6
cd /home/armv6/src
make -DNO_CLEAN TARGET=arm TARGET_ARCH=armv6 MAKEOBJDIRPREFIX=/home/armv6/obj buildworld
make -DNO_CLEAN TARGET=arm TARGET_ARCH=armv6 MAKEOBJDIRPREFIX=/home/armv6/obj DESTDIR=/home/armv6/armv6root installworld
make -j6 -DNO_CLEAN TARGET=arm TARGET_ARCH=armv6 kernel-toolchain toolchain
setenv
setenv
setenv
setenv
setenv
setenv
setenv
setenv
setenv
setenv
setenv
setenv
setenv
CC /home/armv6/obj/arm.armv6/home/armv6/src/tmp/usr/bin/cc
CPP /home/armv6/obj/arm.armv6/home/armv6/src/tmp/usr/bin/cpp
CXX /home/armv6/obj/arm.armv6/home/armv6/src/tmp/usr/bin/c++
AS /home/armv6/obj/arm.armv6/home/armv6/src/tmp/usr/bin/as
NM /home/armv6/obj/arm.armv6/home/armv6/src/tmp/usr/bin/nm
RANLIB /home/armv6/obj/arm.armv6/home/armv6/src/tmp/usr/bin/gnu-ranlib
LD /home/armv6/obj/arm.armv6/home/armv6/src/tmp/usr/bin/ld
OBJCOPY /home/armv6/obj/arm.armv6/home/armv6/src/tmp/usr/bin/objcopy
SIZE /home/armv6/obj/arm.armv6/home/armv6/src/tmp/usr/bin/size
AR /home/armv6/obj/arm.armv6/home/armv6/src/tmp/usr/bin/gnu-ar
STRIPBIN /home/armv6/obj/arm.armv6/home/armv6/src/tmp/usr/bin/strip
MACHINE arm
MACHINE_ARCH armv6
portsのクロスコンパイル環境構築 (3)
make TARGET=arm TARGET_ARCH=armv6 buildenv
make xdev XDEV=arm XDEV_ARCH=armv6
setenv
setenv
setenv
setenv
setenv
TARGET arm
TARGET_ARCH armv6
MAKEOBJDIRPREFIX $HOME/obj
DESTDIR /home/armv6/armv6-root
BUILDPATH /home/armv6/obj
setenv XDEV arm
setenv XDEV_ARCH armv6
make -DNO_CLEAN PREFIX=/home/arm/portinstall WRKDIRPREFIX=/home/arm/portwork CONFIGURE_ARGS+="--host=arm -prefix=/home/arm/portinstall" LDFLAGS+="rpath=/home/armv6/obj/arm.armv6/home/armv6/src/tmp/lib:/home/armv6/obj/arm.armv6/home/armv6/src/tmp/usr/li
b:/home/arm/portinstall/lib:/home/armv6/obj/arm.armv6/home/armv6/src/lib L/home/armv6/obj/arm.armv6/home/armv6/src/tmp/lib -L/home/armv6/obj/arm.armv6/home/armv6/src
/tmp/usr/lib -L/home/arm/portinstall/lib -L/home/armv6/obj/arm.armv6/home/armv6/src/lib" NO_PKG_REGISTER=1
clean install
portsのクロスコンパイル環境構築 (4)
•
結局本体で地道にmake installもしくはpkgサイトから拾ってくる。
•
僕の見つけたpkgサイト
•
•
http://www.peach.ne.jp/archives/oc1/ports/packages/All/
•
http://freebsd-current.os-hackers.jp/pub/FreeBSD/ports/arm/armv6/packages-11-current/All/
僕が用意したpkgサイト
•
http://distfiles.icmpv6.org/distfiles/packages/All.armv6/
と、いうことでまとめ
•
FreeBSD/arm は「わーい。動いたー。」で終わる感が強い・・。
•
•
NetBSD なみ? (失礼;-)
FreeBSD/arm CURRENTは生物なので日々進化している。
•
僕が一番最初にインストールした
FreeBSD-11.0-CURRENT-arm-armv6-RPI2-20150618-r284544.img
は一発目の起動時に/etc/fstabを編集する必要があったが今はそれもなくなっている
• ddすれば即起動
•
pkg install hogeしても無いものが多い。あたたたた。
•
とりあえずportsのクロスコンパイル環境が無いとお話にならない。
•
Linux方面だと色々利用価値はありそう。
•
今日はとりあえずここまで・・。
Demo
君は Raspberry Pi 2 ModelB を本当に欲しいと思うか?
完。
ご清聴ありがとうございました。