Galileo?

IntelのGalileoのSDカード用Linuxイメージを作る - Galileo

SDカード用イメージを使いたいだけの方はこちら
ミニイメージのダウンロード
作成したIntelのGalileoのSDカード用Linuxイメージを使う - Galileo

概要

Intelが配布しているイメージをSDに焼くだけでもよいのだが,せっかくなのでいろいろ入れていわゆる「カスタムビルド」をやってみようと思う.

特に,Galileoの標準イメージにはgcc等も入っていないため,ちょこっとC言語でHello, Worldをためしたい,なんて時にとても苦労する.
(どうやらPythonは入っているらしいのでそっちでいろいろやってもよいのだが,いろいろやるためにはライブラリをビルドしないといけなくて,それをクロス環境でビルドしてパッケージングして持っていくという作業は骨が折れるので,ある程度事前にビルドしておきたい.)

とりあえず,その前にLinuxイメージを最後までビルドできるかどうかを確かめておく必要があるのでまずはそこから.
筆者環境はUbuntu13.10(非推奨).

準備

  1. BSP(Board Support Package)が配布されているのでそれを入手する.
    https://communities.intel.com/docs/DOC-22226
    「Board Support Package Sources for Intel Quark」をダウンロードして解凍.
  2. 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を使ったビルド(一般的,非推奨)

  • 使用しているGCCが4.8未満の場合(Ubuntu 12.04とかの場合これ)
    何も考えずに
    bitbake image-full
    でよいみたい.(未検証)
  • 使用しているGCCが4.8以降の場合(特にUbuntu13.10ではこれ)
    4.8のまま進めるとまずelfutilsでコンパイルエラーが起き,その後guileで謎のエラーが発生するので,gccを予め前のバージョンのもの(ここではgcc4.6)に切り替えておく.
    Ubuntu13.10には4.8以前のバージョンも入っているので,update-alternativesに手動で設定してgccを切り替える.
    このあたりを参考にした.
    Momma's Wiki Ubuntu/gccの切り替え
    sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 48
    sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.6 46
    sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 48
    sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.6 46
    sudo update-alternatives --config gcc
    sudo update-alternatives --config g++
    最後の--config gccとg++では,4.6を選択する.
    こんな感じになることを念のため確認.
    g++も同様に確認.
    その後,
    bitbake image-full

中断したり,ファイルにパッチを当てたりして続きからやり直す場合は,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

コメントはこちら



トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2014-02-13 (木) 23:46:21 (1508d)