Comment append mon propre logiciel à un package Linux Buildroot?

J’essaie d’append mon propre programme à un petit Linux, créé avec Buildroot. Ce que j’ai fait jusqu’ici:

  • J’ai créé un nouveau répertoire dans mon ‘buildroot / package /’ appelé ‘HelloWorld’. A l’intérieur de ‘buildroot / package / HelloWorld’, j’ai: un répertoire Config.in, HelloWorld.mk et HelloWorld. Config.in tient ceci:

    config BR2_PACKAGE_HELLOWORLD bool "helloworld" default y help Hello world component. 

HelloWorld.mk détient ceci:

 HELLOWORLD_VERSION:= 1.0.0 HELLOWORLD_SITE:= /home/userpc/Downloads/helloworld/ HELLOWORLD_SITE_METHOD:=local HELLOWORLD_INSTALL_TARGET:=YES define HELLOWORLD_BUILD_CMDS $(MAKE) CC="$(TARGET_CC)" LD="$(TARGET_LD)" -C $(@D) all endef define HELLOWORLD_INSTALL_TARGET_CMDS $(INSTALL) -D -m 0755 $(@D)/helloworld $(TARGET_DIR)/bin endef define HELLOWORLD_PERMISSIONS /bin/helloworld f 4755 0 0 - - - - - endef $(eval $(generic-package)) 

( source d’ inspiration) Le répertoire HelloWorld contient: main.c & Makefile:

principal c :

 #include  int main() { printf("\nMain entry.\n"); return 0; } 

Makefile:

 CC=gcc CFLAGS=-I. all: *.c $(CC) -Os -Wall *.c -o helloworld # $(STRIP) helloworld clean: rm -f a.out helloworld rm -f *.o 

Edit : Et j’ai aussi ajouté le source “package / HelloWorld / Config.in” à “package / Config.in” Mais quand je monte ma partition rootfs.ext2 je ne trouve pas mon exécutable HelloWorld dans / usr / bin .., Je suis vraiment nouveau à ce sujet et je n’ai aucune connaissance préalable, alors pourriez-vous s’il vous plaît m’expliquer ce qui me manque, car je suis sûr que je fais quelque chose de mal.

MISE À JOUR: Le programme est construit et installé à l’emplacement souhaité, mais lorsque j’essaye de l’exécuter ainsi: ./helloworld, j’obtiens: bash: ./helloworld: pas de fichier ou de répertoire, il possède des droits d’exécution. avec ça? (J’essaie de l’exécuter après avoir monté le fichier rootfs.ext2 dans un répertoire ubuntu, l’archive cible de buildroot est i368, donc ça devrait aller, n’est-ce pas?)

Après avoir construit et installé le programme HelloWorld, et éventuellement l’avoir exécuté, j’aimerais append à init.d pour qu’il démarre après le démarrage et remplacer HelloWorld par une fenêtre Qt qui n’a pas besoin d’un serveur X, comme ici .

La principale source d’inspiration ici .

En général, les sources des packages buildroot sont extraites d’une archive tar (téléchargée). Ce que vous faites actuellement (placer les sources dans le package / HelloWorld) n’est pas la bonne façon de procéder.

Buildroot contient des dispositions pour les sources de paquets «locales», que vous pouvez utiliser si vous en avez réellement besoin. Vous aurez besoin de la variable HELLOWORLD_SITE_METHOD pour cela.

Veuillez vous reporter à http://buildroot.uclibc.org/downloads/manual/manual.html#adding-packages pour plus d’informations.

En outre, 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 est construit et installé à l’emplacement souhaité, mais lorsque j’essaye de l’exécuter ainsi: ./helloworld, j’obtiens: bash: ./helloworld: pas de fichier ou de répertoire, il possède des droits d’exécution. avec ça? (J’essaie de l’exécuter après avoir monté le fichier rootfs.ext2 dans un répertoire ubuntu, l’archive cible de buildroot est i368, donc ça devrait aller, n’est-ce pas?)

Non, ça ne marche pas comme ça. Vous ne pouvez pas simplement monter rootfs.ext2 et vous attendre à en lancer des programmes. C’est, entre autres, parce que les programmes de rootfs.ext2 sont compilés sur les bibliothèques également dans rootfs.ext2, mais si vous les exécutez comme cela, il utilisera les bibliothèques dans / usr / lib. Vous devez soit démarrer votre système entièrement avec rootfs.ext2, utiliser qemu, soit 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 2016.05

GitHub en amont: https://github.com/cirosantilli/buildroot/tree/in-tree-package-2016.05

Cet exemple ajoute l’arborescence source du package, qui est simple à des fins éducatives, mais pas un cas d’utilisation courant.

Dans les projets réels, il est plus probable que vous souhaitiez utiliser Buildroot comme un sous-module git et:

Fichiers modifiés:

package / Config.in:

 menu "Misc" source "package/hello/Config.in" endmenu 

package / hello / Config.in:

 config BR2_PACKAGE_HELLO bool "hello" help Hello world package. http://example.com 

package / 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 

package / hello / src / Makefile:

 CC = gcc .PHONY: clean hello: hello.c $(CC) -o '$@' '$<' clean: rm hello 

package / hello / src / hello.c:

 #include  int main(void) { puts("hello"); } 

Usage:

 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 qemu:

 hello 

Production attendue:

 hello 

Testé sous Ubuntu 16.04.