簡體   English   中英

如何將我自己的軟件添加到 Buildroot Linux 軟件包中?

[英]How to add my own software to a Buildroot Linux package?

我正在嘗試將我自己的程序添加到使用 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.mk 持有這個:

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:

主文件:

#include <stdio.h>

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

生成文件:

CC=gcc
CFLAGS=-I.

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

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

編輯:而且我還添加了源“package/HelloWorld/Config.in”到“package/Config.in”但是當我掛載我的 rootfs.ext2 分區時,我在 /usr/bin 中找不到我的 HelloWorld 可執行文件...,我對此真的很陌生,並且沒有任何先驗知識,所以請您向我解釋一下,我錯過了什么,因為我確定我做錯了什么。

更新:程序在所需位置構建並安裝,但是當我嘗試像這樣運行它時:./helloworld,我得到:bash:./helloworld:沒有這樣的文件或目錄,它具有執行權限..這是怎么回事用它? (我把rootfs.ext2掛載到ubuntu目錄后嘗試運行,buildroot的目標arch是i368,所以應該沒問題吧?)

在構建和安裝 HelloWorld 程序並最終運行它之后,我想添加到 init.d 以便它在啟動后啟動,並將 HelloWorld 替換為不需要 X 服務器的 Qt Window,就像這里的這個東西.

靈感的主要來源在這里

2016.05 之上的最小測試示例

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

這個例子在樹中添加了包源,這對於教育目的和如果你想合並回來的方法很簡單(榮譽!),

如果您不打算合並回來(噓!),您更有可能希望使用 Buildroot 作為 git 子模塊,並且:

修改的文件:

包/配置文件

menu "Misc"
    source "package/hello/Config.in"
endmenu

包/你好/Config.in

config BR2_PACKAGE_HELLO
    bool "hello"
    help
        Hello world package.

        http://example.com

包/你好/你好.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))

包/你好/src/.gitignore

hello

包/你好/src/Makefile

CC = gcc

.PHONY: clean

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

clean:
    rm hello

包/你好/src/hello.c

#include <stdio.h>

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

用法:

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 內部:

hello

預期輸出:

hello

在 Ubuntu 16.04 中測試。

通常,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目錄后嘗試運行,buildroot的目標arch是i368,所以應該沒問題吧?)

不,它不是那樣工作的。 您不能只是掛載 rootfs.ext2 並期望從中運行程序。 這是因為 rootfs.ext2 中的程序也是針對 rootfs.ext2 中的庫編譯的,但是如果你這樣運行它,它將使用 /usr/lib 中的庫。 您必須完全使用 rootfs.ext2 引導系統,使用 qemu,或者使用 chroot 環境。 對於 chroot,您應該使用“tar”文件系統格式,而不是 ext2。 另見此處: http : //buildroot.uclibc.org/downloads/manual/manual.html#_chroot

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM