Secara umum, sumber untuk paket buildroot diambil dari tarball (yang diunduh). Apa yang Anda lakukan sekarang (menempatkan sumber di dalam paket/HelloWorld) bukanlah cara yang tepat untuk melanjutkan.
Buildroot memang memiliki ketentuan untuk sumber paket 'lokal', yang dapat Anda gunakan jika Anda benar-benar membutuhkannya. Anda memerlukan variabel HELLOWORLD_SITE_METHOD untuk itu.
Lihat http://buildroot.uclibc.org/downloads/manual/manual.html#adding-packages untuk informasi selengkapnya.
Selain itu, Anda tidak perlu menentukan HELLOWORLD_DIR, HELLOWORLD_BINARY, HELLOWORLD_TARGET_BINARY.
Perbarui:mengenai pertanyaan tambahan Anda:
UPDATE:Program membangun dan menginstal di lokasi yang diinginkan tetapi ketika saya mencoba menjalankannya seperti ini:./helloworld, saya mendapatkan:bash:./helloworld:Tidak ada file atau direktori seperti itu, ia memiliki hak eksekusi .. ada apa dengan itu ? (Saya mencoba menjalankannya setelah me-mount therootfs.ext2 ke direktori ubuntu, target arch untuk buildroot adalah i368, jadi tidak apa-apa kan?)
Tidak, itu tidak bekerja seperti itu. Anda tidak bisa hanya me-mount rootfs.ext2 dan berharap untuk menjalankan program darinya. Hal ini antara lain karena program di dalam rootfs.ext2 dikompilasi dengan pustaka yang juga ada di dalam rootfs.ext2, tetapi jika Anda menjalankannya seperti itu, ia akan menggunakan pustaka di /usr/lib. Anda juga harus mem-boot sistem Anda sepenuhnya dengan rootfs.ext2, menggunakan qemu, atau menggunakan lingkungan chroot. Untuk chroot, Anda harus menggunakan format sistem file 'tar', bukan ext2. Lihat juga di sini:http://buildroot.uclibc.org/downloads/manual/manual.html#_chroot
Contoh teruji minimal di atas 2016.05
GitHub upstream:https://github.com/cirosantilli/buildroot/tree/in-tree-package-2016.05
Contoh ini menambahkan sumber paket dalam hierarki, yang sederhana untuk tujuan pendidikan dan cara yang harus dilakukan jika Anda ingin menggabungkan kembali (pujian!),
Jika Anda tidak bermaksud menggabungkan kembali (booooh!), kemungkinan besar Anda ingin menggunakan Buildroot sebagai submodule git dan:
- paket di luar pohon dengan
BR2_EXTERNAL
seperti yang ditunjukkan di:https://github.com/cirosantilli/buildroot/tree/out-of-tree-2016.05 *_OVERRIDE_SRCDIR
+ submodul git lainnya seperti yang dijelaskan di:Bagaimana cara memodifikasi sumber paket Buildroot untuk pengembangan paket?
File diubah:
package/Config.in
menu "Misc"
source "package/hello/Config.in"
endmenu
package/hello/Config.in
config BR2_PACKAGE_HELLO
bool "hello"
help
Hello world package.
http://example.com
paket/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))
package/hello/src/.gitignore
hello
paket/hello/src/Makefile
CC = gcc
.PHONY: clean
hello: hello.c
$(CC) -o '[email protected]' '$<'
clean:
rm hello
package/hello/src/hello.c
#include <stdio.h>
int main(void) {
puts("hello");
}
Penggunaan:
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
Dari dalam qemu:
hello
Hasil yang diharapkan:
hello
Diuji di Ubuntu 16.04.