首先从花费最长时间的功能开始尝试优化。对于每个功能:

在内核源代码中查找其定义。

可以使用Elixir(参考https://elixir.bootlin.com)。

注意:某些函数名称可能不存在,名称与modulename_init相对应。然后,在相应的模块中查找初始化代码。

删除不必要的功能:

通过查看相应源目录中的Makefile,找到哪个内核配置参数可编译代码。

延后加载处理:

查找功能所属的模块(如果有)。如果可能,请稍后加载此模块。

优化必要的功能:

查找可以用于减少探测时间的参数,并查找module_param宏。

查找延迟循环和对名称中包含delay的函数的调用, 可以减少此类延迟,并查看代码是否仍然有效。

1.3 减小内核尺寸

首先,我们专注于在不删除功能的情况下缩小尺寸

主要机制是使用内核模块

将启动时不需要的所有内容编译为模块

有两个好处:内核更小且加载速度更快,初始化代码更少

删除用户空间不需要的功能:

CONFIG_KALLSYMS,CONFIG_DEBUG_FS,CONFIG_BUG

用专为嵌入式系统设计的功能:CONFIG_SLOB,CONFIG_EMBEDDED

然后考虑内核压缩的方式:

根据存储读取速度和CPU解压缩内核之间的平衡,需要对不同的压缩算法进行测试。还建议在内核优化过程结束时尝试压缩选项,因为结果可能会因内核大小而异。

Lzo和Gzip似乎是最好的解决方案。 但这结果取决于存储和CPU性能,故在决定方案是务必进行测试。