`
444878909
  • 浏览: 639164 次
文章分类
社区版块
存档分类
最新评论

linux printk函数学习

 
阅读更多

printk与printf的区别在于:
printk运行在kernel space,而printf运行在user space。
所以kernel打印log使用printk,而应用程序打印log使用printf。

在printk.h中定义了8个级别的log level,
#define KERN_EMERG "<0>"
#define KERN_ALERT "<1>"
#define KERN_CRIT "<2>"
#define KERN_ERR "<3>"
#define KERN_WARNING "<4>"
#define KERN_NOTICE "<5>"
#define KERN_INFO "<6>"
#define KERN_DEBUG "<7>"

通过如下命令,可以查看系统当前设定的printk log level。
从结果中我们看到,系统当前设定的log level为0,所以不会
打印任何log到console上。
sh-# cat /proc/sys/kernel/printk
0 4 1 7

此时要查看系统打印的log的话,有两种方法:
1. 使用dmesg命令将ring buffer中的内容保存起来;
sh-# dmesg > /tmp_fs/dmesg.txt
2. 将/proc/kmsg里面的内容保存起来
sh-# cat /proc/kmsg > /tmp_fs/dmesg.txt
有了上面这两种办法,再也不会因为一不小心没有保存控制台上的log而烦恼了。

那printk level应该如何设定呢?这里有两种办法:
1. 使用dmesg命令进行设定,
sh-# cat /proc/sys/kernel/printk
0 4 1 7
sh-# dmesg -n 7
sh-# cat /proc/sys/kernel/printk
7 4 1 7
2. 直接更改printk配置文件,
sh-# echo 1 > /proc/sys/kernel/printk
sh-# cat /proc/sys/kernel/printk
1 4 1 7

因为linux系统过程中会打印较多的系统log,所以一定要在系统启动前就设定好printk level。

刚通过实验验证了,printk level只会影响到kernel log是否输出到控制台上;
但是无论printk level如何,kernel log都会保存到ring buffer中。

问题:
将printk level设定为KERN_DEBUG,这样开机过程中会输出大量的log,
会不会影响到系统开机性能呢?
需要通过实验进行验证。

分享到:
评论

相关推荐

    linux内核调试方法总结

    1 printk函数的健壮性 2 printk函数脆弱之处 3 LOG等级 4 记录缓冲区 5 syslogd/klogd 6 dmesg 7 注意 8 内核printk和日志系统的总体结构 9 动态调试 六 内存调试工具 1 MEMWATCH 2 YAMD 3 Electric Fence 七 ...

    嵌入式Linux的调试技术

    Linux内核程序只能使用printk函数输出调试信息。  防止printk函数降低linux驱动性能  Linux驱动只在开发阶段使用printk函数输出消息。正式发布linux驱动是将可能影响性能的printk函数去掉。利用c语言中的编译...

    linux系统调用可视化 操作系统课程设计 实验报告

    linux系统调用可视化 操作系统课程设计 实验报告。 完成linux的系统调用过程的可视化,展示执行过程,使用printk函数实现。达到可视化的效果。

    linux驱动学习去开发入门

    Linux设备驱动程序学习(0)-Hello, world!模块 Linux设备驱动程序学习(0) -Hello, world!模块 一个学习Linux设备驱动程序都会碰到的第一个例程: #include &lt;linux/init.h&gt; #include &lt;linux/module.h&gt; ...

    Linux编程从入门到精通

    第9章 替换printk 199 第10章 任务调度 202 第11章 中断处理程序 207 第12章 对称多处理 211 第13章 常见错误 212 附录A 2.0和2.2之间的差异 213 附录B 其他资源 214 附录C 给出你的评价 215 第三部分 Linux程序员...

    高通平台printk输出log到串口

    1、查看当前打印级别 # cat /proc/sys/kernel/printk 默认为:4 4 1 7 ...3、内核函数printk的打印级别宏定义:Include/linux/kernel.h #define KERN_EMERG /* system is unusable */ #define KERN_ALERT

    LINUX编程白皮书 (全集)

    第9章 替换printk 199 第10章 任务调度 202 第11章 中断处理程序 207 第12章 对称多处理 211 第13章 常见错误 212 附录A 2.0和2.2之间的差异 213 附录B 其他资源 214 附录C 给出你的评价 215 第三部分 Linux程序员...

    浅谈在linux kernel中打印函数调用的堆栈的方法

    在Linux内核调试中,经常用到的打印函数调用堆栈的方法非常简单,只需在需要查看堆栈的函数中加入: dump_stack(); 或 __backtrace(); 即可 dump_stack()在~/kernel/ lib/Dump_stack.c中定义 void dump_stack(void)...

    linux编程白皮书

    第9章 替换printk 199 第10章 任务调度 202 第11章 中断处理程序 207 第12章 对称多处理 211 第13章 常见错误 212 附录A 2.0和2.2之间的差异 213 附录B 其他资源 214 附录C 给出你的评价 215 第三部分 Linux程序员...

    能用 VS 2013 编译的 Linux 0.11 源代码

    查看函数调用层次一类的功能,为分析源代码提供最大的方便。 而且 MASM Intel 格式的汇编代码,可比 GCC AT&T 格式的便于阅读多了。 编辑汇编代码,推荐使用 Notepad++,完美支持 MASM 语法高亮。 首先下载我修改好...

    linux内核修炼之道

    《LINUX内核修炼之道》精华分享与讨论(16)——子系统的初始化:那些入口函数...........90 《LINUX内核修炼之道》精华分享与讨论(17)——子系统的初始化:以PCI子系统为例....96 《LINUX内核修炼之道》精华分享...

    嵌入式Linux调试技术

    Kgdb除了提供类似的printk函数的日志输出功能,还允许开发人员直接在pc上通过gdb链接目标设备。Kgdb包含了两部分:kgdb内核和一套连接接口。这些接口目前支持串口tty设备连接和以太网连接。其中串口连接需要通过内核...

    Linux内核修炼之道-pdf版

    态度决定一切:从初始化函数开始............................................................................................41 内核学习的心理问题...........................................................

    LINUX编程白皮书

    第9章 替换printk 199 第10章 任务调度 202 第11章 中断处理程序 207 第12章 对称多处理 211 第13章 常见错误 212 附录A 2.0和2.2之间的差异 213 附录B 其他资源 214 附录C 给出你的评价 215 第三部分 Linux程序员...

    Linux编程白皮书

    第9章 替换printk 199 第10章 任务调度 202 第11章 中断处理程序 207 第12章 对称多处理 211 第13章 常见错误 212 附录A 2.0和2.2之间的差异 213 附录B 其他资源 214 附录C 给出你的评价 215 第三部分 Linux程序员...

    82-实验 实训 实习-进程遍历 实验1

    导”教材第 13 章。2. 每个进程的进程名字、pid、进程状态、父进程的指针等在 task-struct 结构的字段中。在内核中使用 printk 函数打印有

    Linux编程资料

    第9章 替换printk 199 第10章 任务调度 202 第11章 中断处理程序 207 第12章 对称多处理 211 第13章 常见错误 212 附录A 2.0和2.2之间的差异 213 附录B 其他资源 214 附录C 给出你的评价 215 第三部分 Linux程序员...

Global site tag (gtag.js) - Google Analytics