东莞模板建站平台,湛江公司网站建设,企业宣传片文案高级,做网站 用aspyocto编译系统Image优化笔记
使用yocto编译出来的Image文件(比如ext4格式#xff09;有时候根据业务需求#xff0c;是要进行剪裁以缩小Image的Size。 比如系统有OTA需求#xff0c;系统预留的OTA分析大小是500M。但是Image#xff08;ext4格式#xff09;是1G大小。即使…yocto编译系统Image优化笔记
使用yocto编译出来的Image文件(比如ext4格式有时候根据业务需求是要进行剪裁以缩小Image的Size。 比如系统有OTA需求系统预留的OTA分析大小是500M。但是Imageext4格式是1G大小。即使使用压缩文件也未达到500M。这种情况下可能就需要进行剪裁了。 这里记录下一下Yocto Image剪裁时可能会用到的一些知识点。
是否进行了strip
对于编译系统来说strip操作可理解为对编译生成的成果物so、bin之类的剔除其用于Debug的symbol等。strip后成果物的size会变下。 Yocto系统默认对Image的成果物进行Strip操作但可以通过设置下述变量让Yocto对成果物不进行strip。
# If set to “1”, causes the build to not strip binaries in resulting packages and prevents the -dbg package from containing the source files
INHIBIT_PACKAGE_STRIP#Prevents the OpenEmbedded build system from splitting out debug information during packaging.
#By default, the build system splits out debugging information during the do_package task.
INHIBIT_PACKAGE_DEBUG_SPLIT#If set to “1”, causes the build to not strip binaries in the resulting sysroot.
INHIBIT_SYSROOT_STRIP比如在bb文件中如下设置就不会进行strip
INHIBIT_PACKAGE_STRIP 1
INHIBIT_PACKAGE_DEBUG_SPLIT 1 某些成果物编译时会特意设置上面的变量来阻止strip操作。考虑去除这些设置进行strip操作来减少image size。
删除未使用的package
缩减Image size首先想到的肯定就是删除没使用的Package应用包这种就要逐个进行分析了。但是我们可以利用Yocto提供了一些内容辅助我们进行分析。
编译历史
Yocto提供了编译相关的历史记录其中包括
Image包含的所有Package有哪些Image包含的每个Package大小Size从大到下排序每个Package对应的成果物内容头文件、二进制、so等等Package间的依赖关系dot文件
历史记录被Yocto收集到编译目录下的buildhistory 目录中。通过Package大小可以分析 哪些Package Size比较大。通过Package间的依赖关系dot文件可以转成图片可以分析包与包间的 关系。
# 比如
poky/build/buildhistory包含的layer有哪些
不同食谱里面可以提供了相同名称的bb文件。有时候需要确定编译过程中使用的是哪一个。可以通过在bb文件中加log的方式确认也可以使用下述命令输出所有参与编译的Layer。
bitbake-layers show-layers查看当前编译环境中的所有环境变量
某些Package是否启动与Yocto的一些环境变量有关比如DISTRO_FEATURES。可以通过如下命令查看当前所有环境变量的值。
bitbake -e删除package中指定内容
可以在package进行安装中删除其中的多余内容。比如删除test类的程序。下述命令在do_install阶段删除exmaple文件。 ${D}变量的值一般是编译目录中每个Package中的image这个文件夹。
do_install() { oe_runmake DESTDIR${D} install if [ -e ${D}/usr/share/linduo/examples ]; then rm -rf ${D}/usr/share/linduo/examples fi
} 如何给meson传递参数
如果package使用了meson编译方式可以通过如下方式在对应的bb文件中传递参数。
EXTRA_OEMESON \ -Dtest1disabled \ -Dtest2disabled \清理指定的package目标
使用下述命令可以清理指定的package目标包括cache但不会删除下载的源码 bitbake -c cleansstate xxx清理package还有以下两个命令
#Removes all output files, shared state (sstate) cache, and downloaded source files for a target
# 删除package相关所有内容包括缓存文件和下载的源码慎用
bitbake -c cleanall xxx# Removes all output files for a target from the do_unpack task forward
# 删除编译的成果物不会删除缓存文件
bitbake -c clean xxxImage剪裁是个细致入微且耗费时间的过程考虑Size缩减的同时也需要考虑系统的功能性、稳定性、维护性等。