一般に、buildroot パッケージのソースは (ダウンロードされた) tarball から取得されます。あなたが今行っていること (パッケージ/HelloWorld 内にソースを配置すること) は、正しい方法ではありません。
Buildroot には、本当に必要な場合に使用できる「ローカル」パッケージ ソースの規定があります。そのためには、HELLOWORLD_SITE_METHOD 変数が必要です。
詳細については、http://buildroot.ulibc.org/downloads/manual/manual.html#adding-packages を参照してください。
また、HELLOWORLD_DIR、HELLOWORLD_BINARY、HELLOWORLD_TARGET_BINARY を定義する必要はありません。
更新:追加の質問について:
<ブロック引用>更新:プログラムはビルドされ、目的の場所にインストールされますが、実行しようとすると、次のようになります:./helloworld、次のようになります:bash:./helloworld:No such file or directory, it hasexecution rights.. 何が問題なのか? (rootfs.ext2 を ubuntu ディレクトリにマウントしてから実行しようとしましたが、buildroot のターゲット アーキテクチャは i368 なので、問題ないはずですよね?)
いいえ、そのようには機能しません。 rootfs.ext2 をマウントしてそこからプログラムを実行することは期待できません。これはとりわけ、rootfs.ext2 内のプログラムが rootfs.ext2 内のライブラリーに対してコンパイルされるためですが、そのように実行すると、/usr/lib 内のライブラリーが使用されます。システム全体を rootfs.ext2 で起動するか、qemu を使用するか、chroot 環境を使用する必要があります。 chroot の場合、ext2 ではなく「tar」ファイルシステム形式を使用する必要があります。ここも参照してください:http://buildroot.ulibc.org/downloads/manual/manual.html#_chroot
2016.05 上での最小限のテスト例
GitHub アップストリーム:https://github.com/cirosantilli/buildroot/tree/in-tree-package-2016.05
この例では、パッケージ ソースをツリー内に追加します。これは、教育目的で単純であり、マージ バックする場合の方法です (称賛!)。
マージバックするつもりがない場合は (boooo!)、Buildroot を git サブモジュールとして使用し、次のいずれかを使用する可能性が高くなります。
BR2_EXTERNAL
のツリー外パッケージ https://github.com/cirosantilli/buildroot/tree/out-of-tree-2016.05に示されているように*_OVERRIDE_SRCDIR
+ で説明されているその他の git サブモジュール:パッケージ開発のために Buildroot パッケージのソースを変更する方法
変更されたファイル:
パッケージ/Config.in
menu "Misc"
source "package/hello/Config.in"
endmenu
パッケージ/hello/Config.in
config BR2_PACKAGE_HELLO
bool "hello"
help
Hello world package.
http://example.com
パッケージ/hello/hello.mk
################################################################################
#
# hello
#
################################################################################
HELLO_VERSION = 1.0
HELLO_SITE = ./package/hello/src
HELLO_SITE_METHOD = local
define HELLO_BUILD_CMDS
$(MAKE) CC="$(TARGET_CC)" LD="$(TARGET_LD)" -C $(@D)
endef
define HELLO_INSTALL_TARGET_CMDS
$(INSTALL) -D -m 0755 $(@D)/hello $(TARGET_DIR)/usr/bin
endef
$(eval $(generic-package))
パッケージ/hello/src/.gitignore
hello
パッケージ/hello/src/Makefile
CC = gcc
.PHONY: clean
hello: hello.c
$(CC) -o '[email protected]' '$<'
clean:
rm hello
パッケージ/hello/src/hello.c
#include <stdio.h>
int main(void) {
puts("hello");
}
使い方:
make qemu_x86_64_defconfig
echo 'BR2_PACKAGE_HELLO=y' >> .config
make BR2_JLEVEL=2
qemu-system-x86_64 -M pc -kernel output/images/bzImage -drive file=output/images/rootfs.ext2,if=virtio,format=raw -append root=/dev/vda -net nic,model=virtio -net user
qemu 内から:
hello
期待される出力:
hello
Ubuntu 16.04 でテスト済み。