In generale, i sorgenti per i pacchetti buildroot sono presi da un tarball (scaricato). Quello che stai facendo in questo momento (inserire i sorgenti all'interno di package/HelloWorld) non è il modo giusto di procedere.
Buildroot ha disposizioni per le fonti dei pacchetti "locali", che potresti usare se ne hai davvero bisogno. Avrai bisogno della variabile HELLOWORLD_SITE_METHOD per questo.
Per ulteriori informazioni, fai riferimento a http://buildroot.uclibc.org/downloads/manual/manual.html#adding-packages.
Inoltre, non è necessario definire HELLOWORLD_DIR, HELLOWORLD_BINARY, HELLOWORLD_TARGET_BINARY.
Aggiornamento:in merito alla tua domanda aggiuntiva:
AGGIORNAMENTO:Il programma viene compilato e installato nella posizione desiderata, ma quando provo a eseguirlo in questo modo:./helloworld, ottengo:bash:./helloworld:Nessun file o directory di questo tipo, ha i diritti di esecuzione .. qual è il problema con esso ? (Provo a eseguirlo dopo aver montato therootfs.ext2 in una directory Ubuntu, l'arco di destinazione per buildroot è i368, quindi dovrebbe essere ok, giusto?)
No, non funziona così. Non puoi semplicemente montare rootfs.ext2 e aspettarti di eseguire programmi da esso. Questo è, tra l'altro, perché i programmi all'interno di rootfs.ext2 sono compilati contro le librerie anche all'interno di rootfs.ext2, ma se lo esegui in questo modo utilizzerà le librerie in /usr/lib. Devi avviare il tuo sistema interamente con rootfs.ext2, usare qemu o usare un ambiente chroot. Per chroot, dovresti usare il formato del filesystem 'tar', non ext2. Vedi anche qui:http://buildroot.uclibc.org/downloads/manual/manual.html#_chroot
Esempio minimo testato sopra 2016.05
GitHub upstream:https://github.com/cirosantilli/buildroot/tree/in-tree-package-2016.05
Questo esempio aggiunge l'origine del pacchetto nell'albero, che è semplice per scopi didattici e la strada da percorrere se vuoi unire di nuovo (complimenti!),
Se non intendi eseguire il merge (booooh!), è più probabile che tu voglia utilizzare Buildroot come sottomodulo git e:
- un pacchetto fuori dall'albero con
BR2_EXTERNAL
come mostrato in:https://github.com/cirosantilli/buildroot/tree/out-of-tree-2016.05 *_OVERRIDE_SRCDIR
+ altri sottomoduli git come spiegato in:Come modificare l'origine dei pacchetti Buildroot per lo sviluppo dei pacchetti?
File modificati:
pacchetto/Config.in
menu "Misc"
source "package/hello/Config.in"
endmenu
pacchetto/ciao/Config.in
config BR2_PACKAGE_HELLO
bool "hello"
help
Hello world package.
http://example.com
pacchetto/ciao/ciao.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))
pacchetto/ciao/src/.gitignore
hello
pacchetto/ciao/src/Makefile
CC = gcc
.PHONY: clean
hello: hello.c
$(CC) -o '[email protected]' '$<'
clean:
rm hello
pacchetto/ciao/src/ciao.c
#include <stdio.h>
int main(void) {
puts("hello");
}
Utilizzo:
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
Dall'interno di qemu:
hello
Output previsto:
hello
Testato in Ubuntu 16.04.