首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >减小AOSP内核图像大小

减小AOSP内核图像大小
EN

Stack Overflow用户
提问于 2020-04-22 14:59:16
回答 1查看 1.2K关注 0票数 1

我正在尝试构建一个AOSP内核,但是我无法使得到的boot.img小到足以闪现并引导它。它包含带有附加dtb和initramfs的压缩内核。我的意图是使用塞兹卡勒测试驱动程序。我目前使用的是像素XL (marlin)。我使用内核分支android-msm-marlin-3.18-pie-qpr3 (也尝试了相关的),我正在尝试各种基于gcc的工具链。对于AOSP,我选择了派(tag android-9.0.0_r46,build PQ3A.190801.002)。然而,请注意,这是一个普遍的问题,它不是模糊-,内核-或设备特定的。

我的要求是:

  • 保持供应商引入的驱动程序(因为它们是我想要的)
  • 启用KASAN和KCOV (及其依赖项)
  • 启用CONFIG_DEBUG_INFO
  • 保留printk

我尝试过的事情和我的想法:

  • 调优内核配置--这在某种程度上是有帮助的,但这还不够。我已经在使用例如CONFIG_CC_OPTIMIZE_FOR_SIZE=yCONFIG_CORE_SMALL=yCONFIG_NET_SMALL=yCONFIG_KASAN_OUTLINE=yCONFIG_TRIM_UNUSED_KSYMS=yCONFIG_SLOB=y,.
  • 压缩内核(和/或initramfs)与xz或lzma -这个想法似乎很有前途。我注意到arm64的内核构建系统既不支持xz,也不支持开箱即用的lzma (不知道为什么?),所以我自己对它进行了修补以构建它。构建成功,生成的Image.xzkern-dtbImage.lzma-dtb似乎没有问题,但是当试图引导它时(串行调试日志):
代码语言:javascript
复制
[5710] partition_enable_wp: group 0 not defined
[5720] DTB offset is incorrect, kernel image does not have appended DTB
[5720] Device info 0x00000131/00010001/0x00010001/0, pmic 0x20009/0x455013/0x0/0x0
[5740] ERROR: Appended Device Tree Blob not found
[5740] panic (frame 0x83a86848):
...

我验证了DTB是否存在,内核是否按预期压缩。我在这里的问题是:有可能吗?Android引导程序甚至支持xz/lzma吗?我在网上几乎找不到任何关于那个的信息。有没有办法使用xz或lzma压缩内核来引导Android?

  • 调整引导分区的大小-这似乎很困难,但可能,不确定是否值得尝试。你能推荐一些资源或工具吗?
  • 从initramfs中删除不必要的特性
  • 链接-时间优化-我无法让它与AOSP内核工作,无论我使用什么gcc版本。有小费吗?
  • 构建功能作为模块而不是内置的--我尝试过的任何配置都不会成功,即使只将单个特性构建为模块(编译器或链接器错误取决于配置)。你有导游或小费吗?

我还学习了在AOSP主页(链接)上使用KASAN和KCOV构建Pixel内核的教程。我有一些问题,但最终(使用Linaro 5.5.0,有一些配置更改和没有CONFIG_DEBUG_INFO),我可以得到它的构建和引导。不错的概念证明,但不是我所需要的,因为我必须跳过一些必要的功能。

我已经在这个问题上呆了几个星期了。还有其他选择吗?我很乐意让它以任何方式启动。我很乐意提供任何细节和日志,但我觉得这已经是一个很长的帖子。提前谢谢你!

EN

回答 1

Stack Overflow用户

发布于 2020-05-14 23:38:00

我找到了一个适合我的解决方案。不过,这是一个很接近的选择,但对于不同的情况来说,可能还不够大。不管怎样,这可能会对其他人有帮助。

我使用的是皮格斯,而不是默认的gzip工具,它为-11开关提供了更高的压缩级别。使用-I 45增加优化迭代次数进一步改进了它(缺省值为15)。这就挤出了我所需要的最后一点:得到的Image.gz-dtb比以前小了2.5%。

以下是我对内核构建系统所做的更改(假设pigz在构建时将在您的PATH中):

代码语言:javascript
复制
diff --git a/arch/arm64/boot/Makefile b/arch/arm64/boot/Makefile
index b7cf2a498c19..7dfd438e997b 100644
--- a/arch/arm64/boot/Makefile
+++ b/arch/arm64/boot/Makefile
@@ -30,7 +30,8 @@ $(obj)/Image: vmlinux FORCE
        $(call if_changed,objcopy)

 $(obj)/Image.gz: $(obj)/Image FORCE                                    
-       $(call if_changed,gzip)                  
+#      $(call if_changed,gzip)
+       $(call if_changed,pigz)

 $(obj)/Image.lz4: $(obj)/Image FORCE  
        $(call if_changed,lz4)
diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib                      
index c2b437eb23d5..73d4581f7531 100644
--- a/scripts/Makefile.lib
+++ b/scripts/Makefile.lib
@@ -272,6 +272,11 @@ quiet_cmd_gzip = GZIP    $@
 cmd_gzip = (cat $(filter-out FORCE,$^) | gzip -n -f -9 > $@) || \
        (rm -f $@ ; false)

+
+quiet_cmd_pigz = PIGZ    $@
+cmd_pigz = (cat $(filter-out FORCE,$^) | pigz -n -f -11 -I 45 > $@) || \
+       (rm -f $@ ; false)
+
 # DTC
 # ---------------------------------------------------------------------------

它闪烁和靴子罚款,甚至靴子在一个合理的时间,与我以前的情况相反。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61368285

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档