博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
initcall_debug简要说明【转】
阅读量:6075 次
发布时间:2019-06-20

本文共 1195 字,大约阅读时间需要 3 分钟。

本文转载自:

Linux version 3.10.40

 

1. 使用说明

Documentation/kernel-parameters.txt中的说明如下:

         initcall_debug  [KNL] Trace initcalls as they are executed.  Useful

                            for working out where the kernel is dying during

                            startup.

说明initcall_debug是一个内核参数,可以跟踪initcall,用来定位内核初始化的问题。在cmdline中增加initcall_debug后,内核启动过程中会增加如下形式的日志,在调用每一个init函数前有一句打印,结束后再有一句打印并且输出了该Init函数运行的时间,通过这个信息可以用来定位启动过程中哪个init函数运行失败以及哪些init函数运行时间较长。

calling  init_workqueues+0x0/0x414 @ 1

initcall init_workqueues+0x0/0x414 returned 0 after 0 usecs

除了在启动过程中会增加日志外,在系统休眠唤醒过程中也会增加如下形式的日志,可以用来定位休眠唤醒失败及休眠唤醒时间太长的问题。

calling  xxxxxx.dma+ @ 6, parent: xxx.0

call xxxxxx.dma+ returned 0 after 2 usecs

 

2. 相关代码

./init/main.c中声明变量的地方如下,通过core_param,可以通过/sys/module/kernel/parameters/initcall_debug在用户空间获取initcall_debug的状态,另外cmdline能起作用依赖的应该也是这行代码,关于core_param的实现也很复杂,以后再研究。

bool initcall_debug;

core_param(initcall_debug, initcall_debug, bool, 0644);

do_one_initcall函数根据initcall_debug决定是直接调用启动init函数还是调用do_one_initcall_debug,do_one_initcall_debug中在调用init函数时增加日志及计算函数运行时间。

./kernel/power/main.c中根据initcall_debug设定pm_print_times_enabled,./drivers/base/power/main.c中根据pm_print_times_enabled在系统休眠唤醒中打印日志。

 

遗留问题:

1. core_param的实现原理

2. 内核中他几个地方判断initcall_debug变量,增加日志输出的作用

你可能感兴趣的文章
pycharm 激活码激活
查看>>
web api Route属性定义
查看>>
android学习笔记 activity生命周期&任务栈&activity启动模式
查看>>
android中的线程池学习笔记
查看>>
http的session和cookie
查看>>
Lucene.Net 优化索引生成,即搜索显示优化
查看>>
如何同时启动两个Android模拟器
查看>>
c语言——结构体做函数参数
查看>>
第一章
查看>>
媒体该如何展示事实之美?
查看>>
js功能比较全面的yyyy-MM-dd格式的日期验证正则
查看>>
WPF中的命令路由
查看>>
YYHS-挑战nbc
查看>>
接口测试学习 -01
查看>>
Session和Cookie
查看>>
Oledb读取txt设置分割符
查看>>
CTS/APIO2019 游记
查看>>
关于servlet路径方面的领悟
查看>>
ThinkPad笔记本无法禁用触摸屏【亲测,有用】
查看>>
Linux free命令详解(转)
查看>>