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

さいかい

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

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

やむをえないでしょう。