在Yocto Recipe中的x86主机上执行ARM的交叉编译二进制文件

时间:2018-05-19 18:34:41

标签: embedded-linux yocto

我的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文件。我理解这里的不兼容性。

我的Previous SE Query已解决此问题。

因为我无法解决这个问题;我想在我的食谱中使用json脚本中使用postinstall调用。

但我无法绕过它。这些是我制定的步骤:

  1. 我修改了移除Makefile
  2. json
  3. 我应该添加DEPENDS = "libxslt libxml2吗?
  4. 我应该添加RDEPENDS_{PN} = "bash"来执行json的命令吗?
  5. 如何安装后的配方?
  6. 食谱:

    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 :(得分:1)

analyzer是一个用于生成一些工件的工具,不一定需要在交叉编译环境中为目标编译,而是需要一个平台来运行(构建主机)和输入文件。

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"

交叉编译canboat所需的额外补丁在这里

0001-Define-ANALYZEREXEC.patch

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

0001-use-php-instead-of-php5.patch