initcall_debug简要说明

Posted 请给我倒杯茶

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了initcall_debug简要说明相关的知识,希望对你有一定的参考价值。

本文转载自:https://blog.csdn.net/zangdongming/article/details/37769265

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变量,增加日志输出的作用

以上是关于initcall_debug简要说明的主要内容,如果未能解决你的问题,请参考以下文章

前端 高级 (二十五)vue2.0项目实战一 配置简要说明代码简要说明Import/Export轮播和列表例子

ContentProvider简要说明

根据你的理解,简要说明使用双等号(==)和equals()方法判断两个字符串是不是相等有啥区别

Nginx简要安装配置说明

conpot_usage简要说明

Linux _bin 目录下命令简要说明