为什么在linux中使用压缩内核映像?

use*_*046 11 linux linux-kernel

我在互联网上搜索了这个问题,但找不到与此问题相关的任何有用的内容"为什么压缩内核映像如bzImage或vmlinuz用作初始内核映像",

我能想到的可能的解决方案是:

由于内存限制?

但是最初压缩的内核映像位于硬盘或其他一些存储介质上,并且在第二阶段引导加载程序之后的启动时间内,内核首先在主内存中解压缩然后执行.

因此,当在后期阶段内核要在主内存中解压缩时,需要首先压缩它.我的意思是如果主内存可以保存解压缩的内核映像那么内核压缩的需求是什么?

Ben*_*igt 24

通常,处理器可以比I/O系统读取的速度更快地解压缩.通过减少I/O系统的读取时间,可以减少引导所需的时间.

当然,这种假设并不适用于所有硬件组合.但它经常这样做.

嵌入式系统的另一个好处是内核映像在非易失性存储上占用的空间更少,这可能允许使用更小(和更便宜)的闪存芯片.其中许多系统具有~32MB的系统RAM和仅约4MB的闪存.

  • @ user2311046:请记住,在PC上,加载内核映像必须由引导加载程序使用非常通用的无功能BIOS调用来完成,这也意味着性能非常低.没有DMA,没有分散/收集I/O,没有命令排队.EFI使它更好一点,但您仍然希望尽快加载最小内核并切换到与I/O控制器的本机通信.由于图像加载速度很慢,因此传输的图像应尽可能小,这是通过压缩实现的. (3认同)
  • 有些系统也通过网络启动; 你可能希望制作一个*恢复内核*非常小,以适应USB记忆棒,很久以前的软盘或CD.最重要的是,`.config`文件意味着你没有**有**这样做.由配置内核的人和*Ben*给出了正当理由.矛盾的是,您可能不希望在具有*execute in place*flash的嵌入式系统中执行此操作. (2认同)
  • [XIP_KERNEL](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/arch/arm/Kconfig?id=refs/tags/v3.12-rc2#n2067)至少支持**ARM**.由于大多数*code*部分仅标记为`rx`,因此这些部分可能映射到NOR闪存,QuadSPI闪存,ROM等,它们支持`XIP`并且不需要加载和更低的RAM要求.对于*CD*或*USB*,我们的想法是不要为很少需要的*rescue*图像消耗太多空间; 你可能是双重目的的存储. (2认同)