23

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 が含まれています。

main.c :

#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: No such file or directoryIt has execution rights. 何が問題なのですか?(rootfs.ext2 を ubuntu ディレクトリにマウントしてから実行しようとしましたが、buildroot のターゲット アーキテクチャは i386 なので、問題ないはずですよね?)

HelloWorld プログラムをビルドしてインストールし、最終的に実行した後、起動後に起動するように init.d に追加し、HelloWorld を X サーバーを必要としない Qt Window に置き換えたいと思います .

インスピレーションの主な源はここにあります。

4

2 に答える 2

8

一般に、buildroot パッケージのソースは (ダウンロードされた) tarball から取得されます。あなたが現在行っていること (package/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 has execution 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

于 2013-11-05T08:56:08.160 に答える