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