GNU/Linux >> Linux の 問題 >  >> Linux

独自のソフトウェアを Buildroot Linux パッケージに追加するにはどうすればよいですか?

一般に、buildroot パッケージのソースは (ダウンロードされた) tarball から取得されます。あなたが今行っていること (パッケージ/HelloWorld 内にソースを配置すること) は、正しい方法ではありません。

Buildroot には、本当に必要な場合に使用できる「ローカル」パッケージ ソースの規定があります。そのためには、HELLOWORLD_SITE_METHOD 変数が必要です。

詳細については、http://buildroot.ulibc.org/downloads/manual/manual.html#adding-packages を参照してください。

また、HELLOWORLD_DIR、HELLOWORLD_BINARY、HELLOWORLD_TARGET_BINARY を定義する必要はありません。

更新:追加の質問について:

<ブロック引用>

更新:プログラムはビルドされ、目的の場所にインストールされますが、実行しようとすると、次のようになります:./helloworld、次のようになります:bash:./helloworld:No such file or directory, it hasexecution rights.. 何が問題なのか? (rootfs.ext2 を ubuntu ディレクトリにマウントしてから実行しようとしましたが、buildroot のターゲット アーキテクチャは i368 なので、問題ないはずですよね?)

いいえ、そのようには機能しません。 rootfs.ext2 をマウントしてそこからプログラムを実行することは期待できません。これはとりわけ、rootfs.ext2 内のプログラムが rootfs.ext2 内のライブラリーに対してコンパイルされるためですが、そのように実行すると、/usr/lib 内のライブラリーが使用されます。システム全体を rootfs.ext2 で起動するか、qemu を使用するか、chroot 環境を使用する必要があります。 chroot の場合、ext2 ではなく「tar」ファイルシステム形式を使用する必要があります。ここも参照してください:http://buildroot.ulibc.org/downloads/manual/manual.html#_chroot


2016.05 上での最小限のテスト例

GitHub アップストリーム:https://github.com/cirosantilli/buildroot/tree/in-tree-package-2016.05

この例では、パッケージ ソースをツリー内に追加します。これは、教育目的で単純であり、マージ バックする場合の方法です (称賛!)。

マージバックするつもりがない場合は (boooo!)、Buildroot を git サブモジュールとして使用し、次のいずれかを使用する可能性が高くなります。

  • BR2_EXTERNAL のツリー外パッケージ https://github.com/cirosantilli/buildroot/tree/out-of-tree-2016.05に示されているように
  • *_OVERRIDE_SRCDIR + で説明されているその他の git サブモジュール:パッケージ開発のために Buildroot パッケージのソースを変更する方法

変更されたファイル:

パッケージ/Config.in

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

パッケージ/hello/Config.in

config BR2_PACKAGE_HELLO
    bool "hello"
    help
        Hello world package.

        http://example.com

パッケージ/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 '[email protected]' '$<'

clean:
    rm hello

パッケージ/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 でテスト済み。


Linux
  1. LinuxMint12でプリンターを追加する方法| LinuxMintにプリンターを追加する

  2. Linuxにインストールせずにパッケージをテストする方法

  3. LinuxRPMパッケージを作成する方法

  1. Linuxでユーザーをグループに追加する方法

  2. Linux –モノマジカルはどうですか?

  3. Linux でスワップ領域を追加する方法

  1. UbuntuLinuxでソフトウェアパッケージの詳細を確認する方法

  2. MicrosoftのLinuxソフトウェアリポジトリを追加する方法

  3. LinuxでChromedriverをPATHに追加するには?