Solución:
En general, las fuentes de los paquetes buildroot se toman de un tarball (descargado). Lo que está haciendo en este momento (colocar las fuentes dentro del paquete / HelloWorld) no es la forma correcta de proceder.
Buildroot tiene disposiciones para las fuentes de paquetes ‘locales’, que puede usar si realmente lo necesita. Necesitará la variable HELLOWORLD_SITE_METHOD para eso.
Consulte http://buildroot.uclibc.org/downloads/manual/manual.html#adding-packages para obtener más información.
Además, no es necesario definir HELLOWORLD_DIR, HELLOWORLD_BINARY, HELLOWORLD_TARGET_BINARY.
Actualización: con respecto a su pregunta adicional:
ACTUALIZACIÓN: El programa se compila e instala en la ubicación deseada, pero cuando trato de ejecutarlo así: ./helloworld, obtengo: bash: ./helloworld: No existe ese archivo o directorio, tiene derechos de ejecución … ¿cuál es el problema? ¿con eso? (Intento ejecutarlo después de montar rootfs.ext2 en un directorio de ubuntu, el arco de destino para buildroot es i368, así que debería estar bien, ¿verdad?)
No, no funciona así. No puede simplemente montar rootfs.ext2 y esperar ejecutar programas desde él. Esto se debe, entre otras cosas, a que los programas dentro de rootfs.ext2 se compilan con las bibliotecas también dentro de rootfs.ext2, pero si lo ejecuta así, usará las bibliotecas en / usr / lib. Tienes que arrancar tu sistema por completo con rootfs.ext2, usar qemu o usar un entorno chroot. Para chroot, debe usar el formato del sistema de archivos ‘tar’, no ext2. Véase también aquí: http://buildroot.uclibc.org/downloads/manual/manual.html#_chroot
Ejemplo mínimo probado además de 2016.05
GitHub aguas arriba: https://github.com/cirosantilli/buildroot/tree/in-tree-package-2016.05
Este ejemplo agrega el código fuente del paquete en el árbol, que es simple para fines educativos y el camino a seguir si desea fusionar nuevamente (¡felicitaciones!),
Si no tiene la intención de fusionar nuevamente (¡booooh!), Es más probable que desee usar Buildroot como un submódulo de git y:
- un paquete fuera del árbol con
BR2_EXTERNAL
como se muestra en: https://github.com/cirosantilli/buildroot/tree/out-of-tree-2016.05 -
*_OVERRIDE_SRCDIR
+ otros submódulos de git como se explica en: ¿Cómo modificar la fuente de los paquetes Buildroot para el desarrollo de paquetes?
Archivos modificados:
paquete / Config.in
menu "Misc"
source "package/hello/Config.in"
endmenu
paquete / hola / Config.in
config BR2_PACKAGE_HELLO
bool "hello"
help
Hello world package.
http://example.com
paquete / hola / hola.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))
paquete / hola / src / .gitignore
hello
paquete / hola / src / Makefile
CC = gcc
.PHONY: clean
hello: hello.c
$(CC) -o '[email protected]' '$<'
clean:
rm hello
paquete / hola / src / hola.c
#include <stdio.h>
int main(void) {
puts("hello");
}
Uso:
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
Desde el interior de qemu:
hello
Rendimiento esperado:
hello
Probado en Ubuntu 16.04.