"); //-->
作者:下家山(转载,请注明作者,请尊重原创)
一:printk等级Printk是一个带打印等级(loglevel)的内核打印语句。
Linux内核根据问题的严重程度定义了八种等级(loglevel)
#define KERN_EMERG "<0>" /* system is unusable */
#define KERN_ALERT "<1>" /* action must be taken immediately */
#define KERN_CRIT "<2>" /* critical conditions */
#define KERN_ERR "<3>" /* error conditions */
#define KERN_WARNING "<4>" /* warning conditions */
#define KERN_NOTICE "<5>" /* normal but significant condition */
#define KERN_INFO "<6>" /* informational */
#define KERN_DEBUG "<7>" /* debug-level messages */
值越小等级越高。
(见include/linux/kernel.h linux2.6.15)
二:printk输出方式Printk的输出方式有两种:syslog(日志)和console(控制台)。我们通常在调试驱动时一般
把控制台定向到了串口,然后通过串口显示到串口终端上。
2.1 通过console输出当loglevel小于console_loglevel时,消息才能被打印到控制台上(也就能在串口终端看到内容了)。
2.2 通过日志查看那么当loglevel大于console_loglevel,消息保存在哪里呢?
如果系统运行了klogd和syslogd,则无论console_loglevel为何值,内核消息都将追加到/var/log/messages中。如果klogd没有运行,消息不会传递到用户空间,只能查看/proc/kmsg。
也就是说messages或kmsg中会显示所有的打印信息。
三:console_loglevel值为多少Console_loglevel同样定义在include/linux/kernel.h中
#define console_loglevel (console_printk[0])
#define default_message_loglevel (console_printk[1])
#define minimum_console_loglevel (console_printk[2])
#define default_console_loglevel (console_printk[3])
而console_printk定义在哪里呢?
(见kernel/printk.c)
#define DEFAULT_MESSAGE_LOGLEVEL 4 /* KERN_WARNING */
/* We show everything that is MORE important than this.. */
#define MINIMUM_CONSOLE_LOGLEVEL 1 /* Minimum loglevel we let people use */
#define DEFAULT_CONSOLE_LOGLEVEL 7 /* anything MORE serious than KERN_DEBUG */
int console_printk[4] = {
DEFAULT_CONSOLE_LOGLEVEL, /* console_loglevel */
DEFAULT_MESSAGE_LOGLEVEL, /* default_message_loglevel */
MINIMUM_CONSOLE_LOGLEVEL,/* minimum_console_loglevel */
DEFAULT_CONSOLE_LOGLEVEL, /* default_console_loglevel */
};
这样 console_loglevel值就为7
四:测试程序#include
#include
#define PRINTM_MSG(msg) printk(KERN_DEBUG msg)
#define PRINTM(level,msg...) PRINTM_##level(msg)
#define pr_debug(arg) printk(KERN_INFO arg)
static int printk_test_init(void)
{
printk(KERN_EMERG "Hello0\n");
printk(KERN_ALERT "Hello1\n");
printk(KERN_CRIT "Hello2\n");
printk(KERN_ERR "Hello3\n");
printk(KERN_WARNING "Hello4\n");
printk(KERN_NOTICE "Hello5\n");
printk(KERN_INFO "Hello6\n");
printk(KERN_DEBUG "Hello7\n");
printk(KERN_DEBUG "Hello7\n");
printk(KERN_DEBUG "%s\n","Hello7-1");
PRINTM_MSG("No external FW image\n");
PRINTM(MSG, "No external FW image\n");
pr_debug("success!\n") ;
return 0;
}
static void printk_test_exit(void)
{
printk(KERN_EMERG"Goodbye\n");
}
module_init(printk_test_init);
module_exit(printk_test_exit);
五:测试结果转载:请注明,作者,下家山 请尊重原创!
专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们
相关推荐
北京富而瑞电梯安全回路与抱闸电路
水平喷锡简介
SigmaStar的SSD20x处理器Nand Flash读写问题排查
华中科技大学控制系科技创新基地
天津正大电梯接线端子排列图
中国3G要圈定第二批成员 外国成员要上名单
松下摄像机交流适配器电路原理图
松下摄像机交流适配器VW-AM10E电路原理图 JPG格式
Microsoft发布首款机器人模型,旨在提升物理人工智能,力图将机器人从生产线中解放出来
新型“智能”芯片可大幅节能提速
凯越08智能车展示
华中科技大学控制系科技创新基地
国产教育软件行到了分岔口
为什么碰到几个做嵌入式开发的人都说做 MCU 开发没什么意思,要做 MPU (Linux) 开发?
Corvex部署NVIDIA H200 GPU以支持生产型人工智能
介绍一个国外的操作系统论坛
古尔曼:苹果全新Siri最快下月随iOS 26.4测试版亮相
“机器人永不疲倦”:现代解释了为何其波士顿动力Atlas机器人准备接管工厂,却不愿接管你的家
数码相机的电路图
涂覆有机可焊保护剂OSP工艺的应用
数据中心的下一个胜负手:跳出AI芯片
马斯克确认特斯拉旗下自动驾驶无人出租车Cybercab 4月量产
北京富而瑞电梯控制电源电路
双车比拼 智能小车 寻迹小车
电脑维修人员需持职业资格证书(全文)
软件工程专业毕业生的目标
北京富而瑞电梯主电路
天津正大电梯控制电路(3)
南通大学 飞思卡尔 智能车 SWT队 宣传视频
类人机器人即将接受考验