Yocto Linux に関するメモ

ホームページ

https://www.yoctoproject.org/

使い方の書いてあるサイト

http://hambedded.org/blog/2012/11/24/from-bitbake-hello-world-to-an-image/

http://www.crashcourse.ca/wiki/index.php/Yocto_Project_Quick_Start

Debianでの使い方

必須パッケージのインストール

$ sudo apt-get install gawk wget git-core diffstat unzip texinfo build-essential chrpath libsdl1.2-dev xterm

poky

$ git clone git://git.yoctoproject.org/poky

ひな形作成

$ cd poky
$ source oe-init-build-env

beagleboard用に設定変更

パラレルビルドの値は環境に合わせる

$ vi conf/local.conf
BB_NUMBER_THREADS = "16"
PARALLEL_MAKE = "-j 16"
MACHINE ?= "beagleboard"

最小限イメージのビルド

$ bitbake core-image-minimal

イメージは tmp/deploy/images/ に格納されてる

$ ls tmp/deploy/images/
MLO-beagleboard
MLO-beagleboard-1.5.0+git1+9f94c6577e3a018b6b75cbe39f32bb331871f915-r0
README_-_DO_NOT_DELETE_FILES_IN_THIS_DIRECTORY.txt
core-image-minimal-beagleboard-20121209215617.rootfs.jffs2
core-image-minimal-beagleboard-20121209215617.rootfs.tar.bz2
core-image-minimal-beagleboard.jffs2
core-image-minimal-beagleboard.tar.bz2
modules-3.4.11-yocto-standard-r4.3-beagleboard.tgz
u-boot-beagleboard-v2011.06+git5+b1af6f532e0d348b153d5c148369229d24af361a-r3.bin
u-boot-beagleboard.bin
u-boot.bin
uImage
uImage-3.4.20+git1+6737e890fff2a423fbb022ab1f7f82ef187fd8b1_1+449f7f520350700858f21a5554b81cc8ad23267d-r4.3-beagleboard-20121209215617.bin
uImage-beagleboard.bin
x-load-beagleboard-1.5.0+git1+9f94c6577e3a018b6b75cbe39f32bb331871f915-r0.bin.ift
x-load-beagleboard.bin.ift

外部のレシプやメタデータを利用する

外部メタデータのダウンロード

ひな形を作る

source poky/oe-init-build-env foo-build

conf/bblayers.conf にメタデータが格納されているディレクトリパスを指定する。

conf/local.conf の MACHINE にマシン名を指定する。パラレルビルドしたいなら、BB_NUMBER_THREADS と PARALLEL_MAKE も変更する。

ビルド

再ビルド

以下、linux-yocto レシピを再ビルドする場合の例:

$ bitbake linux-yocto -c compile -f
$ bitbake linux-yocto

chroot 内でビルドする方法

ロックに shmem 使うので、/dev/shm を bind

  1. chroot /tmp を chmod で 777 に変更
  2. proc bind

     sudo mount --bind /proc ./precise/proc でproc bind
    
  3. /dev/shm もbind

     sudo rm  ./p/dev/shm 
     sudo mkdir  ./p/dev/shm
     sudo mount --bind /dev/shm ./p/dev/shm
    

linaro toolchain を使う

  1. http://lists.linuxtogo.org/pipermail/openembedded-core/2012-July/026659.html を適用する。

  2. meta-linaro と meta-openembedded をダウンロードする

     git clone git://git.linaro.org/openembedded/meta-linaro.git
     git clone git://git.openembedded.org/meta-openembedded
    
  3. conf/bblayers.conf を変更する

    BBLAYERS に以下を追加。ディレクトリ構成によってはパスが異なるので注意。

     ${TOPDIR}/../meta-openembedded/toolchain-layer
     ${TOPDIR}/../meta-linaro
    
  4. conf/local.conf を変更する

     EXTERNAL_TOOLCHAIN = "${TOPDIR}/../gcc-linaro-arm-linux-gnueabihf-4.7-2013.02-01-20130221_linux"
     TCMODE = "external-linaro"
     IMAGE_LINGUAS = ""
     LIMIT_BUILT_LOCALES = "POSIX"
     DEFAULTTUNE = "armv7athf-neon"
     INSANE_SKIP_${PN} += "ldflags"
    
  5. 以下のパッチを適用

     diff --git a/recipes-devtools/external-linaro-toolchain/external-linaro-toolchain.bb b/recipes-devtools/external-linaro-toolchain/external-linaro-toolchain.bb
     index 83a8532..a7a080f 100644
     --- a/recipes-devtools/external-linaro-toolchain/external-linaro-toolchain.bb
     +++ b/recipes-devtools/external-linaro-toolchain/external-linaro-toolchain.bb
     @@ -150,6 +150,8 @@ FILES_libstdc++ = "${base_libdir}/libstdc++.so.*"
      FILES_libstdc++-dev = "\
             ${includedir}/c++/${PV} \
             ${base_libdir}/libstdc++.so \
     +"
     +FILES_libstdc++-staticdev ="\
             ${base_libdir}/libstdc++.a \
             ${base_libdir}/libsupc++.a \
      "
    
  6. bitbake でビルド

     bitbake core-image-minimal
    

linaro toolchain もリビルド

バイナリのlinaro toolchainを使わず、ビルドして使うには config/loca.conf を以下のようにする。

 GCCVERSION = "linaro-4.7"
 SDKGCCVERSION = "linaro-4.7"
 # set the default machine and target
 DEFAULTTUNE = "armv7athf-neon"

 # specify the alignment of the root file system
 # this is required when building for qemuarmv7a
 IMAGE_ROOTFS_ALIGNMENT = "2048"

カーネルパッチが遅い

conf/local,conf に PATCHTOOL = "quilt" git ()が遅いのです。

wiki.yoctoproject.org