6
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

#NervesJPAdvent Calendar 2024

Day 2

BuildrootのTARGETコンパイルに必要なHOSTパッケージについて

Last updated at Posted at 2024-11-30

はじめに

Nervesのポーティングを行っていて、BuildrootのHOSTパッケージの事で、気づいた事があったので、メモしておきます。

ビルド時にエラー発生

U-Bootのビルド時に、以下のエラーが発生しました。

  HOSTCC  tools/mkeficapsule
tools/mkeficapsule.c:21:10: fatal error: gnutls/gnutls.h: No such file or directory
   21 | #include <gnutls/gnutls.h>
      |          ^~~~~~~~~~~~~~~~~
compilation terminated.

HOSTCCとなっているので、U-Boot本体ではなく、ビルドを行う環境を作るためのコンパイルが失敗しています。

ChatGPTで調べてみると、

BR2_PACKAGE_HOST_GNUTLS=y

を追加する事で解決する。と言っています。
確かに、これを追加すると、この部分は解決したのですが、今度は、他の類似したエラーが発生します。
根本解決になってません。

それに、そもしも、BR2_PACKAGE_HOST_*のパッケージを記述しなくても、ビルドは通るはずです。

なぜか?

このエラーは、BR2_TARGET_UBOOT_CUSTOM_REPO_URL=で指定していたレポジトリーを他のレポジトリーに変更して、
makeを実行した時に発生しました。

buildrootには、BR2_TARGET_UBOOTをビルドするときに、HOSTに必要なパッケージが何かを調べて、必要なHOSTパッケージをインストールしてから、ビルドを行います。

BR2_TARGET_UBOOT_CUSTOM_REPO_URLを変更すると、当然、ビルドに必要なパッケージも変わります。
単にmakeを実行するだけでは、HOSTパッケージがインストールされていないので、エラーが発生します。

解決策

ChatGPTで調べてみたんですが、言われたとおりにやっても解決できませんでした。

結局は、artifactを削除して、再度ビルドする事で解決しました。

おまけ

試行錯誤している時に、buildrootのtipsを見つけたので、メモしておきます。
特定のパッケージをリビルドしたい時には、以下のコマンドを実行します。
以下は、u-bootをリビルドする例です。

make uboot-dirclean
make uboot-rebuild

savedefconfigを実行すると、.configファイルが最小限の形式に圧縮されて保存されます。
これを実行すると、nerves_defconfigが整理された順で、不要な記述を削除した記述になりました。

make savedefconfig

おまけ2

tools/mkeficapsule.c:21:10: fatal error: gnutls/gnutls.h: No such file or directory
   21 | #include <gnutls/gnutls.h>
      |          ^~~~~~~~~~~~~~~~~
compilation terminated.
make[3]: *** [scripts/Makefile.host:95: tools/mkeficapsule] Error 1
make[2]: *** [Makefile:1858: tools] Error 2
make[1]: *** [package/pkg-generic.mk:283: /home/masa/nerves/nerves_system_ebaz4205/.nerves/artifacts/nerves_system_ebaz4205-portable-0.0.1/build/uboot-xilinx-v2024.1/.stamp_built] エラー 2
make: *** [Makefile:23: _all] エラー 2

このエラーは、

BR2_PACKAGE_HOST_GNUTLS=y

の追加では、解決せず、Build環境に次のパッケージをインストールすることで解決しました。

sudo apt install libgnutls28-dev

おまけ3

このビルドエラーの本当の原因は、パッケージのバグでした。
詳しくは、こちらを参照してください。
この記事の方法で解決するのが正当だと思います。

まとめ

  • 必要なHOSTのパッケージを自動的にbuildする機能がある。
  • 今回は、libgnutls28-devをBuild環境にインストールすることで解決した。
  • dircleanと、savedefconfigを見つけました。
6
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?