Im Allgemeinen werden die Quellen für buildroot-Pakete einem (heruntergeladenen) Tarball entnommen. Was Sie gerade tun (Platzieren der Quellen in Paket/HelloWorld), ist nicht der richtige Weg, um fortzufahren.
Buildroot hat Vorkehrungen für "lokale" Paketquellen, die Sie verwenden könnten, wenn Sie es wirklich brauchen. Dafür benötigen Sie die Variable HELLOWORLD_SITE_METHOD.
Weitere Informationen finden Sie unter http://buildroot.uclibc.org/downloads/manual/manual.html#adding-packages.
Außerdem müssen Sie HELLOWORLD_DIR, HELLOWORLD_BINARY, HELLOWORLD_TARGET_BINARY nicht definieren.
Update:bezüglich Ihrer Zusatzfrage:
UPDATE:Das Programm wird am gewünschten Ort erstellt und installiert, aber wenn ich versuche, es wie folgt auszuführen:./helloworld, erhalte ich:bash:./helloworld:Keine solche Datei oder kein solches Verzeichnis, es hat Ausführungsrechte.. was ist los damit ? (Ich versuche es auszuführen, nachdem ich therootfs.ext2 in ein Ubuntu-Verzeichnis gemountet habe, der Ziel-Arch für buildroot ist i368, also sollte es in Ordnung sein, oder?)
Nein, so geht das nicht. Sie können nicht einfach rootfs.ext2 mounten und erwarten, Programme davon auszuführen. Dies liegt unter anderem daran, dass die Programme in rootfs.ext2 gegen die Bibliotheken auch in rootfs.ext2 kompiliert werden, aber wenn Sie es so ausführen, werden die Bibliotheken in /usr/lib verwendet. Sie müssen Ihr System entweder vollständig mit rootfs.ext2 booten, qemu verwenden oder eine Chroot-Umgebung verwenden. Für Chroot sollten Sie das 'tar'-Dateisystemformat verwenden, nicht ext2. Siehe auch hier:http://buildroot.uclibc.org/downloads/manual/manual.html#_chroot
Minimal getestetes Beispiel auf 2016.05
GitHub-Upstream:https://github.com/cirosantilli/buildroot/tree/in-tree-package-2016.05
Dieses Beispiel fügt die Paketquelle in den Baum ein, was für Bildungszwecke einfach ist und der richtige Weg ist, wenn Sie wieder zusammenführen möchten (Kudos!),
Wenn Sie nicht beabsichtigen, wieder zusammenzuführen (booooh!), ist es wahrscheinlicher, dass Sie Buildroot als Git-Submodul verwenden möchten und entweder:
- ein Out-of-Tree-Paket mit
BR2_EXTERNAL
wie gezeigt unter:https://github.com/cirosantilli/buildroot/tree/out-of-tree-2016.05 *_OVERRIDE_SRCDIR
+ andere Git-Submodule, wie erklärt unter:Wie ändert man die Quelle von Buildroot-Paketen für die Paketentwicklung?
Geänderte Dateien:
Paket/Config.in
menu "Misc"
source "package/hello/Config.in"
endmenu
Paket/hello/Config.in
config BR2_PACKAGE_HELLO
bool "hello"
help
Hello world package.
http://example.com
Paket/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))
Paket/hello/src/.gitignore
hello
Paket/hello/src/Makefile
CC = gcc
.PHONY: clean
hello: hello.c
$(CC) -o '[email protected]' '$<'
clean:
rm hello
Paket/hello/src/hello.c
#include <stdio.h>
int main(void) {
puts("hello");
}
Verwendung:
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
Von innerhalb von qemu:
hello
Erwartete Ausgabe:
hello
Getestet in Ubuntu 16.04.