[[Galileo]]

* IntelのGalileoのSDカード用Linuxイメージを作る - Galileo [#p9fd5b37]

#contents

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

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

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

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

** 準備 [#ed7f1a41]
+ 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を解凍.ビルド環境のセットアップをするため,次のように打ち込む.~
#highlightjs(bash){{
#highlightjs(no-highlight){{
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/
}}
** ビルド作業 [#c92f27ac]
*** uClibcを使ったビルド(一般的,非推奨) [#a0b850d9]
- 使用しているGCCが4.8未満の場合(Ubuntu 12.04とかの場合これ)~
何も考えずに
#highlightjs(bash){{
#highlightjs(no-highlight){{
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の切り替え:http://www.eml.ele.cst.nihon-u.ac.jp/~momma/wiki/wiki.cgi/Ubuntu/gcc%E3%81%AE%E5%88%87%E3%82%8A%E6%9B%BF%E3%81%88.html]]
#highlightjs(bash){{
#highlightjs(no-highlight){{
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を選択する.~
こんな感じになることを念のため確認.
#highlightjs(bash){{
#highlightjs(no-highlight){{
$ gcc -v
Using built-in specs.
COLLECT_GCC=gcc
... 中略 ...
gcc version 4.6.4 (Ubuntu/Linaro 4.6.4-3ubuntu1) 
}}
g++も同様に確認.~
その後,
#highlightjs(bash){{
#highlightjs(no-highlight){{
bitbake image-full
}}

中断したり,ファイルにパッチを当てたりして続きからやり直す場合は,yocto_buildフォルダに移動してから
#highlightjs(bash){{
#highlightjs(no-highlight){{
bitbake image-full
}}
でよい.

ただし,この方法では色々と問題が起きそうである.~
例えば,uClibcを使ってビルドされたイメージを使用して,PythonからOpenCVを叩こうとすると以下のようなエラーが起こる.
#highlightjs(){{
#highlightjs(no-highlight){{
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:https://communities.intel.co.jp/thread/48204]]~
[[Yocto Project IRC Log Sep 27 2013:https://www.yoctoproject.org/irc/%23yocto.2013-09-27.log.html#t2013-09-27T19:13:03]]

*** eglibcを使ったビルド(んでもって全部入りを作る) [#v46075b7]
そこで,[[Intel Galileo - Building Linux Image - Malinov Family Web Presence:http://www.malinov.com/Home/sergey-s-blog/intelgalileo-buildinglinuximage]]に示されている方法で,LSBをビルドする.

途中でpython-numpyのビルド中に怒られる.
#highlightjs(bash){{
#highlightjs(no-highlight){{
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を編集
#highlightjs(diff){{
# 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:http://docs.scipy.org/doc/numpy/user/install.html#disabling-atlas-and-other-accelerated-libraries]]

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
#highlightjs(diff){{
require glib.inc

+SED = "/bin/sed"
 
PR = "r2"
}}

../poky/meta/recipes-multimedia/pulseaudio/pulseaudio_3.0.bb
#highlightjs(diff){{
inherit gettext perlnative

+SED = "/bin/sed"

SRC_URI = "http://freedesktop.org/software/pulseaudio/releases/pulseaudio-${PV}.tar.xz \
           file://volatiles.04_pulse"
}}

上記の修正をしたら,
#highlightjs(bash){{
#highlightjs(no-highlight){{
$ 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時間ほど''で全ビルドが完了した.~
&nbsp;-c populate_sdkオプションをつけると,一番最後に開発ツールのアーカイブ化もやってくれる.

** 成果物置き場 [#u59e5b82]
*** クロスビルド環境 [#w8541a6f]
今回のビルドで作成したツール群をこっそり置いておく.~
http://storage.tokor.org/pub/galileo/tools/clanton-full-eglibc-i686-i586-toolchain-1.4.2.sh (1.2GB)
*** SDフルイメージ (Full large image) [#m91c7db4]
SDにそのまま解凍すればいろいろ入りで試せるイメージ一式.~
http://storage.tokor.org/pub/galileo/images/full (展開後3.2GB)
*** SDミニイメージ(推奨) (Mini image with ssh, wget, etc... Recommended) [#fb8834e8]
sshが叩ける以外,なるべくパッケージを排除したイメージ.~
自分でopkgでパッケージを入れたい人は,これを使用するといいと思う.~
http://storage.tokor.org/pub/galileo/images/minimal (展開後400MB.もうちょっとちっちゃくならんかなぁ)
*** ipkパッケージ類 [#p72ac810]
今回のビルドでたくさんできた,上の2つのSDイメージ上のopkgで使えるipkパッケージ類.~
http://storage.tokor.org/pub/galileo/packages

** コメントはこちら [#a7c4c40b]
#comment

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS