web-dev-qa-db-ja.com

インストールコマンドの$ {D}変数

次のinstallコマンドが複数のyoctoレシピで使用されているのを見ました

install -d ${D}${libdir}

Installコマンドとその目的を知っていますが、$ {D}変数の目的がレシピで定義されていないことが多いため、目的を理解できません。誰かがこのシェル変数の目的を説明できますか?

10
shery6405

${D}変数を使用すると、ビルドされるソフトウェアを実際のターゲット以外のディレクトリにインストールできます。たとえば、libdir/usr/libになるようにソフトウェアを構成できますが、それはターゲットデバイス用です。ビルドシステムでインストールを実行するとき、新しく構築されたファイルを実際に/usr/libにインストールしたくない場合は、どこかに隔離して、簡単に識別してターゲットにコピーできるようにする必要があります。システム。したがって、一時ディレクトリを作成してそこにインストールします。

mkdir /tmp/yocto-target
make install D=/tmp/yocto-target

そうすることで、ファイルは/tmp/yocto-target/usr/libなどになります。次に、任意のツールを使用して/tmp/yocto-targetのすべてをアーカイブし、/tmp/yocto-targetプレフィックスを削除して、アーカイブをターゲットデバイスにコピーし、そこにコンテンツをインストールできます。

他のビルドシステムでは、DESTDIR変数が同じ理由で使用されます。

10
Stephen Kitt

_${D}_は、Yoctoレシピによって使用されるパスの通常の先頭であり、レシピは、このレシピによって生成されたパッケージに属するファイルをインストールします。 _${D}_の下のこれらのディレクトリは、パッケージ(RPMファイルなど)に含めるファイル、および他のユーザーが使用するファイル(ライブラリやヘッダーなど)が入るいわゆるsysrootツリーに含まれるファイルについて、ビルドシステムによってスキャンされます。パッケージ。このスキャンにはデフォルトのルールがいくつかあり、ルールは拡張できます。 Yoctoの組み込みメカニズムを活用するには、これらのYoctoのデフォルトパスを_${D}_の下でできるだけ使用することをお勧めします。

_${libdir}_は、デフォルトではbitbake.confで次のように定義されています。_${exec_prefix}/lib_これは、デフォルトで_/usr/lib_であり、同じファイルで定義されています。

_install -d ${D}${libdir} 
_

最後に、この「インストール」シェルコマンドは、ターゲットの_/usr/lib_に最終的にインストールする必要があるファイルを(たとえば、do_installによって)保存するディレクトリを作成するだけです。

ファイルcの_${D}/a/b/c_は、Yoctoパッケージに使用される中間パスに過ぎず、同じファイルcがターゲットファイルシステムにある場合、_${D}_は「切り取られます」。したがって、たとえば、_${D}/a/b/c_はターゲットの_/a/b/c_になります。

_${D}_は poky/meta/conf/bitbake.conf でデフォルトで次のように定義されています:

_TMPDIR = "${TOPDIR}/tmp"
BASE_WORKDIR ?= "${TMPDIR}/work"
WORKDIR = "${BASE_WORKDIR}/${MULTIMACH_TARGET_SYS}/${PN}/${EXTENDPE}${PV}-${PR}"
D = "${WORKDIR}/image"
_
3
crayor