Yocto eSDK позволяет вам кросс-компилировать приложения для вашей цели Yocto на вашем P C, используя именно тот компилятор и библиотеки, которые используются для самой цели. Нет необходимости добавлять G CC к цели. ESDK может быть сгенерирован из дерева исходных текстов Yocto, но, поскольку у вас в любом случае установлен исходный код, вам не нужно устанавливать eSDK, и его можно собирать непосредственно из источника. Все это не спецификация ARM c, а общий рабочий процесс Yocto для кросс-компиляции для указанной цели c Yocto.
Для этого сначала настройте среду сборки Yocto как обычно, изменив ее на каталог Yocto с именем source setup-environment yourbuilddir
.
Затем выполните команду devtool add
, передайте имя приложения (будет использовано для рецепта BitBake) и путь к существующему источнику. дерево, например:
devtool add myhelloworld /home/user/Projects/myhelloworld
Это автоматически сгенерирует рецепт и добавит слой с именем workspace
в ваше исходное дерево Yocto. Рецепт будет называться примерно как /yocto/source/path/yourbuilddir/workspace/recipes/myhelloworld/myhelloworld.bb
. Вы можете отредактировать его, запустив
devtool edit-recipe myhelloworld
Перед командой добавьте что-то вроде EDITOR=gedit
, чтобы использовать ваш любимый текстовый редактор. Измените рецепт, чтобы правильно построить приложение; BitBake автоматически определит, запускать ли make
или CMake
. Пример использования make
:
DESCRIPTION = "My GStreamer Hello World"
LICENSE = "CLOSED"
LIC_FILES_CHKSUM = ""
DEPENDS = "gstreamer1.0 pkgconfig-native"
FILES_${PN} += "${bindir}/myhelloworld ${datadir}/myhelloworld"
EXTRA_OEMAKE += "DESTDIR=${D}/ DATADIR=${datadir}/myhelloworld BINDIR=${bindir}"
do_install() {
oe_runmake install
}
do_clean() {
oe_runmake clean
}
DEPENDS
перечисляет зависимости, я добавил gstreamer1.0
, а также pkgconfig-native
, что необходимо при использовании pkg-config
внутри Makefile
. Вы можете добавить дополнительные зависимости к DEPENDS
, если они вам нужны, например boost openssl
. Подходящим примером make-файла будет:
PACKAGES = gstreamer-1.0
override CFLAGS += `pkg-config --cflags $(PACKAGES)` -Wall -Wextra "-DDATADIR=\"$(DATADIR)/\"" -ffunction-sections -fdata-sections
override LIBS += `pkg-config --libs $(PACKAGES)`
override LDFLAGS += -Wl,--gc-sections
OBJS = main.o
DEPS = $(foreach file,$(OBJS),$(basename $(file)).d)
EXE = myhelloworld
DESTDIR ?=
PREFIX ?= $(HOME)/.local/
BINDIR ?= $(PREFIX)bin
DATADIR ?= $(PREFIX)share/$(PKGNAME)
.PHONY : clean install uninstall
all: $(EXE)
$(EXE) : $(OBJS)
$(CC) -o $@ $(OBJS) $(LDFLAGS) $(LIBS)
$(OBJS) : %.o : %.c %.d
@[ -d "$(@D)" ] || mkdir -p "$(@D)"
$(CC) -c $(CFLAGS) $(CPPFLAGS) -o $@ $<
$(DEPS) : %.d : $(PROJECT_ROOT)%.c
@[ -d "$(@D)" ] || mkdir -p "$(@D)"
$(CC) $(CFLAGS) $(CPPFLAGS) -M -MF $@ -MT "$(basename $@).o" $<
clean:
rm -fr $(EXE) $(OBJS) $(DEPS)
install : $(EXE)
install -DT -m 0755 $(EXE) $(DESTDIR)$(BINDIR)/$(EXE)
uninstall :
rm -v $(DESTDIR)$(BINDIR)/$(EXE)
ifneq ($(MAKECMDGOALS), clean)
-include $(DEPS)
endif
Внутри вашего Makefile
убедитесь, что make install
устанавливает двоичный файл вашего приложения в $(DESTDIR)$(BINDIR)/myhelloworld
и файлы данных (например, изображения) в $(DESTDIR)$(DATADIR)/somefile
. На цели ваш двоичный файл будет расположен в /usr/bin/myhelloworld
, а файлы данных в /usr/share/myhelloworld
. В Makefile
передайте "-DDATADIR=\"$(DATADIR)/\""
компилятору, чтобы вы могли открыть свои файлы данных, например, fopen(DATADIR "somepic.png", "rb");
. Для исходного файла main.c
вы можете использовать GStreamer, пример 1 .
Сохраните рецепт, Makefile
и main.c
, а затем запустите
devtool build myhelloworld
, чтобы скомпилировать ваше приложение. Если все идет хорошо, вы можете установить его на цель с помощью S SH, запустив, например,
devtool deploy-target myhelloworld root@targethostname
Затем вы можете S SH к цели и запустить свое приложение, набрав myhelloworld
. Чтобы удалить его:
devtool undeploy-target myhelloworld root@targethostname
Если позже вы решите отправить свое приложение как часть образа Yocto, измените рецепт для образа вашей системы и добавьте:
IMAGE_INSTALL_append = " yourhelloworld"
Оставьте место после первой цитаты. При создании изображения ваше приложение и данные будут включены. Основное преимущество этого подхода (с использованием рецепта BitBake) состоит в том, что добавление приложения к изображению становится легким и что приложение будет связано с точно теми библиотеками, которые доступны на цели, поэтому вы можете использовать именно те функции, которые присутствуют в этих версиях. .
Используя приведенный выше пример make-файла, вы также можете напрямую скомпилировать хост P C, просто запустив make
.
.