Comment ajouter mon propre logiciel à un paquet Buildroot Linux?
Je suis en train d'ajouter mon propre programme pour un petit linux, créé avec Buildroot.
Ce que j'ai fait jusqu'à présent:
- J'ai créé un nouveau répertoire à l'intérieur de mon " buildroot/package/' appelé 'HelloWorld'.
À l'intérieur 'de buildroot/package/HelloWorld' j'ai : une Config.dans, HelloWorld.mk et HelloWorld répertoire.
Config.dans tient à ceci:config BR2_PACKAGE_HELLOWORLD bool "helloworld" default y help Hello world component.
HelloWorld.mk 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))
(inspiration source)
Le HelloWorld répertoire contient: principal.c & Makefile:
principal.c :
#include <stdio.h>
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
Modifier: Et j'ai aussi ajouté la source "package/HelloWorld/Config.dans" de " package/Config.dans'
Mais quand j'ai monter mon rootfs.les partitions ext2, je ne peux pas trouver mon HelloWorld exécutable dans /usr/bin .., je suis nouveau à cela et n'ont pas de connaissance préalable, donc, pourriez-vous s'il vous plaît expliquez-moi, ce qui me manque, car je suis sûr que je suis en train de faire quelque chose de mal.
Mise à JOUR: Le programme construit et installez-le à l'emplacement souhaité, mais quand j'essaie de le lancer comme ceci: ./helloworld, j'obtiens: bash: ./helloworld: Aucun fichier ou répertoire, il a les droits d'exécution.. quel est le problème avec elle? (J'essaie de le lancer après je monte le système de fichier racine.ext2 dans un répertoire ubuntu, la cible arc pour buildroot est i368, donc ça devrait être ok, non?)
Après la construction et l'installation du programme HelloWorld, et finalement, je tiens à ajouter à init.d donc il commence après le démarrage, et de remplacer le HelloWorld avec une Fenêtre Qt qui n'a pas besoin d'un serveur X, comme cette chose ici.
La principale source d'inspiration ici.
source d'informationauteur AlexandruC
Vous devez vous connecter pour publier un commentaire.
En général, les sources de buildroot paquets sont prises à partir d'un (téléchargé) tarball. Ce que vous faites en ce moment (en plaçant les sources à l'intérieur de l'emballage/HelloWorld) n'est pas la bonne façon de procéder.
Buildroot contient des dispositions pour l' "locale" les sources de paquets, que vous pouvez utiliser si vous en avez vraiment besoin. Vous aurez besoin de la HELLOWORLD_SITE_METHOD variable.
Veuillez vous référer à http://buildroot.uclibc.org/downloads/manual/manual.html#adding-packages pour plus d'informations.
Aussi, vous n'avez pas besoin de définir HELLOWORLD_DIR, HELLOWORLD_BINARY, HELLOWORLD_TARGET_BINARY.
Mise à jour: en ce qui concerne votre question supplémentaire:
Non, il ne fonctionne pas comme ça. Vous ne pouvez pas il suffit de monter rootfs.ext2 et s'attendre à d'exécuter des programmes. C'est, entre autres, parce que les programmes à l'intérieur de rootfs.ext2 sont compilés sur les bibliothèques aussi à l'intérieur rootfs.ext2, mais si vous exécutez comme ça, il va utiliser les bibliothèques dans /usr/lib. Vous devez démarrer votre système entièrement avec le rootfs.ext2, l'utilisation de qemu, ou de l'utilisation d'un environnement chroot. Pour chroot, vous devez utiliser le 'tar' système de fichiers format ext2. Voir aussi ici:
http://buildroot.uclibc.org/downloads/manual/manual.html#_chroot
Minimale testé exemple, sur le toit de 2016.05
GitHub en amont:
https://github.com/cirosantilli/buildroot/tree/in-tree-package-2016.05
Cet exemple ajoute le paquet source dans l'arborescence, ce qui est simple pour l'enseignement, mais non pas un cas d'utilisation.
Dans des projets réels, il est plus probable que vous aurez envie de l'utilisation de Buildroot comme un git sous-module et soit:
BR2_EXTERNAL
comme illustré à: https://github.com/cirosantilli/buildroot/tree/out-of-tree-2016.05*_OVERRIDE_SRCDIR
+ autres submodules comme l'explique: Comment faire pour modifier la source de Buildroot paquets pour le développement de package?Fichiers modifiés:
package/Config.dans:
package/bonjour/Config.dans:
package/bonjour/bonjour.mk:
package/bonjour/src/.gitignore:
package/bonjour/src/Makefile:
package/bonjour/src/bonjour.c:
Utilisation:
À partir de l'intérieur de qemu:
Résultat attendu:
Testé sous Ubuntu 16.04.