BitBake 概要
blog
2019-4-1 12:42 JST

BitBake 概略

BitBake は openembedded.org が提供するpython で記述された、組込みLinuxのシステムを容易に構築することが可能なビルドツールです。

マニュアルの冒頭には「 BitBake is, at its simplest, a tool for executing tasks and managing metadata.」と書かれており、単なるビルドツールではなく、タスク実行とメタデータのマネージングの為のツールとなっており、より汎用性の高いツールであることを伺わせます。

メタデータとレシピ

BitBake ではメタデータを次の3つの種類に分けています。

  • - Configuration Files
  • - Classes
  • - .bb Files
■ Configuration Files

bitbake コマンドは最初に "conf/bblayers.conf" を探します。bblayers.conf には、各 layer ディレクトリのリストを表すBBLAYERS 変数が設定されていいます。各 layer には conf/layer.conf があり、パーズされます。その際には、LAYERDIR が各 layer のディレクトリに自働的に設定されます。

さらに、それらのファイルから設定ファイルを読み込み、最終的には confi/local.confを読み込みます。

■ Classes

bittake では Classes により、継承のメカニズムを使うことができます。各 layer のclasses ディレクトリに bbclasses というファイルがあります。#

■ .bb Files

.bb ファイルはタスクの実行を管理するファイルです。#


レシピ(recipe)という言葉も使用されます。一つの目的のために集められた複数のメタデータをレシピと呼んでいるようです。

変数の設定

各メタデータで共通の変数の設定で使われる代入式の意味を説明します。単純に = マークだけでなく ?= や ??= に意味があるので、正確に使い分ける必要があります。

■ = (通常の設定)

通常の設定。"" が設定されると empty string になる。

■ ?= (デフォルト値の設定)

もし、その変数評価時点で変数に値が入っていれば、書き換えずにそのままにするが、値が入っていなければ、即座に値を代入する。

■ ??= (弱い - weak - デフォルト値の設定)

もし、全ての評価プロセスが終わった後に、変数に値が入っていれば、書き換えずにそのままにするが、値が入っていなければ、値を代入する。複数の ??= があった場合は最後の値が代入される。"this assignment is a "lazy" or "weak" assignment"だそうだ。鰯。

■ := (即時評価)

すぐに代入する。(通常の代入と何が違うか不明)

■ += と =+

スペースをいれる追加代入。+= と =+ は後に入れるか、前に入れるかの違い。

■ .= と =.

スペースをいれない追加代入。+= と =+ は後に入れるか、前に入れるかの違い。変数名_append や 変数名_prepend での代入で同じ効果を生む。

■ 変数内の文字列削除

変数名_remove でその変数から該当する文字列を削除する。複数あれば複数削除。

■ Variable Flag Syntax

変数に付加情報を与えることができる。特定のアトリビュートを設定可能。設定上重要な意味を持つことがある。

  • dir
  • cleandir
  • noexec
  • nostmp
  • fakeroot
  • umask
  • deptask
  • depends
  • postfuncs
  • prefuncs

基本的なタスク

  • do_fetch
  • do_unpack
  • do_patch
  • do_configure
  • do_compile
  • do_install
  • do_build
  • do_populate_sysroot
  • do_populate_lic
  • do_packagedata
  • do_package

BitBake の文法について

BitBake は Python で書かれています。しかし、Python には ?= や ?== なる演算子はありません。では BitBake はどのようにこれを解釈しているのでしょう??= で grep してみると、どうやら、内部に parser を持っていることがわかりました。"lib/bb/codeparser.py" というファイルや、 "lib/ply/lex.py" や "lib/ply/yacc.py" も見受けられます。

つまり BitBake は一つの言語なのです。


歴史(ぽいことの羅列)

どうも 2003 年頃から Chris Larson さんと Phil Blundell さんと Mickey 'Mickey' Larson さんが開発を始めて、2009 年に OpenEmbedded という団体を立ち上げたみたい。その後、Linaro(2010発足) や Linux Foundation(2007設立) のYocto Project(2011 発表) で bitbake が採用されたよう。とりわけ OpenEmbedded の Documentation のなかでも Yocto Project Manuals が筆頭にあがっているところを見ると、Linux Foundation と相性がよいように見える(わからんけどね)。

Yocto Project で提供されている oe-init-build-env と OpenEmbedded で提供されている oe-init-build-env を md5 で比べると同じものだった。poky が持つ環境の殆どは bitbake + oe-core の中にある。厳密に比べた訳ではないが、ディレクトリ構成だけを見ると、poky にはmeta-yocto, meta-yocto-bsp が追加されている。meta-yocto-bsp は結局、bsp なので自分で環境に合わせて用意しなければならない。meta-yocto では busybox/ psplash/ tiny-init/ が付け加わっているだけ。busybox はパッチ(bbappend。busybox の config が用意されている) とpsplash(logo image) と tiny-init に追加ファイルが少々。Yocto Project ってのは結局、大半が bitbake ってことになりそう。

bitbake の Copyright は次のようになっています。

# Copyright (C) 2003, 2004  Chris Larson
# Copyright (C) 2003, 2004  Phil Blundell
# Copyright (C) 2003 - 2005 Michael 'Mickey' Lauer
# Copyright (C) 2005        Holger Hans Peter Freyther
# Copyright (C) 2005        ROAD GmbH
# Copyright (C) 2006        Richard Purdie