首先从花费最长时间的功能开始尝试优化。对于每个功能:
在内核源代码中查找其定义。
可以使用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性能,故在决定方案是务必进行测试。