みつきんのメモ

組み込みエンジニアです。Interface誌で「Yocto Projectではじめる 組み込みLinux開発入門」連載中

yocto /lib/firmware以下へのファイルの追加

通常のレシピによるインストールではrootfsに反映されない

以前は、各レシピでdo_installFILES_%{PN}/lib/firmwareにファイルを追加すれば、 問題なくrootfsに反映されていたが、oe-coreにlinux-firmware_git.bbが導入されてから、状況は一変した。

linux-firmware以外のレシピからインストールされたファイルが、rootfsに反映されなくなった。

解決策

自分で作成したファームウェア/lib/firmware以下にインストールするにはlinux-firmware_git.bbappendを作成し次のようにPACKAGEを追加する。

FILESEXTRAPATHS_prepend := "${THISDIR}/files:"

SRC_URI_append = " file://myfirm.bin"
PACKAGES =+ "${PN}-myfirm"

FILES_${PN}-myfirm = "  \
 /lib/firmware/myfirm.bin"

do_install_append() {
   install -d ${D}/lib/firmware
   install -m 0644 ${WORKDIR}/myfirm.bin ${D}/lib/firmware/myfirm.bin
}

追加したパッケージはlocal.confもしくはraspberrypi.confなどのconfファイルからMACHINE_EXTRA_RRECOMMENDSなどで追加する必要がある。 bbやbbappendからの追加はうまく行かない。

local.confへ次の行を追加する。

MACHINE_EXTRA_RRECOMMENDS += "linux-firmware-myfirm"

これで/lib/firmware/myfirm.binがインストールされる。

linux-firmwareについて

通常/lib/firmwareに配置されるファイルはプロプライエタリバイナリファイルであるため、オープンソースではないライセンスが付与されている。 yoctoprojectでは、これらを一元に管理するためにlinux-firmwareのレシピですべてを管理するようにしたと推測されるが、経緯は詳しく調べていない。

とはいえ、/lib/firmwareにファイルを追加する場合は、注意が必要である。