"File format not recognized" 在构建 Petalinux 应用程序时
"File format not recognized" when building Petalinux app
我正在使用 Petalinux 2017.2 和附带的工具为 Zynq ZC702 开发板构建 Linux 图像。我正在尝试使用 bitbake 配方将预编译的可执行文件添加到我的 rootfs。
SUMMARY = "Demo on ARM-Linux"
SECTION = "PETALINUX/apps"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
SRC_URI = " \
file://Demo1.out \
"
FILES_${PN} = " \
/home/root/Demo/ \
/home/root/Demo/Demo1.out \
"
S = "${WORKDIR}"
do_install() {
install -d ${D}/home/root/Demo
install -m 0755 ${S}/Demo1.out ${D}/home/root/Demo
}
当我尝试构建包含我的应用程序的 rootfs 时,出现此错误:
ERROR: demo-1.0-r0 do_package: objcopy failed with exit code 1 (cmd was 'arm-xilinx-linux-gnueabi-objcopy' --only-keep-debug '/home/common/peta_proj_2017.2_secure/build/tmp/work/cortexa9hf-neon-xilinx-linux-gnueabi/demo/1.0-r0/package/home/root/Demo/Demo1.out' '/home/common/peta_proj_2017.2_secure/build/tmp/work/cortexa9hf-neon-xilinx-linux-gnueabi/demo/1.0-r0/package/home/root/Demo/.debug/Demo1.out'):
arm-xilinx-linux-gnueabi-objcopy:/home/common/peta_proj_2017.2_secure/build/tmp/work/cortexa9hf-neon-xilinx-linux-gnueabi/demo/1.0-r0/package/home/root/Demo/Demo1.out: File format not recognized
ERROR: demo-1.0-r0 do_package: Function failed: split_and_strip_files
我假设 objcopy 有一个问题,我的文件是为 arm-linux-gnueabihf 编译的,但我已经知道它可以工作,因为我已经尝试在 [=19= 之后手动将它复制到 rootfs ] 已启动并对其进行了测试。我会尝试使用 arm-xilinx-linux-gnueabi 工具链重新编译它,但它缺少我需要的一些库。我不知道为什么要为此操作调用 objcopy。我想要的只是将文件移动到 rootfs,但出于某种原因,它正在做所有这些额外的工作。有没有办法让 bitbake 忽略文件格式?
看起来问题在于 objcopy 正在尝试去除符号,正如您所说,使用的工具链与构建它所用的工具链不同。
您可以尝试设置:
INHIBIT_PACKAGE_STRIP="1"
某处(也许在你的 local.conf 中)。
它应该跳过构建系统尝试从二进制文件中删除调试符号的步骤,因此可能不会调用 objcopy。
1 [https://www.yoctoproject.org/docs/current/mega-manual/mega-manual.html#var-INHIBIT_PACKAGE_STRIP]1
我正在使用 Petalinux 2017.2 和附带的工具为 Zynq ZC702 开发板构建 Linux 图像。我正在尝试使用 bitbake 配方将预编译的可执行文件添加到我的 rootfs。
SUMMARY = "Demo on ARM-Linux"
SECTION = "PETALINUX/apps"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
SRC_URI = " \
file://Demo1.out \
"
FILES_${PN} = " \
/home/root/Demo/ \
/home/root/Demo/Demo1.out \
"
S = "${WORKDIR}"
do_install() {
install -d ${D}/home/root/Demo
install -m 0755 ${S}/Demo1.out ${D}/home/root/Demo
}
当我尝试构建包含我的应用程序的 rootfs 时,出现此错误:
ERROR: demo-1.0-r0 do_package: objcopy failed with exit code 1 (cmd was 'arm-xilinx-linux-gnueabi-objcopy' --only-keep-debug '/home/common/peta_proj_2017.2_secure/build/tmp/work/cortexa9hf-neon-xilinx-linux-gnueabi/demo/1.0-r0/package/home/root/Demo/Demo1.out' '/home/common/peta_proj_2017.2_secure/build/tmp/work/cortexa9hf-neon-xilinx-linux-gnueabi/demo/1.0-r0/package/home/root/Demo/.debug/Demo1.out'):
arm-xilinx-linux-gnueabi-objcopy:/home/common/peta_proj_2017.2_secure/build/tmp/work/cortexa9hf-neon-xilinx-linux-gnueabi/demo/1.0-r0/package/home/root/Demo/Demo1.out: File format not recognized
ERROR: demo-1.0-r0 do_package: Function failed: split_and_strip_files
我假设 objcopy 有一个问题,我的文件是为 arm-linux-gnueabihf 编译的,但我已经知道它可以工作,因为我已经尝试在 [=19= 之后手动将它复制到 rootfs ] 已启动并对其进行了测试。我会尝试使用 arm-xilinx-linux-gnueabi 工具链重新编译它,但它缺少我需要的一些库。我不知道为什么要为此操作调用 objcopy。我想要的只是将文件移动到 rootfs,但出于某种原因,它正在做所有这些额外的工作。有没有办法让 bitbake 忽略文件格式?
看起来问题在于 objcopy 正在尝试去除符号,正如您所说,使用的工具链与构建它所用的工具链不同。
您可以尝试设置:
INHIBIT_PACKAGE_STRIP="1"
某处(也许在你的 local.conf 中)。
它应该跳过构建系统尝试从二进制文件中删除调试符号的步骤,因此可能不会调用 objcopy。
1 [https://www.yoctoproject.org/docs/current/mega-manual/mega-manual.html#var-INHIBIT_PACKAGE_STRIP]1