Galileo?
IntelのGalileoのSDカード用Linuxイメージを作る - Galileo †
SDカード用イメージを使いたいだけの方はこちら
→ミニイメージのダウンロード
→作成したIntelのGalileoのSDカード用Linuxイメージを使う - Galileo
概要 †
Intelが配布しているイメージをSDに焼くだけでもよいのだが,せっかくなのでいろいろ入れていわゆる「カスタムビルド」をやってみようと思う.
特に,Galileoの標準イメージにはgcc等も入っていないため,ちょこっとC言語でHello, Worldをためしたい,なんて時にとても苦労する.
(どうやらPythonは入っているらしいのでそっちでいろいろやってもよいのだが,いろいろやるためにはライブラリをビルドしないといけなくて,それをクロス環境でビルドしてパッケージングして持っていくという作業は骨が折れるので,ある程度事前にビルドしておきたい.)
とりあえず,その前にLinuxイメージを最後までビルドできるかどうかを確かめておく必要があるのでまずはそこから.
筆者環境はUbuntu13.10(非推奨).
準備 †
- BSP(Board Support Package)が配布されているのでそれを入手する.
https://communities.intel.com/docs/DOC-22226
「Board Support Package Sources for Intel Quark」をダウンロードして解凍.
- meta-clanton_v0.7.5.tar.gzを解凍.ビルド環境のセットアップをするため,次のように打ち込む.
tar xzvf meta-clanton_v0.7.5.tar.gz
cd meta-clanton_0.7.5
./setup.sh -e meta-clanton-galileo
source poky/oe-init-build-env yocto_build/
ビルド作業 †
uClibcを使ったビルド(一般的,非推奨) †
中断したり,ファイルにパッチを当てたりして続きからやり直す場合は,yocto_buildフォルダに移動してから
bitbake image-full
でよい.
ただし,この方法では色々と問題が起きそうである.
例えば,uClibcを使ってビルドされたイメージを使用して,PythonからOpenCVを叩こうとすると以下のようなエラーが起こる.
root@clanton:~# python ./cvtest.py
/usr/bin/python2.7: symbol 'th_comment_query_count': can't resolve symbol in lib '/usr/lib/libtheoraenc.so.1'.
Traceback (most recent call last):
File "./cvtest.py", line 1, in <module>
import cv
File "/usr/lib/python2.7/site-packages/cv.py", line 1, in <module>
from cv2.cv import *
ImportError: unknown dlopen() error
手元の環境でelfdumpしてみたところ,th_comment_query_countなるシンボルはUndefined扱いになっていた.
調べてみると,これはuClibcでコンパイルした時に起こる問題らしい.
OpenCV projects ? - Intel Communities
Yocto Project IRC Log Sep 27 2013
eglibcを使ったビルド(んでもって全部入りを作る) †
そこで,Intel Galileo - Building Linux Image - Malinov Family Web Presenceに示されている方法で,LSBをビルドする.
途中でpython-numpyのビルド中に怒られる.
DEBUG: Executing shell function do_compile
Running from numpy source directory.
non-existing path in 'numpy/distutils': 'site.cfg'
F2PY Version 2
blas_opt_info:
blas_mkl_info:
libraries mkl,vml,guide not found in
['/home/tokoro/dev/galileo/meta-clanton_v0.7.5/yocto_build/tmp/sysroots/i686-linux/usr/lib', '/usr/local/lib', '/usr/lib', '/usr/lib/i386-linux-gnu']
NOT AVAILABLE
atlas_blas_threads_info:
Setting PTATLAS=ATLAS
libraries ptf77blas,ptcblas,atlas not found in
['/home/tokoro/dev/galileo/meta-clanton_v0.7.5/yocto_build/tmp/sysroots/i686-linux/usr/lib', '/usr/local/lib', '/usr/lib/atlas-base',
'/usr/lib/sse2', '/usr/lib', '/usr/lib/i386-linux-gnu/sse2', '/usr/lib/i386-linux-gnu']
NOT AVAILABLE
どうやらblasやらatlasやらなどと一緒にビルドしようとしているらしい.
../meta-oe/meta-oe/recipes-devtools/python/python-numpy_1.7.0.bbを編集
# Make the build fail and replace *config.h with proper one
# This is a ugly, ugly hack - Koen
do_compile_prepend() {
BUILD_SYS=${BUILD_SYS} HOST_SYS=${HOST_SYS} \
- ${STAGING_BINDIR_NATIVE}/python-native/python setup.py build ${DISTUTILS_BUILD_ARGS} || \
+ BLAS=None LAPACK=None ATLAS=None ${STAGING_BINDIR_NATIVE}/python-native/python setup.py build ${DISTUTILS_BUILD_ARGS} || \
true
cp ${WORKDIR}/*config.h ${S}/build/$(ls ${S}/build | grep src)/numpy/core/include/numpy/
}
参考:
Building and installing NumPy
nativesdk-glib-2.0, pulseaudio-3.0-r0のコンパイル中に後々sedがないと怒られるので,手動で/bin/sedを指定する必要があった.
(何の問題なんだろうこれ?)
../poky/meta/recipes-core/glib-2.0/glib-2.0_2.34.3.bb
require glib.inc
+SED = "/bin/sed"
PR = "r2"
../poky/meta/recipes-multimedia/pulseaudio/pulseaudio_3.0.bb
inherit gettext perlnative
+SED = "/bin/sed"
SRC_URI = "http://freedesktop.org/software/pulseaudio/releases/pulseaudio-${PV}.tar.xz \
file://volatiles.04_pulse"
上記の修正をしたら,
$ bitbake python-numpy -c clean
$ bitbake nativesdk-glib-2.0 -c clean
$ bitbake pulseaudio-3.0-r0 -c clean
$ bitbake image-sdk -c populate_sdk
筆者の環境では,1時間に1000ずつぐらい進んだり300しか進まなかったりした(ターゲット数は全部で6000ほど).
13時間ほどのところで終盤にさしかかるも,最後の最後Qt関係で異様に時間がかかって,合計で16時間ほどで全ビルドが完了した.
-c populate_sdkオプションをつけると,一番最後に開発ツールのアーカイブ化もやってくれる.
成果物置き場 †
クロスビルド環境 †
今回のビルドで作成したツール群をこっそり置いておく.
http://storage.tokor.org/pub/galileo/tools/clanton-full-eglibc-i686-i586-toolchain-1.4.2.sh (1.2GB)
SDフルイメージ (Full large image) †
SDにそのまま解凍すればいろいろ入りで試せるイメージ一式.
http://storage.tokor.org/pub/galileo/images/full (展開後3.2GB)
SDミニイメージ(推奨) (Mini image with ssh, wget, etc... Recommended) †
sshが叩ける以外,なるべくパッケージを排除したイメージ.
自分でopkgでパッケージを入れたい人は,これを使用するといいと思う.
http://storage.tokor.org/pub/galileo/images/minimal (展開後400MB.もうちょっとちっちゃくならんかなぁ)
ipkパッケージ類 †
今回のビルドでたくさんできた,上の2つのSDイメージ上のopkgで使えるipkパッケージ類.
http://storage.tokor.org/pub/galileo/packages
コメントはこちら †