2015年6月15日月曜日

Google cardboardをおためし

えー、いまさらですね。まったくもって、いまさら。

ことのはじまりは、先日GoogleIO 2015のkey note speechをみていて、最後の方に
「去年紹介したんだけど、Google cardboardがあたらしくなったよ」的なのを聞いて、なにー!ってなったのです。まぁつまり2014のもきいてなかったと。やむをえないですなぁ。まったく。

さっそくぐぐってみると、やっぱし100均でやったひとがいるんですね。日本だねぇ。
1000円でハコスコが買えることが判明するも、やっぱ自作のほうが楽しいかな?ということで、道を踏み外しました。。。
Daisoを2軒ほど回ってみたんだけど、、、ない。ないよー、そのレンズ。んー、困ったなぁということで、CanDoで別物を買ってみたんだけど、、、ハマった。はまりました。
そもそも、焦点距離45mmって何よ?ってことになるわけです。
それで、それがどこに効いてくるか?ってことなんだよね。
んで、まー、とりあえず組んでみたんだけど、GoogleからDLした図面通りに作ると、きちんと見えないですわ。
あとね、工作用紙だと薄すぎてレンズのところがうまくいかないね。レンズは3つ折りの真ん中にポコっとはまるようになっていると思われるので、そこを考えないとダメですね。
ということで、私の後悔リストですが、、、
  • Googleの図面どおりやるなら、焦点距離45mm(前後)のレンズが必須
  • 適当なレンズがない場合は、スマホの画面からレンズまでの距離が焦点距離になるように修正する。
  • 焦点距離の測り方は、室内でレンズを垂直に動かして蛍光灯がばっちりピンが合う高さ(今回は15cmでした)
  • レンズを支える部分はレンズぐらいの厚みのある紙があったほうがいい(つまり、ダンボールだね)
  • レンズの直径がでかい場合は、少なくとも真ん中の紙の穴をレンズと同じサイズにするとすわりがよい
  • それ以外はテキトーでok
  • めんどくさい人にはハコスコに1,000円出す価値があることをお知らせしておきます。
んで、こんなかんじでできました♪
あっ、そうそう、最終的に外箱も工作用紙使ってないんで、工作用紙は買わないほうがいいですよ~っと。

2015年1月8日木曜日

パフォーマンスの比較

気がついてみると、もう一年も経つんですね。
はやいもんですなぁ。
どうりでおっさんになるわけだ。やむをえない。
かなりほったらかしにしていましたが、ヒマをみてぼちぼちとやっていきます。

さて、パフォーマンス比較ですがやっとこさまとめました。
といっても、たいした結果が出たわけではないのですが…
先に言っておくとほとんど変わりがありませんでした。 

時間もあいて前回とは別にまた新たにビルドしたりしましたので、
ここで現状の実験に使った環境を整理しておきます。

比較は3種類で、yoctoのGCCを使ったarmv6, armv6hfとlinaroのarmv6hfです。
linaroはプリビルドのツールチェインではなく、yoctoでビルドされたツールチェインです。
linaroのパッチはあたってるものと信じています(w 

各レイヤのハッシュは下記の通りで、実験時点でのdaisyのHEADです。
実験時点でdizzyも出ているのですが、daisyを使ったのは、
raspberrypiでdizzyのブランチが見つからないためです。
meta
meta-yocto
meta-yocto-bsp = "daisy:9bb6f7f3f00c66abe45e97286323496694ef1609"
meta-raspberrypi = "daisy:946b69299737cc2f1378c864f1b9075280db1b53"
meta-oe
meta-networking = "daisy:d3d14d3fcca7fcde362cf0b31411dc4eea6d20aa"
meta-linaro
meta-linaro-toolchain = "daisy:bc63e777ad2748b8bfa7fa70ffd74700fa21a567"
これで、core-image-satoをビルドしました。
その時のカーネルサイズと展開後のrootfsのトータルサイズをdu -sbで調べたものが下記です。

imagearmv6armv6hflinaro-armv6hf
kernel6,371,5326,371,5326,346,956
rootfs163,050,467162,170,553161,962,637

サイズとしてはそれなりに違いますね。armv6とlinaro-armv6hfとではrootfsで1Mほどサイズが違いますね。

次に、パフォーマンスの比較に使ったのは、lmbenchです。
 今までnbenchでやってきましたが、結果の見方がいまいちよくわからないのと、
コードも古そうなので浮気しましたw
lmbenchもすべてやったわけではなく、下記の表の項目のみです。
networkやdisk ioなどは飛ばしています。


testarmv6armv6hflinaro-armv6hf
integer bit1.461.461.47
integer add1.531.531.53
integer mul7.357.347.35
integer div140.81140.66140.69
integer mod49.0749.1048.98
int64 bit2.942.942.93
uint64 add3.213.203.21
int64 mul14.7014.7314.71
int64 div543.82544.35544.77
int64 mod352.95353.23355.10
float add11.6311.6511.67
float mul11.6211.6411.63
float div27.6827.6527.70
double add11.6411.6611.67
double mul13.1013.1113.11
double div48.0648.1448.13
float bogomflops67.7767.8767.97
double bogomflops89.6389.6789.97
lat_pipe44.6943.6947.07
lat_ctx -s 128k processes 4224.94221.91247.12
lat_sem5.956.386.15
bw_mem 1M rd187.02187.16186,62
bw_mem 1M wr1484.261483.321483.03

結果はそれぞれ3回試行して平均をとってあります。

それなりに傾向が出ているところもあるんですが、
全体的にはほとんど差がないというところかと思います。
hfのほうが若干悪いようにみえるところもありますね。


2014年4月10日木曜日

linaro external toolchainでのビルド (リトライ)

えー、月日の経つのは早いもんですなぁ。
ちょっと忙しいとこれだもんね。ま、やむをえないですが。

久々に、pullしてみると、meta-linaroでeglibc-2.19が追加されていたので、
再度挑戦してみましたっっっ

つっても、やっぱり32bitのhfはチェックしてないみたいで、
前回修正したところがぼろぼろと同じエラーで出てきました。

珍しいことにパッチを残していたので、それを使って直しましたよ~
んで、今回は、linaroのフルビルドとext-linaroとgnu gccとで全部確認がとれましたので、
パッチをサブミットしてみました。
採用されるといいですね。
採用されないと、なんだかなぁなので、一応ここにも貼っておきます。

Subject: [meta-linaro][PATCH] external-linaro-toolchain: Fix for 32bit armhf build

Use ld-linux-armhf.so.3 if call convention hard.
Fix QA issue errors by packaging approprieately.
Add eglibc-locale_2.19.bbappend to fix QA issue error.
  An empty directory is created while do_install.

Signed-off-by: Kazuya Nishimura 
---
 .../conf/distro/include/tcmode-external-linaro.inc |    1 +
 .../eglibc/eglibc-locale_2.19.bbappend             |   23 ++++++++++++
 .../external-linaro-toolchain.bb                   |   38 ++++++++++++++++----
 3 files changed, 56 insertions(+), 6 deletions(-)
 create mode 100755 meta-linaro-toolchain/recipes-core/eglibc/eglibc-locale_2.19.bbappend

diff --git a/meta-linaro-toolchain/conf/distro/include/tcmode-external-linaro.inc b/meta-linaro-toolchain/conf/distro/include/tcmode-external-linaro.inc
index 1d9fd59..26d464c 100644
--- a/meta-linaro-toolchain/conf/distro/include/tcmode-external-linaro.inc
+++ b/meta-linaro-toolchain/conf/distro/include/tcmode-external-linaro.inc
@@ -41,6 +41,7 @@ DISTRO_FEATURES_LIBC = "ipv4 ipv6 libc-backtrace libc-big-macros libc-bsd libc-c
    libc-getlogin libc-idn libc-inet-anl libc-libm libc-libm-big \
    libc-memusage libc-nis libc-nsswitch libc-rcmd libc-rtld-debug libc-spawn libc-streams libc-sunrpc \
    libc-utmp libc-utmpx libc-wordexp libc-posix-clang-wchar libc-posix-regexp libc-posix-regexp-glibc \
+   libc-charsets libc-locales libc-locale-code \
    libc-posix-wchar-io"
 
 ENABLE_BINARY_LOCALE_GENERATION = "0"
diff --git a/meta-linaro-toolchain/recipes-core/eglibc/eglibc-locale_2.19.bbappend b/meta-linaro-toolchain/recipes-core/eglibc/eglibc-locale_2.19.bbappend
new file mode 100755
index 0000000..3e91e74
--- /dev/null
+++ b/meta-linaro-toolchain/recipes-core/eglibc/eglibc-locale_2.19.bbappend
@@ -0,0 +1,23 @@
+do_install () {
+ mkdir -p ${D}${datadir}
+ if [ -n "$(ls ${LOCALETREESRC}/${bindir})" ]; then
+  mkdir -p ${D}${bindir}
+  cp -fpPR ${LOCALETREESRC}/${bindir}/* ${D}${bindir}
+ fi
+ if [ -n "$(ls ${LOCALETREESRC}/${localedir})" ]; then
+  mkdir -p ${D}${localedir}
+  cp -fpPR ${LOCALETREESRC}/${localedir}/* ${D}${localedir}
+ fi
+ if [ -e ${LOCALETREESRC}/${libdir}/gconv ]; then
+  mkdir -p ${D}${libdir}
+  cp -fpPR ${LOCALETREESRC}/${libdir}/gconv ${D}${libdir}
+ fi
+ if [ -e ${LOCALETREESRC}/${datadir}/i18n ]; then
+  cp -fpPR ${LOCALETREESRC}/${datadir}/i18n ${D}${datadir}
+ fi
+ if [ -e ${LOCALETREESRC}/${datadir}/locale ]; then
+  cp -fpPR ${LOCALETREESRC}/${datadir}/locale ${D}${datadir}
+ fi
+ chown root.root -R ${D}
+ cp -fpPR ${LOCALETREESRC}/SUPPORTED ${WORKDIR}
+}
diff --git a/meta-linaro-toolchain/recipes-devtools/external-linaro-toolchain/external-linaro-toolchain.bb b/meta-linaro-toolchain/recipes-devtools/external-linaro-toolchain/external-linaro-toolchain.bb
index 240d550..47fd4ca 100644
--- a/meta-linaro-toolchain/recipes-devtools/external-linaro-toolchain/external-linaro-toolchain.bb
+++ b/meta-linaro-toolchain/recipes-devtools/external-linaro-toolchain/external-linaro-toolchain.bb
@@ -41,6 +41,12 @@ PROVIDES += "\
  libitm \
  libitm-dev \
  libitm-staticdev \
+ libasan \
+ libasan-dev \
+ libasan-staticdev \
+ libatomic \
+ libatomic-dev \
+ libatomic-staticdev \
  virtual/linux-libc-headers \
 "
 
@@ -50,12 +56,11 @@ PR = "r2"
 # https://launchpad.net/linaro-toolchain-binaries
 SRC_URI = "file://SUPPORTED"
 
+LDLINUX32 = "${@base_contains("TUNE_FEATURES", "callconvention-hard", "ld-linux-armhf.so.3", "ld-linux.so.3",d)}"
+
 do_install() {
  install -d ${D}${base_libdir}
- install -d ${D}${bindir}
- install -d ${D}${sbindir}
  install -d ${D}${libdir}
- install -d ${D}${libexecdir}
  install -d ${D}${datadir}
  install -d ${D}${includedir}
 
@@ -79,7 +84,7 @@ do_install() {
  fi
 
  # fix up the copied symlinks (they are still pointing to the multiarch directory)
- linker_name="${@base_contains("TUNE_FEATURES", "aarch64", "ld-linux-aarch64.so.1", "ld-linux.so.3",d)}"
+ linker_name="${@base_contains("TUNE_FEATURES", "aarch64", "ld-linux-aarch64.so.1", "${LDLINUX32}",d)}"
  ln -sf ld-${ELT_VER_LIBC}.so ${D}${base_libdir}/${linker_name}
  ln -sf ../../lib/libnsl.so.1 ${D}${libdir}/libnsl.so
  ln -sf ../../lib/librt.so.1 ${D}${libdir}/librt.so
@@ -144,6 +149,12 @@ PACKAGES =+ "\
  libitm \
  libitm-dev \
  libitm-staticdev \
+ libasan \
+ libasan-dev \
+ libasan-staticdev \
+ libatomic \
+ libatomic-dev \
+ libatomic-staticdev \
 "
 
 INSANE_SKIP_${PN}-dbg = "staticdev"
@@ -282,14 +293,16 @@ FILES_libssp-staticdev = " \
 
 FILES_libgfortran = "${base_libdir}/libgfortran.so.*"
 FILES_libgfortran-dev = " \
-  ${base_libdir}/libgfortran.so"
+  ${base_libdir}/libgfortran.so \
+  ${base_libdir}/libgfortran.spec"
 FILES_libgfortran-staticdev = " \
   ${base_libdir}/libgfortran.a \
   ${base_libdir}/libgfortranbegin.a"
 
 FILES_libmudflap = "${base_libdir}/libmudflap*.so.*"
 FILES_libmudflap-dev = "\
-  ${base_libdir}/libmudflap*.so \
+  ${base_libdir}/libmudflap*.so"
+FILES_libmudflap-staticdev = "\
   ${base_libdir}/libmudflap*.a \
   ${base_libdir}/libmudflap*.la"
 
@@ -313,6 +326,19 @@ FILES_libgomp-dev = "\
 FILES_libgomp-staticdev = "\
   ${base_libdir}/libgomp*.a \
   "
+
+FILES_libasan = "\
+  ${base_libdir}/libasan.so.* \
+  "
+FILES_libasan-dev = "\
+  ${base_libdir}/libasan.so \
+  "
+FILES_libatomic ="\
+  ${base_libdir}/libatomic.so.* \
+  "
+FILES_libatomic-dev = "\
+  ${base_libdir}/libatomic.so \
+  "
 ELT_VER_MAIN ??= ""
 
 python () {
-- 
1.7.9.5


それで、そのほかのconfigurationですが、
local.confにこんなかんじで追加します。
EXTERNAL_TOOLCHAIN = "/home/knishimu/workplace/gcc-linaro-arm-linux-gnueabihf-4.8-2013.10_linux"
TCMODE = "external-linaro"

TUNE_CCARGS += "-marm"

EXTERNAL_TOOLCHAINはlinaroのtoolchainをインストールしたパスです。
TUNE_CCARGSはこれをつけないと、thumbでビルドしようとしてエラーになったりするので必要でした。

ではでは~

2014年3月14日金曜日

linaro external toolchainでのビルド(中断)

えー、前回のlinaroのtoolchainからビルドするのに続いて、
ビルド済みのバイナリを使ってyoctoをビルドする方法を
トライしていたんですが、結果的に中断することにしました。
(こっちのほうが簡単にできるとおもってたんだけどねっっ)

一応、ごちゃごちゃやるとできたんですが、
最終的にきれいにならないため、
Linaro側で対応されるまで待とうという感じになりました。

もう少し直接的な理由を書くと、external-linaro-toolchainとセットで、
eglibcのbbappendが提供されているんですが、それが今は2.18のものしかありません。
yoctoのマスターブランチは2.19に移っているんですが、
Linaroはまだ2.19をビルドしたバイナリをリリースしていないようです。
2.18を2.19と偽ってビルドするとうまくいくんですが、
(external-linaro-toolchain.bbも結構変更必要ですが。。。)
そうすると、今度は前回成功したtoolchainからビルドするほうが
うまくいかなくなったりします。

それと、下記のメールスレッドを見つけたので、
一応、Linaro側で対応するのを待とうかなという気になりました。

https://www.mail-archive.com/linaro-toolchain@lists.linaro.org/msg03980.html

ま、やむをえないですな。
とりあえず、前回のやつでできたバイナリを評価しようかと思います。
どうかなぁ?

2014年3月2日日曜日

Linaroのtoolchainを使う(ソースビルド)

先日のヤクト勉強会にて、Linaroのツールの話がありまして、
LinaroのGCCを使うと、早いしコードも小さいしいいことだらけですよ
ということでしたので、それならばさっそく使ってみましょう
というエントリです。

yoctoにはlinaroのレイヤも存在していまして、
Linaroのwikiにもビルドの仕方が紹介されていますので、
基本的にはそれをなぞるだけです。

まずは、meta-linaroをクローンしてきます。
meta-openembeddedも必要です。
$ git clone git://git.linaro.org/openembedded/meta-linaro.git
$ git clone git://git.openembedded.org/meta-openembedded

ビルドディレクトリを作成したら、bblayersに下記のレイヤを追加します。
$ source poky/oe-initi-build-env build_dir
$ vi conf/bblayers.conf
BBLAYERS ?= " \
...
  /home/knishimu/workplace/raspi/poky/meta-openembedded/meta-networking \
  /home/knishimu/workplace/raspi/poky/meta-linaro/meta-linaro \
  /home/knishimu/workplace/raspi/poky/meta-linaro/meta-linaro-toolchain \
  "
...

meta-networkingがないと、networking-layerがないとかいうわかりにくいエラーが出ます。
meta-networkingがないって出してくれればいいのにと思うんですが、
まぁ、やむをえないですねぇ。

次に、local.confでlinaroのツールを指定します。
現在のmasterブランチでは、linaro-4.8しかレシピがありません。
昔のブランチでは、4.7などほかのバージョンのレシピも存在しています
DEFAULTTUNEは好みですが、armv6hf, arm1176jzfshfともにビルドできました。
$ vi conf/local.conf
...
GCCVERSION = "linaro-4.8"
SDKGCCVERSION = "linaro-4.8"
PREFERRED_PROVIDER_eglibc = "eglibc"

#DEFAULTTUNE_raspberrypi = "arm1176jzfshf"
DEFAULTTUNE_raspberrypi = "armv6hf"
...

とりあえず、これでビルドはできました。
これとは別に、ビルド済みのツールチェインを使ってビルドする方法も
ありますが、こちらはまた別の機会で。

https://wiki.linaro.org/KenWerner/Sandbox/OpenEmbedded-Core

2014年2月24日月曜日

Yoctoはヤクト

先日(2014.2.22)Yocto Japanの勉強会に行ってきました。
こういうのってあまり参加しないんですが、(特に有志でやってるやつは)
参加無料なのに、なかなかの充実ぶりでした。
休みをつぶして行った甲斐がありました。

せっかく参加したので、raspberrypi+yoctoというタイトルで話をしてきました。
内容がどうだったかわかりませんが、
少なくとも、Legoのケースは好評だったようで、よかったです。

あと、Yoctoは外国人の発音は「ヤクト」だということらしいので
今後は「ヤクト」の発音を広めることに決定しました~~~。

IT系の単語は読み方がよくわかんないものが多いですよね。

2014年2月17日月曜日

WiFiドングルの設定

やっぱりWiFiははずせないでしょうということで、
WiFiドングルの設定をしました。
raspbianとかでは、ほとんどそのまま使えるようですね。
yoctoでは一手間かかりました。

使ったものは、BUFFALO WLI-UC-GNMです。
アクセスポイントにはiPhone5を使ってます。
いろいろと実績がありそうなところで決定しました

ドライバが対応していれば、設定なしで使えるはずなんで、
とりあえず、さしてみました。とりゃ。
[  254.840065] usb 1-1.2: new high-speed USB device number 4 using dwc_otg
[  254.976531] usb 1-1.2: New USB device found, idVendor=0411, idProduct=01a2
[  254.983961] usb 1-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[  254.991775] usb 1-1.2: Product: 802.11 n WLAN
[  254.996185] usb 1-1.2: Manufacturer: Ralink
[  255.000948] usb 1-1.2: SerialNumber: 1.0
[  255.068465] cfg80211: Calling CRDA to update world regulatory domain
[  255.240003] usb 1-1.2: reset high-speed USB device number 4 using dwc_otg
[  255.369540] ieee80211 phy0: rt2x00_set_rt: Info - RT chipset 3070, rev 0201 detected
[  255.407904] ieee80211 phy0: rt2x00_set_rf: Info - RF chipset 0005 detected
[  255.435535] ieee80211 phy0: Selected rate control algorithm 'minstrel_ht'
[  255.463714] usbcore: registered new interface driver rt2800usb
あっ、いけそうじゃないですか?みたいな。
ちょっと、起こしてみると。
root@raspberrypi:~# ifconfig wlan0 up
ifconfig: SIOCSIFFLAGS: No such file or directory

[   45.356373] ieee80211 phy0: rt2x00lib_request_firmware: Info - Loading firmware file 'rt2870.bin'
[   45.372666] ieee80211 phy0: rt2x00lib_request_firmware: Error - Failed to request Firmware
あー、ファームウェアがないですね。
つーか、そんなもんどこから?みたいな。

途中格闘しましたが、結果的にはyoctoにすでにありました。
個別に手動で入れるにはこんなかんじです。
まず、ビルドして、
$ bitbake linux-firmware
...
$ ls tmp/deploy/rpm/all/|grep linux-firmware-ralink
linux-firmware-ralink-0.0+git0+600caefd83-r0.all.rpm
ターゲットでインストールします。
root@raspberrypi:~# rpm -ivh ./linux-firmware-ralink-0.0\+git0\+600caefd83-r0.all.rpm
Preparing...                ########################################### [100%]
   1:linux-firmware-ralink  ########################################### [100%]
root@raspberrypi:~#

次に設定なんですが、、、ここでもひともんちゃくありまして。
いまだによくわからないんですが、、、
どうやらconnmanと/etc/network/interfacesの設定がぶつかっているようで、
どっちかにしないとうまくいかないです。やむをえない。

ということで、まず、古き良き設定から。
とりあえず、connmanを止めます。
root@raspberrypi:~# mv /etc/rc5.d/S05connman /etc/rc5.d/K05connman
そして、wpa_supplicant.confをバックアップを取ってから、
パスフレーズを設定します。
root@raspberrypi:~# mv /etc/wpa_supplicant.conf /etc/wpa_supplicant.conf.orig
root@raspberrypi:~# wpa_passphrase my_access_point passphrase > /etc/wpa_supplicant.conf
バックグラウンドモードで動かしますが、
うまくいかないときは-Bをとってエラーログをみると吉かもしれません。
root@raspberrypi:~# wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant.conf
Successfully initialized wpa_supplicant
そのあと、udhcpcを動かして、ip addressが取れれば成功です。
root@raspberrypi:~# udhcpc -i wlan0
udhcpc (v1.21.1) started
Sending discover...
Sending discover...
Sending discover...
Sending select for 172.20.10.5...
Lease of 172.20.10.5 obtained, lease time 85536
これを自動化するには、/etc/network/interfacesに書けばいいんですが、
デフォルトである程度書いてあります。
root@raspberrypi:~# vi /etc/network/interfaces
...
# Wireless interfaces
iface wlan0 inet dhcp
        wireless_mode managed
        wireless_essid any
        wpa-driver wext
        wpa-conf /etc/wpa_supplicant.conf
...
ので、あとは、auto wlan0ぐらいを足しましょう。

次は、connmanの場合です。
connmanの設定には、connmanctlというツールが必要になりました。
core-image-satoでは、すでにビルドされていると思いますが、
インストールされていませんので、、
root@raspberrypi:~# rpm -ivh connman-client-1.20-r0.armv6_vfp.rpm
Preparing...                ########################################### [100%]
   1:connman-client         ########################################### [100%]
root@raspberrypi:~#
あとは、connmanctlを使って設定していきます。
root@raspberrypi:~# connmanctl
connmanctl> enable wifi
Enabled wifi
connmanctl> scan wifi
Scan completed for wifi
connmanctl> services
*AO Wired                ethernet_b827ebe52c77_cable
    my_access_point      wifi_b0c745ab05e6_4e6973692d6970686f6e65_managed_psk
    logitec2nd66         wifi_b0c745ab05e6_6c6f6769746563326e643636_managed_wep
    AP0034862080         wifi_b0c745ab05e6_415030303334383632303830_managed_psk
    AP1034862080         wifi_b0c745ab05e6_415031303334383632303830_managed_psk
    AP2034862080         wifi_b0c745ab05e6_415032303334383632303830_managed_psk
    AiMacExtreme         wifi_b0c745ab05e6_41694d616345787472656d65_managed_psk
    logitec66            wifi_b0c745ab05e6_6c6f67697465633636_managed_psk
connmanctl> agent on
Agent registered
connmanctl> connect wifi_b0c745ab05e6_4e6973692d6970686f6e65_managed_psk
  Passphrase = [ Type=psk, Requirement=mandatory ]
  Passphrase?  
ここらへんの設定は、/var/lib/connman/の下に作られるみたいですが、
手動で編集は厳しそうな感じでした。
そして、/etc/network/interfacesの
auto eth0
auto wlan0
あたりを無効にしておくと良いようです。 あ、あと、さっき/etc/rc5.d/K05connmanにした人は
S05connmanに戻しておいてくださいね。

とまぁ、こんなかんじなんですが、、、
イマイチなんか不安定なんですよね。
USBの電力不足(HUBとマウスとキーボードがささってます)なんですかねぇ?
やむを得ないんでしょうけど。

参考:
http://elinux.org/RPi_USB_Wi-Fi_Adapters
http://www.linux.com/learn/tutorials/374514-control-wireless-on-the-linux-desktop-with-these-tools
https://wiki.archlinux.org/index.php/Connman

LEGOブロックケース

なんか、少しアップデートしていないとあっと言う間ですよねぇ。
月日が立つのが早いというか、筆不精というか。

今回は、久々のわりに小ネタから。
raspberrypi用にLEGOブロックでケース作ってる人は結構いるみたいですが、
私も作ってみましたよ~


LEGOのブロックは、13x9で縦が少し動く感じです。
なんかスペーサ的なものをかますといいかもしれません。
こうやってケース作ると結構大きくなっちゃうんですよね。
そういう意味では、市販のケースを買うほうがいいかもしれません

上に載ってるのは、USBハブです。
ちょうどいいのがみつかったので、買っちゃいました。
ELECOM USB2.0HUB ToyBrick U2H-BL48GN

2014年2月4日火曜日

smartでスマートに?

パッケージをいろいろと出し入れしていると、
そのうちひとつづつコピーしてはインストールして、、、
という作業がめんどくさくなってきます。
依存関係を手動で解決するのもめんどくさいですし。
そこで、パッケージ管理ツールを導入したくなるのが順当かと思います。

Yoctoでは、パッケージ管理としてsmartが標準ということになっているようです。
これは、pythonのフロントエンドで、パッケージ自体はRPMでもIPKでもいいようです。
デフォルトのlocal.confではRPMになっていますので、
(個人的にもRPMのほうが慣れているので)
RPMで進めていきます。

まずは、ビルドマシンで作成したパッケージ群をターゲットからアクセスできるようにします。
Apache2で公開するには、下記のようにすればOKです。
$ sudo vi /etc/apache2/sites-available/default
...
     Alias /repo_raspi/ "/home/knishimu/workplace/yocto/build_raspi_hf/tmp/deploy/rpm/"
     <Directory "/home/knishimu/workplace/yocto/build_raspi_hf/tmp/deploy/rpm/">
         Options Indexes MultiViews FollowSymLinks
         AllowOverride None
         Order deny,allow
         Allow from all
     </Directory>
...
apache2の細かい設定やらは、グーグル先生に聞いて下さい。

んで、下記のようにターゲットからアクセスすれば、ネットワーク越しにインストールができます。
root@raspberrypi:~# smart install http://hostname/repo_raspi/arm1176jzfshf_vfp/bootchart-1.16-r1.arm1176jzfshf_vfp.rpm


Fetching packages...
-> http://hostname/repo_raspi/.../bootchart-1.16-r1.arm1176jzfshf_vfp.rpm
bootchart-1.16-r1.arm1176jzfs.. ######################################## [100%]

Loading cache...
Updating cache...               ######################################## [100%]

Computing transaction...
Saving cache...

root@raspberrypi:~#
とりあえず、アクセスできましたが、まだあまり改善されてないですよね。
ということで、リポジトリ内のパッケージ検索とかをできるようにします。
ビルドしたディレクトリはパッケージのアーキテクチャ依存によって、
all/arm1176jzfshf/raspberrypiのように3つにわかれていると思いますので
下記のように3つのチャンネルを登録します。
root@raspberrypi:~# smart channel --add all type=rpm-md baseurl="http://hostname/repo_raspi/all"

Alias: all
Type: rpm-md
Base URL: http://hostname/repo_raspi/all

Include this channel? (y/N): y


root@raspberrypi:~# smart channel --add arm1176jzfshf_vfp type=rpm-md baseurl="http://hostname/repo_raspi/arm1176jzfshf_vfp"

Alias: arm1176jzfshf_vfp
Type: rpm-md
Base URL: http://hostname/repo_raspi/arm1176jzfshf_vfp

Include this channel? (y/N): y


root@raspberrypi:~# smart channel --add raspberrypi type=rpm-md baseurl="http://hostname/repo_raspi/raspberrypi"

Alias: raspberrypi
Type: rpm-md
Base URL: http://hostname/repo_raspi/raspberrypi

Include this channel? (y/N): y

そして、アップデートをかけると、repodataからパッケージ情報を拾ってきます。
root@raspberrypi:~# smart update
Updating cache...               ######################################## [100%]

Fetching information for 'raspberrypi'...
-> http://hostname/repo_raspi/raspberrypi/repodata/repomd.xml
repomd.xml                      ######################################## [ 16%]
-> http://hostname/repo_raspi/raspberrypi/repodata/primary.xml.gz
primary.xml.gz                  ######################################## [ 25%]
-> http://hostname/repo_raspi/raspberrypi/repodata/filelists.xml.gz
filelists.xml.gz                ######################################## [ 33%]

Fetching information for 'arm1176jzfshf_vfp'...
-> http://hostname/repo_raspi/arm1176jzfshf_vfp/repodata/repomd.xml
repomd.xml                      ######################################## [ 50%]
-> http://hostname/repo_raspi/arm1176jzfshf_vfp/repodata/primary.xml.gz
-> http://hostname/repo_raspi/arm1176jzfshf_vfp/repodata/filelists.xml.gz
filelists.xml.gz                ######################################## [ 58%]
primary.xml.gz                  ######################################## [ 66%]

Fetching information for 'all'...
-> http://hostname/repo_raspi/all/repodata/repomd.xml
repomd.xml                      ######################################## [ 83%]
-> http://hostname/repo_raspi/all/repodata/primary.xml.gz
primary.xml.gz                  ######################################## [ 91%]
-> http://hostname/repo_raspi/all/repodata/filelists.xml.gz
filelists.xml.gz                ######################################## [100%]

Updating cache...               ######################################## [100%]

Channels have 4772 new packages.
Saving cache...

root@raspberrypi:~#
ここで、試しにcurlをインストールしてみたいと思います。
rpmコマンドで確認してみると、まだターゲットのroot fsにはないようです。
root@raspberrypi:~# rpm -qa|grep curl
root@raspberrypi:~#

smartでリポジトリを検索してみると、見つかります。
root@raspberrypi:~# smart search curl
Loading cache...
Updating cache...               ######################################## [100%]

curl - Command line tool and library for client-side URL transfers
curl-dbg - Command line tool and library for client-side URL transfers - Debugging files
curl-dev - Command line tool and library for client-side URL transfers - Development files
curl-doc - Command line tool and library for client-side URL transfers - Documentation files
gst-plugins-bad-curl - GStreamer plugin for curl
gst-plugins-bad-curl-dev - GStreamer plugin for curl (development files)
libcurl-dev - Command line tool and library for client-side URL transfers
libcurl-doc - Command line tool and library for client-side URL transfers
libcurl-staticdev - Command line tool and library for client-side URL transfers
libcurl5 - Command line tool and library for client-side URL transfers


root@raspberrypi:~#
これをインストールします。
root@raspberrypi:~# smart install curl
Loading cache...
Updating cache...               ######################################## [100%]

Computing transaction...

Installing packages (2):
  curl-7.34.0-r0@arm1176jzfshf_vfp       libcurl5-7.34.0-r0@arm1176jzfshf_vfp

248.9kB of package files are needed. 423.8kB will be used.

Confirm changes? (Y/n): Y

Fetching packages...
-> http://hostname/repo_raspi/.../curl-7.34.0-r0.arm1176jzfshf_vfp.rpm
curl-7.34.0-r0.arm1176jzfshf_.. ######################################## [ 50%]
-> http://hostname/repo_raspi/.../libcurl5-7.34.0-r0.arm1176jzfshf_vfp.rpm
libcurl5-7.34.0-r0.arm1176jzf.. ######################################## [100%]


Committing transaction...
Preparing...                    ######################################## [  0%]
   1:Installing libcurl5        ######################################## [ 50%]
   2:Installing curl            ######################################## [100%]


root@raspberrypi:~#
依存関係にあるlibcurl5も同時にインストールされました。
念の為にRPMコマンドで確認してみると、見つかりました。
root@raspberrypi:~# rpm -qa|grep curl
libcurl5-7.34.0-r0.arm1176jzfshf_vfp
curl-7.34.0-r0.arm1176jzfshf_vfp
root@raspberrypi:~#
次に、新しいパッケージをビルドして、追加してみます。
あまり依存関係のないiozone3あたりで試します。
ビルドしてから、パッケージを確認してみると、、、
root@raspberrypi:~# bitbake iozone3
...
root@raspberrypi:~# smart search iozone3
Loading cache...
Updating cache...               ######################################## [100%]



root@raspberrypi:~#
見つかりません。
これは、リポジトリのrepodataが更新されていないためです。
yoctoでは、rootfsをビルドするときにrepodataも更新しているのですが、
新しいパッケージをテストするためにビルドするたびに
いちいちrootfsをビルドしていてはたまらないですね。

repodataだけなら、ホストのコマンド(createrepo)でアップデートできます。
sysrootにもありますが、apt-get等でホストにインストールしてしまってもいいです。
# sudo apt-get isntall createrepo
...
# createrepo --update tmp/deploy/rpm/arm1176jzfshf_vfp
これで、repodataが更新されましたので、ターゲット側でもデータベースを更新すれば
パッケージが見つかるようになります。
root@raspberrypi:~# smart update
Loading cache...
Updating cache...               ######################################## [100%]

Fetching information for 'raspberrypi'...
-> http://hostname/repo_raspi/raspberrypi/repodata/repomd.xml
repomd.xml                      ######################################## [ 16%]

Fetching information for 'arm1176jzfshf_vfp'...
-> http://hostname/repo_raspi/arm1176jzfshf_vfp/repodata/repomd.xml
repomd.xml                      ######################################## [ 41%]
-> http://hostname/repo_raspi/arm1176jzfshf_vfp/repodata/primary.xml.gz
-> http://hostname/repo_raspi/arm1176jzfshf_vfp/repodata/filelists.xml.gz
filelists.xml.gz                ######################################## [ 50%]
primary.xml.gz                  ######################################## [ 58%]

Fetching information for 'all'...
-> http://hostname/repo_raspi/all/repodata/repomd.xml
repomd.xml                      ######################################## [ 75%]

Updating cache...               ######################################## [100%]

Channels have 13 new packages.
Saving cache...

root@raspberrypi:~#
root@raspberrypi:~# smart search iozone3
Loading cache...
Updating cache...               ######################################## [100%]

iozone3 - iozone3 version 263-r0
iozone3-dbg - iozone3 version 263-r0 - Debugging files
iozone3-dev - iozone3 version 263-r0 - Development files
iozone3-doc - iozone3 version 263-r0 - Documentation files


root@raspberrypi:~#
スマートですか?スマートじゃないですか?
ま、パッケージマネージャ周りは論争が絶えないところですから、
いろんなご意見があるのは、やむをえないかなぁと思います。

参考:

2014年1月30日木曜日

nbenchの結果

raspberrypi typeB
Broadcom BCM2835 700MHz
-march=armv6 -mfloat-abi=softfp
TEST                : Iterations/sec.  : Old Index   : New Index
                    :                  : Pentium 90* : AMD K6/233*
--------------------:------------------:-------------:------------
NUMERIC SORT        :          183.39  :       4.70  :       1.54
STRING SORT         :          28.702  :      12.82  :       1.99
BITFIELD            :       8.285e+07  :      14.21  :       2.97
FP EMULATION        :          28.362  :      13.61  :       3.14
FOURIER             :          1666.1  :       1.89  :       1.06
ASSIGNMENT          :          2.4692  :       9.40  :       2.44
IDEA                :          674.45  :      10.32  :       3.06
HUFFMAN             :          409.25  :      11.35  :       3.62
NEURAL NET          :           2.669  :       4.29  :       1.80
LU DECOMPOSITION    :          78.084  :       4.05  :       2.92
==========================ORIGINAL BYTEMARK RESULTS==========================
INTEGER INDEX       : 10.363
FLOATING-POINT INDEX: 3.203
Baseline (MSDOS*)   : Pentium* 90, 256 KB L2-cache, Watcom* compiler 10.0
==============================LINUX DATA BELOW===============================
CPU                 : ARMv6-compatible processor rev 7 (v6l)
L2 Cache            :
OS                  : Linux 3.10.26
C compiler          : arm-poky-linux-gnueabi-gcc
libc                : static
MEMORY INDEX        : 2.431
INTEGER INDEX       : 2.709
FLOATING-POINT INDEX: 1.776
raspberrypi typeB
Broadcom BCM2835 700MHz
-march=armv6 -mfloat-abi=softfp
TEST                : Iterations/sec.  : Old Index   : New Index
                    :                  : Pentium 90* : AMD K6/233*
--------------------:------------------:-------------:------------
NUMERIC SORT        :          181.17  :       4.65  :       1.53
STRING SORT         :          28.649  :      12.80  :       1.98
BITFIELD            :       8.258e+07  :      14.17  :       2.96
FP EMULATION        :          28.313  :      13.59  :       3.13
FOURIER             :          1715.7  :       1.95  :       1.10
ASSIGNMENT          :          2.3544  :       8.96  :       2.32
IDEA                :          674.69  :      10.32  :       3.06
HUFFMAN             :          408.83  :      11.34  :       3.62
NEURAL NET          :           2.663  :       4.28  :       1.80
LU DECOMPOSITION    :          78.571  :       4.07  :       2.94
==========================ORIGINAL BYTEMARK RESULTS==========================
INTEGER INDEX       : 10.264
FLOATING-POINT INDEX: 3.239
Baseline (MSDOS*)   : Pentium* 90, 256 KB L2-cache, Watcom* compiler 10.0
==============================LINUX DATA BELOW===============================
CPU                 : ARMv6-compatible processor rev 7 (v6l)
L2 Cache            :
OS                  : Linux 3.12.7
C compiler          : arm-poky-linux-gnueabi-gcc
libc                : static
MEMORY INDEX        : 2.388
INTEGER INDEX       : 2.699
FLOATING-POINT INDEX: 1.796
raspberrypi typeB
Broadcom BCM2835 1GHz
-march=armv6 -mfloat-abi=softfp
TEST                : Iterations/sec.  : Old Index   : New Index
                    :                  : Pentium 90* : AMD K6/233*
--------------------:------------------:-------------:------------
NUMERIC SORT        :          270.84  :       6.95  :       2.28
STRING SORT         :          41.411  :      18.50  :       2.86
BITFIELD            :      1.1971e+08  :      20.54  :       4.29
FP EMULATION        :          40.952  :      19.65  :       4.53
FOURIER             :          2524.8  :       2.87  :       1.61
ASSIGNMENT          :           3.921  :      14.92  :       3.87
IDEA                :          973.99  :      14.90  :       4.42
HUFFMAN             :          591.91  :      16.41  :       5.24
NEURAL NET          :          3.9623  :       6.37  :       2.68
LU DECOMPOSITION    :           127.1  :       6.58  :       4.75
==========================ORIGINAL BYTEMARK RESULTS==========================
INTEGER INDEX       : 15.220
FLOATING-POINT INDEX: 4.937
Baseline (MSDOS*)   : Pentium* 90, 256 KB L2-cache, Watcom* compiler 10.0
==============================LINUX DATA BELOW===============================
CPU                 : ARMv6-compatible processor rev 7 (v6l)
L2 Cache            :
OS                  : Linux 3.10.26
C compiler          : arm-poky-linux-gnueabi-gcc
libc                : static
MEMORY INDEX        : 3.623
INTEGER INDEX       : 3.935
FLOATING-POINT INDEX: 2.738
raspberrypi typeB
Broadcom BCM2835 700MHz
-march=armv6 -mfloat-abi=hard -mtune=arm1176jzf-s -mfpu=vfp
TEST                : Iterations/sec.  : Old Index   : New Index
                    :                  : Pentium 90* : AMD K6/233*
--------------------:------------------:-------------:------------
NUMERIC SORT        :          193.66  :       4.97  :       1.63
STRING SORT         :          28.629  :      12.79  :       1.98
BITFIELD            :      6.6561e+07  :      11.42  :       2.38
FP EMULATION        :           27.05  :      12.98  :       3.00
FOURIER             :          1820.1  :       2.07  :       1.16
ASSIGNMENT          :          2.4992  :       9.51  :       2.47
IDEA                :          671.34  :      10.27  :       3.05
HUFFMAN             :          405.55  :      11.25  :       3.59
NEURAL NET          :          2.7578  :       4.43  :       1.86
LU DECOMPOSITION    :          76.585  :       3.97  :       2.86
==========================ORIGINAL BYTEMARK RESULTS==========================
INTEGER INDEX       : 10.048
FLOATING-POINT INDEX: 3.314
Baseline (MSDOS*)   : Pentium* 90, 256 KB L2-cache, Watcom* compiler 10.0
==============================LINUX DATA BELOW===============================
CPU                 : ARMv6-compatible processor rev 7 (v6l)
L2 Cache            :
OS                  : Linux 3.12.7
C compiler          : arm-poky-linux-gnueabi-gcc
libc                : static
MEMORY INDEX        : 2.267
INTEGER INDEX       : 2.704
FLOATING-POINT INDEX: 1.838
raspberrypi typeB
Broadcom BCM2835 1GHz
-march=armv6 -mfloat-abi=hard -mtune=arm1176jzf-s -mfpu=vfp
TEST                : Iterations/sec.  : Old Index   : New Index
                    :                  : Pentium 90* : AMD K6/233*
--------------------:------------------:-------------:------------
NUMERIC SORT        :          285.91  :       7.33  :       2.41
STRING SORT         :          41.357  :      18.48  :       2.86
BITFIELD            :      9.6061e+07  :      16.48  :       3.44
FP EMULATION        :          39.045  :      18.74  :       4.32
FOURIER             :          2717.7  :       3.09  :       1.74
ASSIGNMENT          :          3.7566  :      14.29  :       3.71
IDEA                :          970.39  :      14.84  :       4.41
HUFFMAN             :          587.35  :      16.29  :       5.20
NEURAL NET          :          4.1006  :       6.59  :       2.77
LU DECOMPOSITION    :          125.94  :       6.52  :       4.71
==========================ORIGINAL BYTEMARK RESULTS==========================
INTEGER INDEX       : 14.646
FLOATING-POINT INDEX: 5.102
Baseline (MSDOS*)   : Pentium* 90, 256 KB L2-cache, Watcom* compiler 10.0
==============================LINUX DATA BELOW===============================
CPU                 : ARMv6-compatible processor rev 7 (v6l)
L2 Cache            :
OS                  : Linux 3.12.7
C compiler          : arm-poky-linux-gnueabi-gcc
libc                : static
MEMORY INDEX        : 3.317
INTEGER INDEX       : 3.930
FLOATING-POINT INDEX: 2.830

hardfpビルド

nbenchがらみでいろいろ見ていますと、
raspberrypiのフォーラムでも結構その手の投稿があります。
そこらへんを見ていると、Debianなどはhardfpのライブラリに変えているようですね。
ひるがえって、yoctoのmeta-raspberrypiの方を見てみますと、softfpでビルドされているようです。
ここらへんに、その設定があります。
meta-raspberrypi/conf/machine/
├── include
│   ├── rpi-default-providers.inc
│   ├── rpi-default-settings.inc
│   ├── rpi-default-versions.inc
│   └── tune-arm1176jzf-s.inc
└── raspberrypi.conf
この中で、tune-arm1176jzf-s.incを見てみますと、
DEFAULTTUNE ?= "armv6"
ここで、デフォルトではarmv6の設定でビルドされることが決まっています。
この値は、local.confなどでオーバーライドするとよさそうです。
require conf/machine/include/arm/arch-armv6.inc
arch-armv6.incでarmv6のビルドオプションが決められていますが、
このファイル自体は、poky/meta/とpoky/openembedded-core/meta/の2箇所で見つかります。
diffで見たところ、(今のところ)違いはないようです。
私のbblayers.confではopenembedded-coreの方にはパス(レイヤ?)を通していないので
おそらくpoky/meta/conf/machine/include/arm/arch-armv6.incの方が
使われていると思われます。
そのarch-armv6.incを見てみますと、ごちゃごちゃしているので関係するところで、
AVAILTUNES += "armv6-novfp armv6t-novfp armv6 armv6t armv6hf armv6thf"
どうやら使えるのは、こんなかんじのようです。
hfはhardfp, tはthumb, novfpはvfpなしということのようです。
なので、armv6hfあたりにすると、よさそうですね。

tune-arm1176jzf-s.incの方に戻って、続きを見てみますと、
TUNEVALID[arm1176jzfs] = "Enable arm1176jzfs specific processor optimizations"
TUNE_CCARGS += "${@bb.utils.contains("TUNE_FEATURES", "arm1176jzfs", "-mtune=arm1176jzf-s", "", d)}"

AVAILTUNES += "arm1176jzfs"
TUNE_FEATURES_tune-arm1176jzfs = "${TUNE_FEATURES_tune-armv6} arm1176jzfs"
ARMPKGARCH_tune-arm1176jzfs = "arm1176jzfs"
PACKAGE_EXTRA_ARCHS_tune-arm1176jzfs = "${PACKAGE_EXTRA_ARCHS_tune-armv6}"
ここらへんは、arm1176jzfsというタイプを新たに宣言して、
arm1176jzfsだったら、-mtune=arm1176jzf-sを追加するということのようです。

なので、とりあえずこのままhardfpにするだけならば、
local.confで
DEFAULTTUNE = armv6hf
にしてやれば、いいようです。

実際のビルドオプションをビルドログから拾ってみますと、
armv6
  -march=armv6 -mfloat-abi=softfp
armv6hf
  -march=armv6 -mfloat-abi=hard
となっていました。(関係するところだけ)
まぁ、これでもいいんですが、せっかくなんでmfpuとかmtuneとか
つけたくなるのはやむをえないところでしょうか。
ということで、元からあるarm1176jzfsを拡張して
arm1176jzfshfを作ってみました。(みにくい。。。)
diff --git a/conf/machine/include/tune-arm1176jzf-s.inc b/conf/machine/include/tune-arm1176jzf-s.inc
old mode 100644
new mode 100755
index ebad588..194c622
--- a/conf/machine/include/tune-arm1176jzf-s.inc
+++ b/conf/machine/include/tune-arm1176jzf-s.inc
@@ -4,8 +4,14 @@ require conf/machine/include/arm/arch-armv6.inc
 
 TUNEVALID[arm1176jzfs] = "Enable arm1176jzfs specific processor optimizations"
 TUNE_CCARGS += "${@bb.utils.contains("TUNE_FEATURES", "arm1176jzfs", "-mtune=arm1176jzf-s", "", d)}"
+TUNE_CCARGS += "${@bb.utils.contains("TUNE_FEATURES", "vfp", "-mfpu=vfp", "", d)}"
 
 AVAILTUNES += "arm1176jzfs"
 TUNE_FEATURES_tune-arm1176jzfs = "${TUNE_FEATURES_tune-armv6} arm1176jzfs"
 ARMPKGARCH_tune-arm1176jzfs = "arm1176jzfs"
 PACKAGE_EXTRA_ARCHS_tune-arm1176jzfs = "${PACKAGE_EXTRA_ARCHS_tune-armv6}"
+
+AVAILTUNES += "arm1176jzfshf"
+TUNE_FEATURES_tune-arm1176jzfshf = "${TUNE_FEATURES_tune-arm1176jzfs} callconvention-hard"
+ARMPKGARCH_tune-arm1176jzfshf = "arm1176jzfs"
+PACKAGE_EXTRA_ARCHS_tune-arm1176jzfshf = "${PACKAGE_EXTRA_ARCHS_tune-armv6hf-vfp} arm1176jzfshf-vfp"
これで、local.confに
DEFAULTTUNE = arm1176jzfshf
とつけると、こんなかんじのオプションになります。
arm1176jzfshf
  -march=armv6 -mfloat-abi=hard -mtune=arm1176jzf-s -mfpu=vfp
nbenchの結果は別ページに乗せますが(またかよ)、
結果的にはよくなったところもあり、悪くなったところもあり、でした。
この先をやるかどうかは、気分しだいですねぇ。
いちおう、バイナリのサイズは微妙に小さくなっていましたので、
電力消費ぐらいには役に立ったかな?

参考:

2014年1月28日火曜日

raspberry piのオーバークロック

オーバークロックってなんかギークな雰囲気でわくわくしますね。
ま、それほどの恩恵があるのかどうか。
デフォルトの設定は700MHzなんですが、yoctoのREADMEでは
1GHzが確認されてるとのこと。しかも、その設定でも補償対象ということで。
これぐらいの値段だと、修理に出すよりもう一つ買ってしまいかねない
のはやむをえないところか。
Readmeにはこんな風にかいてありますが、
ARM_FREQ = "1000"
CORE_FREQ = "500"
SDRAM_FREQ = "500"
OVER_VOLTAGE = "6"
実際のconfig.hの中ではみんな小文字で設定されています。
しかも、コメントのおかげで結構ばらばら。
root@raspberrypi:~# vi /media/mmcblk0p1/config.txt
...
arm_freq=1000
...
core_freq=500
...
sdram_freq=500
...
over_voltage=6
...
これでリブートすれば反映されます。
Normalの状態を見てみます。dmesgとsysfsから確認できます。
dmesgのログ
[    2.040588] bcm2835-cpufreq: min=700000 max=700000 cur=700000

root@raspberrypi:~# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq
700000
んで、変更後はこんな感じになります。
[    2.040662] bcm2835-cpufreq: min=700000 max=1000000 cur=700000

root@raspberrypi:~# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq
700000
root@raspberrypi:~# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
1000000
root@raspberrypi:~# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq
700000
パッと見はこれで忙しくなれば自動的に1GHzまで上がってくれそうに見えますが、
cpufreqがどうやらきちんと動いていないように見えます。
nbenchの結果はまた別に掲載しますが、nbenchの結果を見ても
この状態では性能が上がっていません。
ということで、config.txtのパラメータで
force_turbo=1
を設定すると、nbenchの値もよくなりました。
その時のログの感じは下記の通りです。
[    1.918492] bcm2835-cpufreq: min=1000000 max=1000000 cur=1000000
cpuburnとか動かしてみるとはっきりするのかなぁ?
まぁ、やむをえないということで。
追記: どうやら、READMEにある内容は、その設定をlocal.confあたりに書けば、
rootfsのビルド時に、config.txtを自動的にアップデートしてくれるって
ことだったみたい。

つまり、
$ vi conf/local.conf
...
ARM_FREQ = "1000"
CORE_FREQ = "500"
SDRAM_FREQ = "500"
OVER_VOLTAGE = "6"
...
と書いてやって、bitbakeするっていうことでした。。。
ま、やってる内容は一緒なんだけどね。

2014年1月25日土曜日

パッケージの追加(nbench)

今日は、core-image-satoに手動でnbenchを追加してみます。
raspberry piはオーバークロックがあるみたいなので、
この後nbenchを使ってみようという感じです。
まずは、nbenchのレシピがあるかどうか探します。
$ cd poky
$ find -name nbench*
./meta-openembedded/meta-oe/recipes-benchmark/nbench-byte
./meta-openembedded/meta-oe/recipes-benchmark/nbench-byte/nbench-byte
./meta-openembedded/meta-oe/recipes-benchmark/nbench-byte/nbench-byte/nbench_32bits.patch
./meta-openembedded/meta-oe/recipes-benchmark/nbench-byte/nbench-byte_2.2.3.bb
meta-oeの下にレシピがあるようなので、ちょっとこのままビルドしてみます。
$ bitbake nbench-byte
Loading cache: 100% |###########################################################################################################################| ETA:  00:00:00
Loaded 1224 entries from dependency cache.
ERROR: Nothing PROVIDES 'nbench-byte'

Summary: There was 1 ERROR message shown, returning a non-zero exit code.
あれ?みつかんないみたいです。。。
あ~、レイヤが見つからないんだなってことで、bblayersを編集します。
$ cd ../build_raspi
$ vi conf/bblayers.conf
  BBLAYERS ?= " \
    /home/knishimu/workplace/yocto/poky/meta \
    /home/knishimu/workplace/yocto/poky/meta-yocto \
    /home/knishimu/workplace/yocto/poky/meta-yocto-bsp \
    /home/knishimu/workplace/yocto/poky/meta-raspberrypi \
    /home/knishimu/workplace/yocto/poky/meta-openembedded/meta-oe \
    "
んで、ビルド。
$ bitbake nbench-byte
Parsing recipes: 100% |#########################################################################################################################| Time: 00:01:53
Parsing of 1304 .bb files complete (0 cached, 1304 parsed). 1722 targets, 65 skipped, 0 masked, 0 errors.
NOTE: Resolving any missing task queue dependencies

Build Configuration:
BB_VERSION        = "1.21.1"
BUILD_SYS         = "x86_64-linux"
NATIVELSBSTRING   = "Ubuntu-12.04"
TARGET_SYS        = "arm-poky-linux-gnueabi"
MACHINE           = "raspberrypi"
DISTRO            = "poky"
DISTRO_VERSION    = "1.5+snapshot-20140121"
TUNE_FEATURES     = "armv6 vfp"
TARGET_FPU        = "vfp"
meta
meta-yocto
meta-yocto-bsp    = "master:b908caca1af1d4150eafd3d3001ea19599657270"
meta-raspberrypi  = "master:49c08724483da00d6cd0ed7d00561cfa14edf2f2"
meta-oe           = "master:9402e8cc964a3d75456af616497d376ebcc8e299"

NOTE: Preparing runqueue
NOTE: Executing SetScene Tasks
NOTE: Executing RunQueue Tasks
WARNING: nbench-byte: No generic license file exists for: freely in any provider
WARNING: nbench-byte: No generic license file exists for: distributable in any provider
NOTE: Tasks Summary: Attempted 372 tasks of which 359 didn't need to be rerun and all succeeded.

Summary: There were 2 WARNING messages shown.
$
なんか、ライセンスで怒られてますが、できたっぽいです。
meta-oeも認識されたみたいですね。
RPMパッケージがこのへんにあります。
$ ls tmp/deploy/rpm/armv6_vfp/nbench-byte-*
tmp/deploy/rpm/armv6_vfp/nbench-byte-2.2.3-r0.armv6_vfp.rpm
tmp/deploy/rpm/armv6_vfp/nbench-byte-dev-2.2.3-r0.armv6_vfp.rpm
tmp/deploy/rpm/armv6_vfp/nbench-byte-dbg-2.2.3-r0.armv6_vfp.rpm
これを、raspiにコピーして、
$ scp tmp/deploy/rpm/armv6_vfp/nbench-byte-2.2.3-r0.armv6_vfp.rpm root@192.168.0.10:/home/root
nbench-byte-2.2.3-r0.armv6_vfp.rpm                                100%   26KB  26.2KB/s   00:00
$
んで、ターゲット側でインストールします。
root@raspberrypi:~# ls
nbench-byte-2.2.3-r0.armv6_vfp.rpm
root@raspberrypi:~# rpm -ivh ./nbench-byte-2.2.3-r0.armv6_vfp.rpm
Preparing...                ########################################### [100%]
   1:nbench-byte            ########################################### [100%]
root@raspberrypi:~# which nbench
/usr/bin/nbench
実行結果は、またこんど♪
追記:
nbenchをこのまま実行すると、下記のようなエラーがでます。
root@raspberrypi:~# nbench

BYTEmark* Native Mode Benchmark ver. 2 (10/95)
Index-split by Andrew D. Balsa (11/97)
Linux/Unix* port by Uwe F. Mayer (12/96,11/97)

TEST                : Iterations/sec.  : Old Index   : New Index
                    :                  : Pentium 90* : AMD K6/233*
--------------------:------------------:-------------:------------
NUMERIC SORT        :          182.96  :       4.69  :       1.54
STRING SORT         :          28.689  :      12.82  :       1.98
BITFIELD            :      8.2803e+07  :      14.20  :       2.97
FP EMULATION        :           28.34  :      13.60  :       3.14
FOURIER             :          1685.8  :       1.92  :       1.08
ASSIGNMENT          :          2.3679  :       9.01  :       2.34
IDEA                :          674.32  :      10.31  :       3.06
HUFFMAN             :          408.97  :      11.34  :       3.62
NEURAL NET          :
 CPU:NNET--error in opening file!root@raspberrypi:~#
これは、NNET.DATというファイルが見つからないために発生しています。
nbenchのパッケージの中身をのぞいてみると、、、
$ rpm2cpio rpm/armv6_vfp/nbench-byte-2.2.3-r0.armv6_vfp.rpm |cpio --list
./usr
./usr/bin
./usr/bin/nbench
./usr/bin/NNET.DAT
85 blocks
と、/usr/binにありますので、これをコピーするなり、シンボリックリンクをはるなりして
実行するカレントディレクトリにあるようにしてやるとOKです。

2014年1月22日水曜日

yoctoでビルドしてみる

とりあえず、火入れをしようということなんですが、
オフィシャルページのNOOBSとかDLできなくて、、、

いづれyoctoでビルドしようと思っていたので、
こっちからいくことにしました。

基本的には、raspberry piレイヤにあるREADMEどおりでOKでしたが、
Angstromではなく、手動で設定しました。

以下、コマンドの流れをメモ

必要なものを拾ってくる。
$ git clone git://git.yoctoproject.org/poky
$ cd poky
$ git clone git://git.openembedded.org/openembedded-core
$ git clone git://git.openembedded.org/meta-openembedded
$ git clone git://git.yoctoproject.org/meta-raspberrypi

buildディレクトリは、build_raspiという名前にしました。
$ source poky/oe-init-build-env build_raspi

コンフィグレーションの設定で、raspberrypiのレイヤを追加して、 MACHINEをraspberrypiに設定します。
$ vi conf/bblayers.conf
BBLAYERS ?= " \
   /home/knishimu/workplace/yocto/poky/meta \
   /home/knishimu/workplace/yocto/poky/meta-yocto \
   /home/knishimu/workplace/yocto/poky/meta-yocto-bsp \
   /home/knishimu/workplace/yocto/poky/meta-raspberrypi \
   /home/knishimu/workplace/yocto/poky/meta-openembedded/meta-oe \
   "
$ 
$ vi conf/local.conf
MACHINE ??= "raspberrypi"
あとは、焼くだけですなぁ。
$ bitbake rpi-hwup-image
とはいえ、私のPCでは7時間とかかかっていたみたいです。。。
READMEには、rpi-basic-imageとrpi-test-imageがあるということなんですが、
どうやらrpi-test-imageはなくなっているようです。
やむをえないですねぇ。

(追記:今ではレシピが復活しているようです。)
core-image-satoも問題なく動作しました~。

ん~、なんかコマンドをきれいに表示したいなぁ。。。
SyntaxHighlighter ナイス!

2014年1月20日月曜日

raspberry piを入手

再開の目的でもあるのが、これなんです。


いやー、かなりのいまさら感ですが、やっと買ってしまいました。
raspberry pi
ちなみに、つづりがraspberryなんです。
あたりまえ?

なんか、いろいろとタブ補完ができなくて、こまっていたんですよね。
スペック的なものは、こちらから。
http://ja.wikipedia.org/wiki/Raspberry_Pi

さいかい

以前も少しブログを書いていたことがあったんですが、
まぁ、なんというか、筆まめでないので
すぐにトーンダウンしてしまうんですよね。

今回はなんとかなるといいと思いますが、
ま、ダメなときはダメなときで。

やむをえないでしょう。