Saltar al contenido

¿Cómo agregar mi propio software a un paquete de Buildroot Linux?

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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *