首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将我自己的软件添加到Buildroot包中?

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

Stack Overflow用户
提问于 2013-11-05 07:29:29
回答 2查看 37.8K关注 0票数 24

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

  • 我在我的'buildroot/package/‘中创建了一个名为“HelloWorld”的新目录。在'buildroot/package/ HelloWorld‘中,我有一个Config.in、HelloWorld.mk和HelloWorld目录。Config.in认为: 配置BR2_PACKAGE_HELLOWORLD bool "helloworld“默认y helloworld组件。

HelloWorld.mk认为:

代码语言:javascript
复制
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 来源) HelloWorld目录包含: main.c & Makefile:

main.c :

代码语言:javascript
复制
#include <stdio.h>

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

Makefile:

代码语言:javascript
复制
CC=gcc
CFLAGS=-I.

all: *.c
        $(CC) -Os -Wall  *.c -o helloworld
#       $(STRIP) helloworld

clean:
        rm -f a.out helloworld
        rm -f *.o

编辑:我还在'package/Config.in‘中添加了源代码"package/ HelloWorld /Config.in“,但是当我安装分区时,我无法在/usr/bin中找到自己的HelloWorld可执行文件.,我对此非常陌生,也没有任何先验知识,所以请您向我解释一下,我缺少什么,因为我肯定做错了什么。

UPDATE:程序构建并安装在所需的位置,但是当我尝试像这样运行:./helloworld,I get:bash: ./helloworld: No such file or directory,它有执行权限。这是怎么回事?(我试图在将rootfs.ext2挂载到ubuntu目录后运行它,构建器的目标是i386,所以应该可以,对吧?)

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

灵感的主要来源这里

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-12-05 15:13:21

在2016.05上的最小测试示例

上游GitHub:https://github.com/cirosantilli/buildroot/tree/in-tree-package-2016.05

此示例在树中添加包源,这对于教育目的和如果您想要合并回(kudos!)的方法都很简单

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

修改的文件:

包裹/配置

代码语言:javascript
复制
menu "Misc"
    source "package/hello/Config.in"
endmenu

包/hello/Config.in

代码语言:javascript
复制
config BR2_PACKAGE_HELLO
    bool "hello"
    help
        Hello world package.

        http://example.com

包裹/hello/hello.mk

代码语言:javascript
复制
################################################################################
#
# 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

代码语言:javascript
复制
hello

包/hello/src/Makefile

代码语言:javascript
复制
CC = gcc

.PHONY: clean

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

clean:
    rm hello

包/hello/src/hello.c

代码语言:javascript
复制
#include <stdio.h>

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

用法:

代码语言:javascript
复制
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

来自qemu内部:

代码语言:javascript
复制
hello

预期产出:

代码语言:javascript
复制
hello

在Ubuntu 16.04测试。

票数 10
EN

Stack Overflow用户

发布于 2013-11-05 08:56:08

通常,buildroot包的来源来自(下载) tarball。您现在正在做的事情(将源放在package/HelloWorld中)并不是正确的方法。

Buildroot确实提供了“本地”包源,如果你真的需要的话,你可以使用它。为此您将需要HELLOWORLD_SITE_METHOD变量。

有关更多信息,请参考http://buildroot.uclibc.org/downloads/manual/manual.html#adding-packages

另外,您不需要定义HELLOWORLD_DIR、HELLOWORLD_BINARY、HELLOWORLD_TARGET_BINARY。

最新情况:关于您的补充问题:

更新:程序构建并安装在所需的位置,但当我试图像这样运行它:./helloworld时,我得到: bash:./helloworld:没有这样的文件或目录,它具有执行权限。这是怎么回事?(我试图在将rootfs.ext2挂载到ubuntu目录后运行它,构建器的目标是i368,所以应该可以,对吧?)

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

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19783795

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档