Выполнить кросс-скомпилированный двоичный файл для ARM на хост-компьютере x86 в Yocto Recipe - PullRequest
0 голосов
/ 19 мая 2018

У меня есть Makefile, где:

TARGETDIR=../rel/$(PLATFORM)
ANALYZER=$(TARGETDIR)/analyzer
TARGETS=$(ANALYZER)
XMLFILE=pgns.xml
JSONFILE=pgns.json

all: $(TARGETS)

$(ANALYZER): analyzer.c pgn.c analyzer.h pgn.h ../common/common.c ../common/common.h Makefile
    $(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) -o $(ANALYZER) -I../common pgn.c analyzer.c ../common/common.c $(LDLIBS$(LDLIBS-$(@)))

json: $(ANALYZER) pgns2json.xslt
$(ANALYZER) -explain-xml >$(XMLFILE) && xsltproc pgns2json.xslt $(XMLFILE) >$(JSONFILE)

$(ANALYSER) компилируется и сохраняется в TARGETDIR.Теперь в json вызывается двоичный файл analyzer, который обеспечивает

 | /bin/sh: ../rel/linux-x86_64/analyzer: cannot execute binary file: Exec format error

, поскольку при file analyzer он показывает файл как ELF 32-bit файл.Здесь я понимаю несовместимость.

Это было решено в моем предыдущем запросе SE .

, поскольку я не могу обойти эту проблему;Я думал об использовании вызова json в сценарии postinstall в своем рецепте.

Но я не могу обернуть его вокруг.Вот шаги, которые я составил:

  1. Я изменяю Makefile, который удаляет json
  2. Должен ли я добавить DEPENDS = "libxslt libxml2?
  3. Должен ли ядобавьте RDEPENDS_{PN} = "bash", чтобы выполнить команду для json?
  4. как должен выглядеть рецепт после установки?

Рецепт:

SUMMARY = "CANBOAT"
SECTION = "base"
LICENSE = "GPLv3"
#DEPENDS = "libxml2 libxsl"

LIC_FILES_CHKSUM = "file://GPL;md5=05507c6da2404b0e88fe5a152fd12540"

S = "${WORKDIR}/git"

SRC_URI = "git://github.com/canboat/canboat.git;branch=${SRCBRANCH}"
SRCBRANCH = "master"
SRCREV = "93b2ebfb334d7a9750b6947d3a4af9b091be2432"
EXTRA_OEMAKE = "'CC=${CC}' 'AR=${AR}'"
do_compile() {
    oe_runmake
}
do_install() {
   oe_runmake install

}
#post_install() { # here? what will be the structure}

1 Ответ

0 голосов
/ 20 мая 2018

анализатор - это инструмент, который используется для генерации некоторых артефактов и не обязательно должен быть скомпилирован для цели в среде кросс-компиляции; скорее, ему нужна платформа для запуска (сборка хоста) и входной файл.

SUMMARY = "CANBOAT"
SECTION = "base"
LICENSE = "GPLv3"

DEPENDS += "libxslt-native canboat-native"

LIC_FILES_CHKSUM = "file://GPL;md5=05507c6da2404b0e88fe5a152fd12540"

SRC_URI = "git://github.com/canboat/canboat.git;branch=${SRCBRANCH} \
           file://0001-Do-not-use-root-user-group-during-install.patch \
           file://0001-Define-ANALYZEREXEC.patch \
           file://0001-use-php-instead-of-php5.patch \
          "
SRCBRANCH = "master"
SRCREV = "93b2ebfb334d7a9750b6947d3a4af9b091be2432"

S = "${WORKDIR}/git"

PREFIX ?= "${root_prefix}"
#PREFIX_class-native = "${prefix}"

EXTRA_OEMAKE_append_class-target = " ANALYZEREXEC=analyzer "

do_compile() {
    oe_runmake
}
do_install() {
   oe_runmake DESTDIR=${D} PREFIX=${root_prefix} EXEC_PREFIX=${exec_prefix} install

}

RDEPENDS_${PN}_append_class-target = " php-cli perl"

BBCLASSEXTEND = "native nativesdk"

Дополнительные патчи, необходимые для кросс-компиляции, находятся здесь

0001-Define-ANALYZEREXEC.patch

0001-Do-not-use-root-user-group-while-install.patch

0001-использовать-php-вместо-php5.patch

...