目次: Yocto
Yocto Scarthgap(5.0.1)のメモです。Yoctoの使い方は以下の2手でした。
$ source oe-init-build-env $ bitbake core-image-sato
今回はBitbakeです。前回同様、コードを読んで依存関係を調べるのは大変時間が掛かるので、簡易的な調査手法として全ファイルを消してエラーを観察し、エラーの原因となるファイルを復活させて次ステップに進める手段を用います。
このbitbakeコマンドはPython 3で実装されていて、poky/bitbake/lib/bb/parse以下にあるスクリプトと連携して動作しています。bitbakeのエラー曰く、bblayers.confのBBLAYERS変数に列挙されているmetaなんとかディレクトリ下にconf/layer.confが必要です。
ここで出てくるmeta-なんとかディレクトリはOpenEmbeddedの概念でレイヤーと呼ばれます。レイヤー = レシピの集合体、レシピ = 何らかのソフトウェアをビルド、構成する方法を記述したものです。Yoctoは独自の単語が多いので、公式ドキュメントの用語集(Yocto Project Terms - The Yocto Project)が参考になります。
# build/conf/bblayers.conf BBLAYERS ?= " \ /home/katsuhiro/share/projects/oss/poky/meta \ /home/katsuhiro/share/projects/oss/poky/meta-poky \ /home/katsuhiro/share/projects/oss/poky/meta-yocto-bsp \ "
$ bitbake core-image-sato ERROR: Unable to parse /home/katsuhiro/share/projects/oss/poky/bitbake/lib/bb/parse/__init__.py Traceback (most recent call last): File "/home/katsuhiro/share/projects/oss/poky/bitbake/lib/bb/parse/__init__.py", line 145, in resolve_file(fn='/home/katsuhiro/share/projects/oss/poky/meta-poky/conf/layer.conf', d=<bb.data_smart.DataSmart object at 0x7fb271c5bc10>): if not os.path.isfile(fn): > raise IOError(errno.ENOENT, "file %s not found" % fn) FileNotFoundError: [Errno 2] file /home/katsuhiro/share/projects/oss/poky/meta-poky/conf/layer.conf not found
3つのレイヤーのうち、テンプレートディレクトリを持っているmeta-pokyにはmeta-poky/conf/layer.confが存在します(でないとoe-setup-builddirのチェックに引っかかるはず)。残りの2つmeta/conf/layer.confとmeta-yocto-bsp/conf/layer.confを元に戻して実行します。
ちなみにOpenEmbeddedのサイトで利用可能なレイヤーの一覧(OpenEmbedded Layer Index)を確認できます。便利ですね。
話がそれましたがmeta/conf/layer.confとmeta-yocto-bsp/conf/layer.confファイルを戻してbitbakeを実行すると、
$ bitbake core-image-sato ERROR: Unable to parse /home/katsuhiro/share/projects/oss/poky/bitbake/lib/bb/parse/ast.py Traceback (most recent call last): File "/home/katsuhiro/share/projects/oss/poky/bitbake/lib/bb/parse/ast.py", line 290, in PyLibNode.eval(data=<bb.data_smart.DataSmart object at 0x7f4f4d45bf50>): try: > bb.utils._context[self.namespace] = __import__(self.namespace) toimport = getattr(bb.utils._context[self.namespace], "BBIMPORTS", []) ModuleNotFoundError: No module named 'oe'
エラーを見るとmeta/lib/oeが無いと言っているのでこれも元に戻しましょう。oeはたぶんOpenEmbedded(※)の略ですね。
(※)bitbakeはOpenEmbeddedのビルドツールで、PokyはOpenEmbeddedのリファレンス(reference distribution)とされています。YoctoはPokyを開発しているプロジェクト名です。Yocto, Poky, OpenEmbeddedの関係はbitbakeのヘルプとかYoctoのヘルプで説明されています(1 Overview - Bitbake dev documentation、Technical Overview - The Yocto Project)。
次のエラーを見るとbitbake.confがないと言われます。
$ bitbake core-image-sato ERROR: Unable to parse /home/katsuhiro/share/projects/oss/poky/bitbake/lib/bb/parse/__init__.py Traceback (most recent call last): File "/home/katsuhiro/share/projects/oss/poky/bitbake/lib/bb/parse/__init__.py", line 139, in resolve_file(fn='conf/bitbake.conf', d=<bb.data_smart.DataSmart object at 0x7faff2cc38d0>): if not newfn: > raise IOError(errno.ENOENT, "file %s not found in %s" % (fn, bbpath)) fn = newfn FileNotFoundError: [Errno 2] file conf/bitbake.conf not found in /home/katsuhiro/share/projects/oss/poky/meta-poky:/home/katsuhiro/share/projects/oss/poky/build:/home/katsuhiro/share/projects/oss/poky/meta:/home/katsuhiro/share/projects/oss/poky/meta-yocto-bsp
指摘された通りmeta/conf/bitbake.confを元に戻します。他のレイヤー(metaなんとかディレクトリ)にはbitbake.confがありません。1個しかないものなのかな?bitbake.confは他の*.confを大量にrequire/includeしていて同じく見つからないエラーになりますので、*.confファイルも元に戻します。
今回登場したファイル、ディレクトリは、
こんなところです。次回はクラスを見ます。
< | 2024 | > | ||||
<< | < | 05 | > | >> | ||
日 | 月 | 火 | 水 | 木 | 金 | 土 |
- | - | - | 1 | 2 | 3 | 4 |
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 | - |
合計:
本日: