Buildroot自定义内核小于1MB

Posted

技术标签:

【中文标题】Buildroot自定义内核小于1MB【英文标题】:Buildroot custom kernel under 1MB 【发布时间】:2015-08-24 07:26:54 【问题描述】:

我正在尝试使用 Buildroot 构建 1 Mb 以下的最小内核。它适用于具有 qspi 内存基本功能、以太网、usb、spi一些 GPIO 的小板。通过 sshUART 进行基本终端访问。 我的第一个想法是是否可以通过 linux-menuconfig 修改内核 .config 以达到这个大小。

如果有可能在不深入了解内核架构的情况下识别冗余部分并将它们排除在编译之外。

如果有人可以指导我如何解决这个问题,甚至指定一些工具和方法来解决这个问题,那将非常有帮助。

谢谢!

【问题讨论】:

文章:Tuning Embedded Linux可能对你有帮助。 @alexander 谢谢。我已经检查过了,它与 Yocto 更相关。信息量还是很大的!但我不太确定如何将他的方法应用于 buildroot。也许我只是对 buildroot 不够熟悉,看不到链接。他还列出了内核模块的大小并删除了它们,我想不破坏依赖关系是相当棘手的。 我发布了不完整的答案。你用什么SOC?所以我可以研究一下 yocto 资源,并可能会推荐其他任何东西。 @alexander 我使用 altera cyclone 5。我也研究了 yocto,但它看起来对我来说太过分了,所以我切换到 buildroot。也许这是错误的假设:D 【参考方案1】:

如果您有为您的开发板工作的构建根目录,那么最好继续使用它。禁用内核选项的技术应该相同。在article 中,他达到了 ~0.7MB uImage,但丢失了很多功能(p40)。他从最小(裸)配置(p27)开始并添加配置块。因此,您可以构建可以引导的最小的 uImage,而不是识别冗余部分。比添加更多选项:ext2、serial 等。实际上这项工作需要大量的测试。而且你可能会破坏依赖关系。

可以使用diff -Naur 比较内核配置(工作配置和新配置),因此您可以看到发生了什么变化。

题外话:

看起来 yocto 得到了 altera 的官方支持。 here 是如何构建 altera-image-minimal 的说明。如果你对它的大小满意,那就使用它,不要花时间最小化 uImage。如果您需要在其中安装额外的软件包,则可以轻松扩展它。

here 是关于构建 Angstrom(基于 yocto 的发行版)的说明。您可以根据 console-image-minimal 创建自定义图像。

我在生产中使用 Angstrom。不得不说,第一次用真的很辛苦。

【讨论】:

【参考方案2】:

是否使用 buildroot 构建内核并不重要。重要的是对其进行配置,使其适合 1MB。当您从 buildroot 构建内核时,您可以使用 make linux-menuconfig 来执行此操作,正如您所提到的。

也就是说,获得低于 1MB 的内核将非常困难。 Biff once did this for an x86-based platform, bifferboard。但那是没有网络或 USB 的。

您可以参考the kernel size tuning guide,其中有一些补丁的链接以减小大小。但它已经几年没有更新了。

【讨论】:

这个 bifferboard 配置有网络和 USB:github.com/bifferos/bb/blob/master/tiny/linux-2.6.37.6/.conf‌​ig

以上是关于Buildroot自定义内核小于1MB的主要内容,如果未能解决你的问题,请参考以下文章

如何将额外的自定义 ./configure autotools 选项传递给 Buildroot 包?

Buildroot 指定内核版本

ARM内核defconfig的buildroot

Buildroot构建指南——Linux内核

buildroot - 如何更改内核版本字符串

Buildroot linux内核干净构建