为什么我的应用在yocto构建服务器上的大小与目标上安装的大小不同?

问题描述 投票:0回答:1

我正在使用Yocto为嵌入式项目创建自定义linux映像。我最近发现了一些奇怪的东西,无法解决这个问题。映像中包含的应用程序之一是定制软件,我们将其称为应用程序foo。在yocto构建服务器上成功构建之后,可以在tmp / work / armv7at2hf-neon-fslc-linux-gnueabi / foo / 1.0.0-r0]中找到已构建的交叉编译的foo可执行文件。 / git目录。构建服务器上的foo可执行文件(使用ls -al获得)的大小为40978880字节。

可以通过使用生成的图像tar.gz文件刷新SD卡,在目标硬件上运行该图像。刷新SD卡并在目标上启动映像后,我导航到安装foo的目录。在目标上,我再次使用ls -al获得可执行文件的大小,并且发现foo可执行文件的大小缩小了,为38585152字节。尽管可执行文件大小有所减少,但该应用程序仍可以正常运行。

此大小的更改是不可接受的,因为它使我无法在应用程序启动过程中对foo可执行文件进行sha256验证。验证失败,因为构建服务器上的foo与目标上安装的foo可执行文件不是字节相同]。大小的差异让我感到困惑。特别是由于我的层在rootfs上安装的所有其他文件在构建服务器和目标服务器上的大小都相同。

什么可能导致有关foo

可执行文件大小的差异?

我正在使用Yocto为嵌入式项目创建自定义linux映像。我最近发现了一些奇怪的东西,无法解决这个问题。应用程序之一...

embedded-linux executable binaryfiles yocto bitbake
1个回答
0
投票

您没有比较可部署的工件,可部署的二进制文件位于packages-split/目录中。 do_compile完成后,二进制文件包含调试信息和符号,通常需要调试信息才能运行。因此,需要执行其他步骤,其中之一是将其安装到暂存区中,该暂存区将位于配方工作目录中的image/目录中。然后,do_package任务会将image/中的文件划分为packages-split中的输出包(ipks / rpms)文件夹,运行剥离操作以确保将调试信息和符号打包到调试包中之后,最后的二进制文件位于packages-split/<PN>并且它将位于与目标位置相同的路径下,例如/usr/bin,它将位于packages-split/<name>/usr/bin中,这是您应该校验和的二进制文件

© www.soinside.com 2019 - 2024. All rights reserved.