在 https://elinux.org/Main_Page 的文章中,提供了嵌入式linux的相关wiki。其中有专门一个章节用来讲启动时间并提供了几种优化方式:https://elinux.org/Boot_Time
本文主要使用initcall debug来定位哪个模块加载时间过长。
initcall debug
这个功能可以用于计算每个模块调用initcall的时间,这样就可以知道哪个模块初始化的时间过长。
魅族内核组吴章金发起了“嵌入式 Linux 知识库 (elinux.org) 中文翻译计划”,其中boot time的链接为:https://github.com/tinyclub/elinux/blob/master/zh/dev_portals/Boot_Time/Boot_Time.md
往cmdline传递参数
往cmdline传递以下两个参数initcall_debug=1 ignore_loglevel=1
,在 /proc/cmdline
可以查看当前使用的cmdline情况。
传递这两个参数可以打开initcall_debug
功能,dmesg的输出变为下面的格式,我们可以通过这里面的内容来进行Kernel的优化。
1 | [ 6.302837] initcall cdns3_driver_platform_register+0x0/0x24 returned 0 after 73878 usecs |
倒叙排列输出时间
有了上面串口的信息,我们可以通过将函数名和与之对应的时间提取出来,然后倒叙排列,输出到excel文件中,以直观的方式展示出来。
1 | #!/usr/bin/python |
输出的结果如下: