組込みLinux am335x-pm-firmware.elf’, needed by 解決方法

2022年11月時点です。

make[4]: *** No rule to make target ‘/lib/firmware/am335x-pm-firmware.elf’, needed by ‘drivers/base/firmware_loader/builtin/am335x-pm-firmware.elf.gen.o’. Stop.
make[4]: *** Waiting for unfinished jobs….
CC drivers/gpu/drm/drm_vma_manager.o
UPD drivers/base/firmware_loader/builtin/am335x-pm-firmware.elf.gen.S となった。

このエラーでいろいろトラブったのでメモしておきます。 検索した内容は古くて動作しなかったり、せっかくのpm機能(Power management)を削除してビルドする方法しか出てきませんでした。

解決方法は簡単、

変数の値を確認

このエラーを解決しても次のファイルがないとまたエラーになります。 私の場合は、ファイルが4個追加が必要でした。

  1. ~/BBB_Workspace/Downloads/linux/arch/arm/configs/bb.org_config をviで開き、
  2. 以下変数を確認CONFIG_EXTRA_FIRMWARE=”am335x-pm-firmware.elf am335x-bone-scale-data.bin am335x-evm-scale-data.bin am43x-evm-scale-data.bin”

ファイル群のダウンロード

  1. =の右辺に書かれているファイルを、https://git.ti.com/cgit/processor-firmware/ti-amx3-cm3-pm-firmware/tree/bin?id=7eb9c0856a9e8b3b42bf64f761da135852b8eea7 からダウンロードして

指定ディレクトリへファイル群をコピー (これで解決)

  1. エラーで表示されているルート下の/lib/firmware/にコピーする。
  2. /lib/firmware/ディレクトリがなければコピーする前に、sudo mkdirでディレクトリを作成しておく。
  3. /lib/firmware/にアクセス出来ないかもしれないので、sudo make ARCH=arm … でsudo実行しました。

これだけで解決しました。 まさか、/lib/firmware/が絶対アドレスなんて思いませんでした。

あまり良くない他の解決方法 (無効化する)

このpmは昔はなかった新しいPower Managementの機能のEXTRA_FIRMWAREです。 なくても問題ようです。 でも私は無効化は最後の最後の手段(Final resolution)と思っていました。 その理由は、今後も他のArchtectureでも新しい機能(EXTRA_FIRMWARE)は必要になると思いますが、今回解決出来なければ、将来も自力で解決できず、新しい良い機能を使用できない。 しかし、どうしてもという場合は、環境設定を変更します。 方法は、menuconfig内で、CONFIG_EXTRA_FIRMWAREを検索し、メニューのどこにあるか表示されるので、そこに書かれているファイル群を削除する。

CONFIG_EXTRA_FIRMWARE=”am335x-pm-firmware.elf am335x-bone-scale-data.bin am335x-evm-scale-data.bin am43x-evm-scale-data.bin”

上記のように、Main menuから入っていき、『(am335x-pm-firmware.elf …. 』を選択すると、以下の画面に入ります。 そこで、表示されているファイル名を全て削除すると、needed byエラーはなくなりビルドされると書かれています。 検証していないので解りませんが、将来必要になるかもしれないので、念の為書いておきます。

おまけ:解決しなかった方法(am335x-pm-firmware.elf’, needed by)

arago-project サイトがshutdownされています

https://elinux.org/Building_BBB_Kernelに書いてあった解決方法は、arago-projectは2022年8月でshutdownとなったそう。どうりでConnection timed outとなるんだ。

sudo wget http://arago-project.org/git/projects/?p=am33x-cm3.git\;a=blob_plain\;f=bin/am335x-pm-firmware.bin\;hb=HEAD -O kernel/firmware/am335x-pm-firmware.bin

--2022-11-15 14:28:38-- http://arago-project.org/git/projects/?p=am33x-cm3.git;a=blob_plain;f=bin/am335x-pm-firmware.bin;hb=HEAD
Resolving arago-project.org (arago-project.org)… 184.73.161.183
Connecting to arago-project.org (arago-project.org)|184.73.161.183|:80… failed: Connection timed out.
Retrying.
(try:2)
(try:3)
(try:4)となったので中止

beagleboardのサイトやTIのサイトにも解決策として書いてあったので、何で止まるのか不思議で、timeoutの設定やretry回数設定やDNS接続設定等めちゃくちゃ調べました。が、サイト自体shutdownしているなんて。 これで2日無駄にしました。

解決策は、上の手順にある通り、https://git.ti.com/cgit/processor-firmware/ti-amx3-cm3-pm-firmware/tree/bin から各種ファイルを入手して、ルート下の/lib/firmware/に入れておくと解決した。 しかし、この/lib/firmware/かどうかは、エラーメッセージを見て要確認。

am335x-pm-firmware.elf.gen.S のパス書き換え

最初のエラーは『’/lib/firmware/am335x-pm-firmware.elf’, needed by ‘drivers/base/firmware_loader/builtin/am335x-pm-firmware.elf.gen.o’. Stop.』となったので、am335x-pm-firmware.elf.gen.oのもととなる.Sファイルのパスをファイルを入手して保存した以下のように絶対パスにした。 しかし、再度ビルドしても同じエラーが表示され、am335x-pm-firmware.elf.gen.Sファイルを除くと、パスがもとに戻っていた。 どうもam335x-pm-firmware.elf.gen.Sはビルド中にどこかからかコピーされるようで、am335x-pm-firmware.elf.gen.Sに書かれているルート下の/lib/firmware/に.elfファイルを入れるとエラーが解決した。 /lib/firmware/が相対アドレスなのかどうかがわからず、相対アドレスなら、ビルド中の/linux/ディレクトリ下なのか、am335x-pm-firmware.elf.gen.oのあるディレクトリ下なのかわからず、まさかルート下の絶対アドレスと思っていなかった。 分ったことは、./や../や~/等ない場合は素直にまずルート下のフルパスとして考えたらいい事が分った。

~/BBB_Workspace/Downloads/linux/drivers/base/firmware_loader/builtin/am335x-pm-firmware.elf.gen.S の以下のパスを変更

_fw_am335x_pm_firmware_elf_bin:
.incbin “/home/ichiri/BBB_Workspace/Downloads/linux/lib/firmware/am335x-pm-firmware.elf”

コメント

タイトルとURLをコピーしました