如何将我自己的软件添加到Buildroot Linux包中?
我正在尝试将我自己的程序添加到一个使用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/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))
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
+其他git子模块,如以下所述:*\u OVERRIDE\u SRCDIR
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二进制文件时,我得到了相同的消息。太棒了。谢谢你的发帖