如何将我自己的软件添加到Buildroot Linux包中?

如何将我自己的软件添加到Buildroot Linux包中?,linux,qt,makefile,buildroot,uclinux,Linux,Qt,Makefile,Buildroot,Uclinux,我正在尝试将我自己的程序添加到一个使用Buildroot创建的小型linux中。 到目前为止我所做的: 我在“buildroot/package/”中创建了一个名为“HelloWorld”的新目录。 在“buildroot/package/HelloWorld”中,我有一个Config.in、HelloWorld.mk和HelloWorld目录。 Config.in包含以下内容: config BR2_PACKAGE_HELLOWORLD bool "helloworld"

我正在尝试将我自己的程序添加到一个使用Buildroot创建的小型linux中。 到目前为止我所做的:

  • 我在“buildroot/package/”中创建了一个名为“HelloWorld”的新目录。 在“buildroot/package/HelloWorld”中,我有一个Config.in、HelloWorld.mk和HelloWorld目录。 Config.in包含以下内容:

        config BR2_PACKAGE_HELLOWORLD
        bool "helloworld"
        default y
        help
                Hello world component.
    
    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))
    
HelloWorld.mk包含以下内容:

    config BR2_PACKAGE_HELLOWORLD
    bool "helloworld"
    default y
    help
            Hello world component.
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))
(灵感) HelloWorld目录包含:main.c和Makefile:

main.c:

#include <stdio.h>

int main()
{
        printf("\nMain entry.\n");
        return 0;
}
编辑:我还将源代码“package/HelloWorld/Config.in”添加到了“package/Config.in” 但是当我挂载rootfs.ext2分区时,我在/usr/bin.中找不到我的HelloWorld可执行文件,我对此非常陌生,也没有任何先验知识,所以请你解释一下,我缺少什么,因为我肯定我做错了什么

更新:程序在所需位置生成和安装,但当我尝试这样运行它时:./helloworld,我得到:bash:./helloworld:没有这样的文件或目录,它有执行权限。。怎么了?(我试着在我将rootfs.ext2装入ubuntu目录后运行它,buildroot的目标arch是i368,所以应该可以,对吧?)

在构建和安装HelloWorld程序并最终运行它之后,我想将其添加到init.d中,以便它在引导后启动,并用一个不需要X服务器的Qt窗口替换HelloWorld,就像这样


灵感的主要来源。

一般来说,buildroot软件包的来源来自(下载的)tarball。您现在所做的(将源代码放在package/HelloWorld中)不是正确的方法

Buildroot确实提供了“本地”包源,如果确实需要,您可以使用这些源。为此,您需要HELLOWORLD\u SITE\u方法变量

有关更多信息,请参阅

此外,您不需要定义HELLOWORLD\u DIR、HELLOWORLD\u BINARY、HELLOWORLD\u TARGET\u BINARY

更新:关于您的补充问题:

更新:程序在所需位置生成并安装,但当我尝试运行它时 像这样:./helloworld,我得到:bash:./helloworld:没有这样的文件或目录,它有 执行权。。怎么了?(我尝试在安装后运行它 将rootfs.ext2放入ubuntu目录中,buildroot的目标arch是i368,因此它应该 没事吧

不,它不是那样工作的。您不能仅仅挂载rootfs.ext2并期望从中运行程序。除其他外,这是因为rootfs.ext2中的程序也是根据rootfs.ext2中的库编译的,但是如果这样运行,它将使用/usr/lib中的库。您要么完全使用rootfs.ext2引导系统,要么使用qemu,要么使用chroot环境。对于chroot,应该使用“tar”文件系统格式,而不是ext2。另见此处:

2016.05之后的最小测试示例

GitHub上游:

本例在树中添加了包源代码,这对于教育目的来说很简单,如果您想合并回去,那么方法也很简单(很好!)

如果您不打算合并回(booooh!),则更可能希望将Buildroot用作git子模块,并且:

  • 带有
    BR2_EXTERNAL
    的树外软件包,如所示:
  • *\u OVERRIDE\u SRCDIR
    +其他git子模块,如以下所述:
修改的文件:

package/Config.in

menu "Misc"
    source "package/hello/Config.in"
endmenu
config BR2_PACKAGE_HELLO
    bool "hello"
    help
        Hello world package.

        http://example.com
package/hello/Config.in

menu "Misc"
    source "package/hello/Config.in"
endmenu
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))
包/hello/src/.gitignore

hello
包/hello/src/Makefile

CC = gcc

.PHONY: clean

hello: hello.c
    $(CC) -o '$@' '$<'

clean:
    rm hello
从qemu内部:

hello
预期产出:

hello

在Ubuntu 16.04中测试。

我已经编辑了我的问题,包括我所做的修改,但是,仍然没有发生任何事情,我应该在哪里找到构建程序。。。我知道这可能不是将源代码放在package/HelloWorld(实际上是“package/HelloWorld/HelloWorld”)中的最佳方式,但目前我不会把它放在其他地方,因为我是在本地开发的。您也可以使用源目录覆盖方法进行本地开发:“没有这样的文件或目录”有时是由不兼容的二进制文件引起的。我有一个MIPS I路由器,当我尝试执行一个MIPS 32二进制文件时,我得到了相同的消息。太棒了。谢谢你的发帖