コグノスケ


link 未来から過去へ表示(*)  link 過去から未来へ表示

link もっと前
2024年6月10日 >>> 2024年5月28日
link もっと後

2024年6月10日

PCBを設計して注文、第二弾

目次: Arduino

前回(2024年3月24日の日記参照)発注して燃えた(2024年4月3日の日記参照)PCBの設計を改修して発注しました。前回と同様にJLPCBにお願いしています。

JLPCBはドル決済なので円安だと支払いが増えて結構痛いんですよね……。円安がマシにならないかなーと思って1ヶ月くらい待ったんですが、特に良くなる傾向がなかったので諦めました。

編集者:すずき(2024/06/22 15:48)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2024年5月31日

Bitbakeのクラス

目次: Yocto

Yocto Scarthgap(5.0.1)のメモです。前回同様、コードを読んで依存関係を調べるのは大変時間が掛かるので、簡易的な調査手法として全ファイルを消してエラーを観察し、エラーの原因となるファイルを復活させて次ステップに進める手段を用います。

引き続きBitbakeを実行してエラーを見て、足りないファイルを元に戻していく方法で各パーツや設定の動作を見ます。

クラスが見つからないエラー
$ bitbake core-image-sato

ERROR: Unable to parse /home/katsuhiro/share/projects/oss/poky/bitbake/lib/bb/parse/parse_py/BBHandler.py
Traceback (most recent call last):
  File "/home/katsuhiro/share/projects/oss/poky/bitbake/lib/bb/parse/parse_py/BBHandler.py", line 71, in inherit(files=['base'], fn='configuration INHERITs', lineno=0, d=<bb.data_smart.DataSmart object at 0x7f7a85863c50>, deferred=False):
             if not os.path.exists(file):
    >            raise ParseError("Could not inherit file %s" % (file), fn, lineno)

bb.parse.ParseError: ParseError in configuration INHERITs: Could not inherit file classes/base.bbclass

なにやらclassesディレクトリと*.bbclassファイルが出てきました。これはクラス(Classes - The Yoct Project)といってレシピ間で処理を共有するための仕組みです。ドキュメントによると3種類あるそうです。

  • classes-recipe/ - レシピに個別に継承されることを意図したクラス
  • classes-global/ - グローバルに継承されることを意図したクラス
  • classes/ - 使用コンテキストが明確に定義されていないクラス

Yoctoのクラス(*.bbclassファイル)は全部meta/classes-globalかと思ったらそうでもなく、一部のクラスはmeta/classesディレクトリに配置されています。

エラーメッセージはmeta/classes/base.bbclassがないと言っていますが、ファイルの実際の在処はmeta/classes-global/base.bbclassです。どういうことでしょう?Bitbakeのソースコードを見ると、

Bitbakeのクラスの検索処理

# bitbake/lib/bb/parse/parse_py/BBHandler.py

def inherit(files, fn, lineno, d, deferred=False):
    __inherit_cache = d.getVar('__inherit_cache', False) or []
    #if "${" in files and not deferred:
    #    bb.warn("%s:%s has non deferred conditional inherit" % (fn, lineno))
    files = d.expand(files).split()

    #★★files配列には'base'だけが入っている★★
    for file in files:
        classtype = d.getVar("__bbclasstype", False)    #★★classtype = global★★
        origfile = file

        #★★classes-global/base.bbclassがなければ、classes/base.bbclassを探す★★
        for t in ["classes-" + classtype, "classes"]:
            file = origfile
            #★★パスと拡張子を連結★★
            if not os.path.isabs(file) and not file.endswith(".bbclass"):
                file = os.path.join(t, '%s.bbclass' % file)

            if not os.path.isabs(file):
                bbpath = d.getVar("BBPATH")
                abs_fn, attempts = bb.utils.which(bbpath, file, history=True)
                for af in attempts:
                    if af != abs_fn:
                        bb.parse.mark_dependency(d, af)
                if abs_fn:
                    file = abs_fn

            if os.path.exists(file):
                break

        #★★どちらもないと最後に探したパス名でエラーメッセージを出してくる★★
        if not os.path.exists(file):
            raise ParseError("Could not inherit file %s" % (file), fn, lineno)  #★★エラーメッセージを発生させる行★★

Bitbakeはclasses-globalとclassesの両方を探し、どちらにも目当てのクラスがない場合は最後に探したパス名でエラーメッセージを出力します。従ってエラーメッセージのパスは必ずmeta/classesになります。

今回登場したファイル、ディレクトリは、

  • poky/meta/classes-global/base.bbclass
  • poky/meta/classes-global/*.bbclass
  • poky/meta/classes/*.bbclass

こんなとこ。次回はディストリビューションを見ます。

編集者:すずき(2024/07/05 10:32)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2024年5月30日

Bitbakeのレイヤー

目次: Yocto

Yocto Scarthgap(5.0.1)のメモです。Yoctoの使い方は以下の2手でした。

Yoctoのビルド方法
$ 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)が参考になります。

レイヤーの一覧(BBLAYERS)の定義
# 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 \
  "
レイヤーの設定ファイル(layer.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 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のスクリプトが見つからないエラー
$ 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 documentationTechnical Overview - The Yocto Project)。

次のエラーを見るとbitbake.confがないと言われます。

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ファイルも元に戻します。

今回登場したファイル、ディレクトリは、

  • poky/meta/conf/layer.conf
  • poky/meta-yocto-bsp/conf/layer.conf
  • poky/meta/conf/bitbake.conf
  • poky/meta/conf/*.conf
  • poky/meta/lib/oe

こんなところです。次回はクラスを見ます。

編集者:すずき(2024/07/05 10:33)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2024年5月29日

Yoctoのビルドディレクトリとテンプレートディレクトリ

目次: Yocto

Yocto Scarthgap(5.0.1)のメモです。Yoctoの使い方は以下の2手でした。

Yoctoのビルド方法
$ source oe-init-build-env
$ bitbake core-image-sato

テンプレートディレクトリを元にしてビルドディレクトリ(正確にはbuild/confディレクトリ)を作成します。Yoctoのドキュメント(Creating a Custom Template Configuration Directory - The Yocto Project)によると、テンプレートディレクトリのパスはTEMPLATECONF環境変数で指定できるとあります。

もし何も設定しないと.templateconfファイル内に書かれた設定をデフォルトの設定として使います。内容はこんな感じです。

テンプレートディレクトリの位置が書かれた.templateconfファイル
$ less .templateconf

# Template settings
TEMPLATECONF=${TEMPLATECONF:-meta-poky/conf/templates/default}

テンプレートディレクトリの中にあるファイルはこんな感じ。

テンプレートディレクトリ内のファイル一覧
$ ls meta-poky/conf/templates/default/

bblayers.conf.sample  conf-summary.txt   local.conf.sample.extended
conf-notes.txt        local.conf.sample  site.conf.sample

テンプレートファイルからビルドディレクトリを作成する際は、単なるコピーではなく##OEROOT##のような変数をパスに展開した内容がコピーされます。下記はOEROOTの展開例です。

テンプレートファイルの展開例

$ diff -u meta-poky/conf/templates/default/bblayers.conf.sample build/conf/bblayers.conf

--- meta-poky/conf/templates/default/bblayers.conf.sample       2024-05-30 13:17:58.926938821 +0900
+++ build/conf/bblayers.conf    2024-05-31 14:58:51.741378271 +0900
@@ -6,7 +6,7 @@
 BBFILES ?= ""

 BBLAYERS ?= " \
-  ##OEROOT##/meta \
-  ##OEROOT##/meta-poky \
-  ##OEROOT##/meta-yocto-bsp \
+  /home/katsuhiro/share/projects/oss/poky/meta \
+  /home/katsuhiro/share/projects/oss/poky/meta-poky \
+  /home/katsuhiro/share/projects/oss/poky/meta-yocto-bsp \
   "

ぱっと見だとテンプレートディレクトリの場所はどこでも良さそうですがそんなことはありません。テンプレートがpoky/meta-poky/conf/templates/defaultだとしたら、

テンプレートディレクトリを配置できる場所の条件
poky/meta-poky/conf/templates/
の2つ上のディレクトリの下のconf/layer.confすなわち、
poky/meta-poky/conf/layer.conf
が必要です。

一言で言えばテンプレートがあるディレクトリの2つ上(Yoctoを例にすればmeta-poky)にconf/layer.confが存在しないエラーですが、そんな制約知らんわー……。

ちなみにテンプレートディレクトリを作成する場合は手で作成するのではなく、bitbake-layers save-build-confコマンドを使用するそうです(ドキュメント参照)。

ビルドディレクトリの中身

セットアップディレクトリによって、ビルドディレクトリbuildが生成され、BBPATHとBUILDDIRがビルドディレクトリを指すようになります。ビルドディレクトリ下には、テンプレートディレクトリからbuild/confディレクトリが生成されます。ファイルの中身を見ると、

ビルドディレクトリ内の設定ファイルの内容
#### build/conf/bblayers.conf

# POKY_BBLAYERS_CONF_VERSION is increased each time build/conf/bblayers.conf
# changes incompatibly
POKY_BBLAYERS_CONF_VERSION = "2"

BBPATH = "${TOPDIR}"
BBFILES ?= ""

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 \
  "


#### build/conf/conf-notes.txt

### Shell environment set up for builds. ###

You can now run 'bitbake <target>'

Common targets are:
    core-image-minimal
    core-image-full-cmdline
    core-image-sato
    core-image-weston
    meta-toolchain
    meta-ide-support

You can also run generated qemu images with a command like 'runqemu qemux86-64'.

Other commonly useful commands are:
 - 'devtool' and 'recipetool' handle common recipe tasks
 - 'bitbake-layers' handles common layer tasks
 - 'oe-pkgdata-util' handles common target package tasks


#### build/conf/conf-summary.txt

This is the default build configuration for the Poky reference distribution.


#### build/conf/local.conf

(設定項目がたくさんある、ここでは省略)


#### build/conf/templateconf.cfg

meta-poky/conf/templates/default

セットアップスクリプトの時点でもシステムの複雑さの片鱗が見え隠れしています。まともにコードで追うのを諦めて正解でした。そんなことしていたら日が暮れてしまいます。今回登場したファイル、ディレクトリは、

  • poky/oe-init-build-env
  • poky/.templateconf
  • poky/meta-poky/conf/templates/default/*
  • poky/meta-poky/conf/layer.conf
  • poky/build/conf/*

こんなもんでしょうか。次回はいよいよbitbakeに突入です。

編集者:すずき(2024/07/05 10:34)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2024年5月28日

Yoctoのセットアップスクリプトとビルドディレクトリ

目次: Yocto

Yocto Scarthgap(5.0.1)のメモです。Yoctoの使い方は以下の2手でした。

Yoctoのビルド方法
$ source oe-init-build-env
$ bitbake core-image-sato

今回は最初のsource oe-init-build-envを調べます。Yoctoのドキュメント(Source Directory Structure - The Yocto Projectの4.1.10 oe-init-build-env)によると、OpenEmbeddedのビルド環境をセットアップし、ビルドディレクトリを作成するスクリプトです。

コードを読んで依存関係を調べるのは時間が掛かるし辛いので、簡易的な調査手法として全ファイルを消してエラーを観察し、エラーの原因となるファイルを復活させて次ステップに進める手法で調べます。調べた結果oe-init-build-envを実行するには、

  • scripts/oe-buildenv-internal
  • scripts/oe-setup-builddir

が必要です。2つ目のoe-setup-builddirスクリプトによりビルドディレクトリが作成されます。次回はビルドディレクトリはどこから来るのか?を紹介します。

編集者:すずき(2024/06/04 00:02)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



link もっと前
2024年6月10日 >>> 2024年5月28日
link もっと後

管理用メニュー

link 記事を新規作成

<2024>
<<<06>>>
------1
2345678
9101112131415
16171819202122
23242526272829
30------

最近のコメント20件

  • link 21年9月20日
    すずきさん (11/19 01:04)
    「It was my pleasure.」
  • link 21年9月20日
    whtさん (11/17 23:41)
    「This blog solves my ...」
  • link 24年10月1日
    すずきさん (10/06 03:41)
    「xrdpで十分動作しているので、Wayl...」
  • link 24年10月1日
    hdkさん (10/03 19:05)
    「GNOMEをお使いでしたら今はWayla...」
  • link 24年10月1日
    すずきさん (10/03 10:12)
    「私は逆にVNCサーバーに繋ぐ使い方をした...」
  • link 24年10月1日
    hdkさん (10/03 08:30)
    「おー、面白いですね。xrdpはすでに立ち...」
  • link 14年6月13日
    2048player...さん (09/26 01:04)
    「最後に、この式を出すのに紙4枚(A4)も...」
  • link 14年6月13日
    2048playerさん (09/26 01:00)
    「今のところ最も簡略化した式です。\n--...」
  • link 14年6月13日
    2048playerさん (09/16 01:00)
    「返信ありがとうございます。\nコメントが...」
  • link 14年6月13日
    すずきさん (09/12 21:19)
    「コメントありがとうございます。同じ結果に...」
  • link 14年6月13日
    2048playerさん (09/08 17:30)
    「私も2048の最高スコアを求めたのですが...」
  • link 14年6月13日
    2048さん (09/08 17:16)
    「私も2048の最高スコアを求めたのですが...」
  • link 14年6月13日
    2048playerさん (09/08 16:10)
    「私も2048の最高スコアを求めたのですが...」
  • link 02年8月4日
    lxbfYeaaさん (07/12 10:11)
    「555」
  • link 24年6月17日
    すずきさん (06/23 00:12)
    「ありがとうございます。バルコニーではない...」
  • link 24年6月17日
    hdkさん (06/22 22:08)
    「GPSの最初の同期を取る時は見晴らしのい...」
  • link 24年5月16日
    すずきさん (05/21 11:41)
    「あー、確かにdpkg-reconfigu...」
  • link 24年5月16日
    hdkさん (05/21 08:55)
    「システム全体のlocale設定はDebi...」
  • link 24年5月17日
    すずきさん (05/20 13:16)
    「そうですねえ、普通はStandardなの...」
  • link 24年5月17日
    hdkさん (05/19 07:45)
    「なるほど、そういうことなんですね。Exc...」

最近の記事3件

  • link 23年4月10日
    すずき (11/15 23:48)
    「[Linux - まとめリンク] 目次: Linux関係の深いまとめリンク。目次: RISC-V目次: ROCK64/ROCK...」
  • link 24年11月6日
    すずき (11/15 23:47)
    「[Ubuntu 24.04 LTS on ThinkPad X1 Carbon Gen 12] 目次: Linux会社ではTh...」
  • link 24年11月11日
    すずき (11/15 23:26)
    「[Pythonのテストフレームワーク] 目次: Python最近Pythonを触ることが増えたのでテストについて調べようと思い...」
link もっとみる

こんてんつ

open/close wiki
open/close Linux JM
open/close Java API

過去の日記

open/close 2002年
open/close 2003年
open/close 2004年
open/close 2005年
open/close 2006年
open/close 2007年
open/close 2008年
open/close 2009年
open/close 2010年
open/close 2011年
open/close 2012年
open/close 2013年
open/close 2014年
open/close 2015年
open/close 2016年
open/close 2017年
open/close 2018年
open/close 2019年
open/close 2020年
open/close 2021年
open/close 2022年
open/close 2023年
open/close 2024年
open/close 過去日記について

その他の情報

open/close アクセス統計
open/close サーバ一覧
open/close サイトの情報

合計:  counter total
本日:  counter today

link About www.katsuster.net
RDFファイル RSS 1.0

最終更新: 11/19 01:04