我已经成功地使用buildroot(v。2019.05)来构建u-boot和Kernel,并且能够将它们一起引导。
问题在于,即使我将内核压缩模式选择为gzip
,我得到的只是未压缩的Image
文件。
在输出目录(以及Linux)中,只有Image
文件,而应该有Image.gz
。
如何从/而不是Image.gz
生成Image
?
答案 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
...