Buildroot不会生成压缩的内核映像

时间:2019-05-17 13:14:05

标签: linux kernel embedded buildroot

我已经成功地使用buildroot(v。2019.05)来构建u-boot和Kernel,并且能够将它们一起引导。

问题在于,即使我将内核压缩模式选择为gzip,我得到的只是未压缩的Image文件。

在输出目录(以及Linux)中,只有Image文件,而应该有Image.gz

如何从/而不是Image.gz生成Image

3 个答案:

答案 0 :(得分:2)

在arm64上,Linux does not support self-extracting compression。它依靠引导加载程序来完成。

Linux构建系统确实有一个Image.gz(和Image.bz2等)目标,但是它只不过是在gzip上调用Image(与{ {1}},其中添加了一个自解压缩程序。

由于在内核构建系统之外进行压缩很容易,并且由于存在许多不同的压缩器,因此Buildroot不为其提供选项。但是,可以选择一个自定义图像名称(zImage),然后将BR2_LINUX_KERNEL_IMAGE_TARGET_CUSTOM设置为BR2_LINUX_KERNEL_IMAGE_TARGET_NAME。或者,您可以在构建后脚本中进行压缩。

请记住要确保引导加载程序能够使用该算法解压缩。

答案 1 :(得分:1)

根据Linux package configuration tool

  

此选择仅可确保构建了正确的宿主工具。   内核的实际压缩应在内核中选择   配置菜单。

确保也使用make linux-menuconfig选择压缩选项。

答案 2 :(得分:1)

在buildroot中,除了选择压缩机制之外,还可以选择内核映像的输出格式(uImage,zImage,vmlinux ...)。

您应该在output/images/或内核的build目录中找到其中的一个。

使用U-boot时,您可能要使用uImage或zImage。参见this question。如果在内核配置(CONFIG_KERNEL_GZIP)中选择了它们,则两者都将被压缩。

在引导过程中,未压缩的内核大小会在开始时记录。您可以将其与文件系统上的大小进行比较。

## Booting kernel from Legacy Image at 10000000 ...
   Image Name:   Linux-4.14.73-ltsi
   Created:      2019-05-14  11:55:16 UTC
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    4684016 Bytes = 4.5 MiB
   Load Address: 00008000
   Entry Point:  00008000
...