web-dev-qa-db-ja.com

Bitbakeがrootfsイメージにファイルをインストールしない


2つのファイル(VPUのファームウェアバイナリ)をターゲットルートファイルシステムの/ lib/firmware /ディレクトリにコピーするビットベイクレシピを作成しました。

私は多くのオプションを試しましたので、私のレシピの何が不要/冗長で、何が必要であるのかわかりません。 FILESEXTRAPATHS ..、SRC_URI ..、do_install ..で十分なはずですが、それだけでは機能せず、他のすべてのものでも機能しません。

DESCRIPTION = "VPU libraries provided by fsl"

LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COREBASE}/LICENSE;md5=4d92cd373abda3937c2bc47fbc49d690"

PACKAGE_Arch = "all"
ALLOW_EMPTY_${PN} = "1"

FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
SRC_URI += " \
    file://vpu_fw_imx6d.bin \
    file://vpu_fw_imx6q.bin \
"

INSANE_SKIP_${PN} += "installed-vs-shipped"

do_install () {
    install -d ${D}${base_libdir}/firmware/
    cp ${WORKDIR}/vpu_fw_imx6d.bin ${D}${base_libdir}/firmware/
    cp ${WORKDIR}/vpu_fw_imx6q.bin ${D}${base_libdir}/firmware/
    chmod 755 ${D}${base_libdir}/firmware/vpu_fw_imx6d.bin
    chmod 755 ${D}${base_libdir}/firmware/vpu_fw_imx6q.bin
}
PACKAGES = "${PN}"
FILES_${PN} += " \
        ${D}${base_libdir}/firmware/vpu_fw_imx6d.bin \
        ${D}${base_libdir}/firmware/vpu_fw_imx6q.bin \
"

私が間違ったことを指摘していただけませんか?

編集:
アンダースの回答は問題を本当に助け、解決しました。

誰かが役立つと思った場合に備えて、「固定」レシピを投稿しています。

DESCRIPTION = "VPU libraries provided by fsl"

LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COREBASE}/LICENSE;md5=4d92cd373abda3937c2bc47fbc49d690"

PACKAGE_Arch = "all"

SRC_URI += " \
    file://vpu_fw_imx6d.bin \
    file://vpu_fw_imx6q.bin \
"

do_install () {
    install -d ${D}${base_libdir}/firmware/
    install -m 755 ${WORKDIR}/vpu_fw_imx6d.bin ${D}${base_libdir}/firmware/
    install -m 755 ${WORKDIR}/vpu_fw_imx6q.bin ${D}${base_libdir}/firmware/
}

FILES_${PN} += " \
        ${base_libdir}/firmware/vpu_fw_imx6d.bin \
        ${base_libdir}/firmware/vpu_fw_imx6q.bin \
"
11
lewiatan

安全のために、不要な行はすべて削除してください。

FILESEXTRAPATHSは必要ありません。別のレイヤーのレシピを変更するために_.bbappend_ファイルを書き込んでいるときにのみ使用されます。

_ALLOW_EMPT_${PN}_も必要ありません。 PNを空にするために使用されます。これは、他のパッケージを作成する場合にのみ役立ちます。あなたのケースでは、PNでファ​​ームウェアファイルをワットするので、ファイルをインストールできない場合は、パッケージのビルド中にbitbakeエラーを出すことをお勧めします。

_INSANE_SKIP_${PN} += "installed-vs-shipped"_も必要ありません。パッケージに入れていないファイルを_do_install_にインストールする場合にのみ必要です。通常、それらをインストールしたり、ファイルを削除したりしないことをお勧めします。

あなたのdo_install()は問題なく動作するはずです。ただし、installcpの代わりにchmodを使用することをお勧めします。これにより、所有者とグループが正しいことも確認できます。 (これのチェックは、Jethroの新しいQAチェックとして追加されます)。

_PACKAGES = "${PN}"_は必要ありません。

_${D}_定義から_FILES_${PN}_を削除します。 FILESのパスは、ターゲットのパスである必要があります(つまり、D- directoryは含みません)。

これで実行できます。

11
Anders