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.incarch-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=vfpnbenchの結果は別ページに乗せますが(またかよ)、
結果的にはよくなったところもあり、悪くなったところもあり、でした。
この先をやるかどうかは、気分しだいですねぇ。
いちおう、バイナリのサイズは微妙に小さくなっていましたので、
電力消費ぐらいには役に立ったかな?
参考:
0 件のコメント :
コメントを投稿