另外内核的编译选项也有可以优化的可能:
CONFIG_CC_OPTIMIZE_FOR_SIZE:可以使用gcc -Os而不是gcc -O2编译内核。
这样的优化会优先考虑代码大小,但会牺牲代码速度。
结果:初始引导时间更好(较小的启动时间),但是较慢的内核代码可能会使性能降低。系统运行速度会变慢!
1.4 延迟驱动程序和初始化调用
如果有点功能无法编译为模块(例如,网络或模块子系统),可以尝试推迟执行。内核不会缩小,但某些初始化将被推迟,所以启动变快。通常,您可以修改probe()函数以返回-EPROBE_DEFER,直到它们准备好运行为止。
有关支持此功能的详细信息,请参见
https://lwn.net/Articles/485194/。
1.5 关闭控制台输出
控制台输出实际上要花费很多时间(非常慢的设备)。 产品中可能不需要。通过在内核命令行中传递quiet参数来禁用它。但仍然可以使用dmesg获取内核消息。这一步一般建议等最后一步再做,否则将损失控制台进行调试。
1.6 预置jiffy
每次引导时,Linux内核都会校准延迟循环(用于udelay()函数)。这将测量每个jiff y(lpj)值的循环次数。只需要测量一次!在内核启动消息中找到 lpj值:
Calibrating delay loop.。。 996.14 BogoMIPS (lpj=4980736)
然后将lpj = 《value》添加到内核命令行:
Calibrating delay loop (skipped) preset value.。 996.14 BogoMIPS (lpj=4980736)
1.7 多处理器
SMP初始化很慢,即使您只有一个核心CPU,通常也会在默认配置中启用它(默认配置应支持多个系统)。因此,如果只有一个CPU内核,请确保将其禁用。BeagleBone Black上的结果:压缩内核大小:-188 KB
要节省最后的毫秒数,您可能需要删除不必要的功能: