En général, les sources des packages buildroot proviennent d'une archive tar (téléchargée). Ce que vous faites actuellement (placer les sources dans package/HelloWorld) n'est pas la bonne façon de procéder.
Buildroot a des dispositions pour les sources de paquets "locales", que vous pouvez utiliser si vous en avez vraiment besoin. Vous aurez besoin de la variable HELLOWORLD_SITE_METHOD pour cela.
Veuillez consulter http://buildroot.uclibc.org/downloads/manual/manual.html#adding-packages pour plus d'informations.
De plus, vous n'avez pas besoin de définir HELLOWORLD_DIR, HELLOWORLD_BINARY, HELLOWORLD_TARGET_BINARY.
Mise à jour :concernant votre question supplémentaire :
MISE À JOUR :Le programme se construit et s'installe à l'emplacement souhaité, mais lorsque j'essaie de l'exécuter comme ceci :./helloworld, j'obtiens :bash :./helloworld :aucun fichier ou répertoire de ce type, il a des droits d'exécution. ? (J'essaie de l'exécuter après avoir monté therootfs.ext2 dans un répertoire ubuntu, l'arche cible pour buildroot est i368, donc ça devrait aller, non ?)
Non, ça ne marche pas comme ça. Vous ne pouvez pas simplement monter rootfs.ext2 et vous attendre à exécuter des programmes à partir de celui-ci. C'est, entre autres, parce que les programmes à l'intérieur de rootfs.ext2 sont compilés avec les bibliothèques également à l'intérieur de rootfs.ext2, mais si vous l'exécutez ainsi, il utilisera les bibliothèques de /usr/lib. Vous devez soit démarrer votre système entièrement avec rootfs.ext2, utiliser qemu ou utiliser un environnement chroot. Pour chroot, vous devez utiliser le format de système de fichiers 'tar', pas ext2. Voir aussi ici :http://buildroot.uclibc.org/downloads/manual/manual.html#_chroot
Exemple testé minimal en plus de 2016.05
GitHub en amont :https://github.com/cirosantilli/buildroot/tree/in-tree-package-2016.05
Cet exemple ajoute la source du paquet dans l'arborescence, ce qui est simple à des fins éducatives et la marche à suivre si vous souhaitez fusionner (bravo !),
Si vous n'avez pas l'intention de fusionner (booooh !), il est plus probable que vous souhaitiez utiliser Buildroot comme sous-module git et soit :
- un package hors arbre avec
BR2_EXTERNAL
comme indiqué sur :https://github.com/cirosantilli/buildroot/tree/out-of-tree-2016.05 *_OVERRIDE_SRCDIR
+ autres sous-modules git comme expliqué à :Comment modifier la source des packages Buildroot pour le développement de packages ?
Fichiers modifiés :
package/Config.in
menu "Misc"
source "package/hello/Config.in"
endmenu
package/bonjour/Config.in
config BR2_PACKAGE_HELLO
bool "hello"
help
Hello world package.
http://example.com
paquet/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))
paquet/hello/src/.gitignore
hello
paquet/hello/src/Makefile
CC = gcc
.PHONY: clean
hello: hello.c
$(CC) -o '[email protected]' '$<'
clean:
rm hello
paquet/hello/src/hello.c
#include <stdio.h>
int main(void) {
puts("hello");
}
Utilisation :
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
De l'intérieur de qemu :
hello
Sortie attendue :
hello
Testé dans Ubuntu 16.04.