本文转载自: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简要说明【转】的更多相关文章

  1. JavaScript权威设计--JavaScript函数(简要学习笔记十一)

    1.函数调用的四种方式 第三种:构造函数调用 如果构造函数调用在圆括号内包含一组实参列表,先计算这些实参表达式,然后传入函数内.这和函数调用和方法调用是一致的.但如果构造函数没有形参,JavaScri ...

  2. JavaScript权威设计--JavaScript函数(简要学习笔记十)

    1.函数命名规范 函数命名通常以动词为前缀的词组.通常第一个字符小写.当包含多个单词时,一种约定是将单词以下划线分割,就像"like_Zqz()". 还有一种就是"lik ...

  3. [译]Angular2 和TypeScript -- 一次简要的预览

    原文链接:https://www.infoq.com/articles/Angular2-TypeScript-High-Level-Overview 作者:  Yakov Fain Posted o ...

  4. 内网劫持渗透新姿势:MITMf简要指南

    声明:本文具有一定攻击性,仅作为技术交流和安全教学之用,不要用在除了搭建环境之外的环境. 0×01 题记 又是一年十月一,想到小伙伴们都纷纷出门旅游,皆有美酒佳人相伴,想到这里,不禁潸然泪下.子曰:& ...

  5. markdown简要说明显示样式

    markdown 什么是markdown:     Markdown是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式.   Markdown具有一系列 ...

  6. 简要介绍BASE64、MD5、SHA、HMAC几种方法。

    加密解密,曾经是我一个毕业设计的重要组件.在工作了多年以后回想当时那个加密.解密算法,实在是太单纯了.     言归正传,这里我们主要描述Java已经实现的一些加密解密算法,最后介绍数字证书.     ...

  7. Java Reference简要概述

    @(Java)[Reference] Java Reference简要概述 Reference对象封装了其它对象的引用,可以和普通的对象一样操作. Java提供了四种不同类型的引用,引用级别从高到低分 ...

  8. 转载:谈谈Unicode编码,简要解释UCS、UTF、BMP、BOM等名词

    转载: 谈谈Unicode编码,简要解释UCS.UTF.BMP.BOM等名词 这是一篇程序员写给程序员的趣味读物.所谓趣味是指可以比较轻松地了解一些原来不清楚的概念,增进知识,类似于打RPG游戏的升级 ...

  9. maven命令参考简要

    命令参考简要说明 mvn archetype:generate — 创建生成Tiny骨架工程 参数名 说明 groupId 用户项目的包目录,用户需要根据实际情况设置.比如com.abc artifa ...

随机推荐

  1. HDFS冗余数据块的自动删除

    HDFS冗余数据块的自动删除 在日常维护hadoop集群的过程中发现这样一种情况: 某个节点由于网络故障或者DataNode进程死亡,被NameNode判定为死亡,HDFS马上自动开始数据块的容错拷贝 ...

  2. setTag和findViewByTag的使用具体解释

    在使用ListView或者GridView的时候. 假设想要在Aciviry中获取到Item中的子View,比較频繁的使用是:getChildAt(int position): 之前自己差点儿不会去使 ...

  3. 【原创】SM4password算法源代码接口具体解释

    [原创]SM4password算法源代码接口具体解释 近期几天想把cryptdb的加密算法换成国产的sm4加密算法.所以花了时间研究了一下sm4的源代码和基本原理,避免忘记,写下这篇博客以作记录. 先 ...

  4. Java reference的种类及使用场景

    Java 中一共有 4 种类型的引用 : StrongReference. SoftReference. WeakReference 以及 PhantomReference (传说中的幽灵引用).这  ...

  5. InnoDB Insert(插入)操作(下)--mysql技术内幕

    接上一篇文章,最后做的那个实验,我是想证明mysql innodb存储引擎,commit操作与flush数据到磁盘之间的关系,当与同事交流之后,他说,你应该把innodb_buffer_size的大小 ...

  6. 【Excle数据透视】如何在数据透视表字段列表中显示更多的字段

    创建完数据透视表之后,由于字段太多,在列表中没有完全显示 解决方案 通过"字段节和区域节并排"功能来显示更多字段 修改后结果 字段已经完全显示出来了! "字段节和区域节层 ...

  7. javascript 数组Array排序

    var numberAry = [9,9,10,8,7,80,33,55,22]; numberAry.sort(); /*输出:10,22,33,55,7,8,80,9,9 上面的代码没有按照数值的 ...

  8. ubuntu16.04 下安装opencv2.4.9

    准备工作,安装环境 sudo apt-get install build-essential cmake libgtk2.0-dev pkg-config python-dev python-nump ...

  9. TRUNCATE 不能引发触发器

    我在使用phpmyadmin清空时发现这个问题

  10. Java编码辅助工具:Lombok —— 避免重复臃肿的代码,提高效率

    在项目开发过程中,经常会涉及到一些调整很少但又必不可少的环节,比如实体类的Getter/Setter方法,ToString方法等.这时可以使用Lombok来避免这种重复的操作,减少非核心代码的臃肿,提 ...