日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux内核printk调试手段,[Mini2440] 内核调试手段之 printk

發(fā)布時間:2024/9/19 linux 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux内核printk调试手段,[Mini2440] 内核调试手段之 printk 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

8種機(jī)械鍵盤軸體對比

本人程序員,要買一個寫代碼的鍵盤,請問紅軸和茶軸怎么選?

一. 內(nèi)核打印函數(shù) printk 介紹

1.1 前言

內(nèi)核提供了 printk 函數(shù)在內(nèi)核運(yùn)行時打印信息,類似于 C 語言中的 printf 函數(shù)。

使用方式:1printk( "打印內(nèi)容");

什么是日志級別? 日志級別表示這句 log 的嚴(yán)重等級,總共有 8 個級別,分別是 0-7,數(shù)字越小級別越高。kernel 中可以設(shè)置屏蔽一些低級別的 log 不打印出來。

printk 的日志級別定義在 linux-2.6.32.2/inlcude/linux/kernel.h 中:1

2

3

4

5

6

7

8#define KERN_EMERG "<0>"

#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 */

簡單解釋一下:緊急事件消息,系統(tǒng)崩潰前的提示,表示系統(tǒng)不可用

報告事件,表示必須立刻采取措施

臨界條件,通常涉及嚴(yán)重的硬件或軟件失敗

錯誤條件,驅(qū)動程序通常用此等級報告硬件錯誤

警告條件,對可能出現(xiàn)的問題進(jìn)行警告

正常又重要的信息,用于提醒

提示信息,打印運(yùn)行時的提示信息

調(diào)試信息,調(diào)試級別的消息

Kernel 中可以修改 /proc/sys/kernel/printk 節(jié)點(diǎn)修改 printk 打印相關(guān)的配置。1

2[[email?protected] /]# cat /proc/sys/kernel/printk

7 4 1 7

其實(shí)這四個值是在kernel/printk.c 中被定義的,這四個數(shù)值分別表示:1

2

3

4

5

6int console_printk[4] = {

DEFAULT_CONSOLE_LOGLEVEL, /* console_loglevel 7 */

DEFAULT_MESSAGE_LOGLEVEL, /* default_message_loglevel 4 */

MINIMUM_CONSOLE_LOGLEVEL, /* minimum_console_loglevel 1 */

DEFAULT_CONSOLE_LOGLEVEL, /* default_console_loglevel 7 */

};

簡單解釋一下:當(dāng)前控制臺日志級別:優(yōu)先級高于該值的消息將被打印至控制臺

默認(rèn)的消息日志級別:將用該優(yōu)先級來打印沒有優(yōu)先級的消息

最高的控制臺日志級別:控制臺日志級別可被設(shè)置的最小值(最高優(yōu)先級)

默認(rèn)的控制臺日志級別:控制臺日志級別的缺省值

當(dāng) printk 的消息日志級別小于當(dāng)前控制臺日志級別 DEFAULT_CONSOLE_LOGLEVEL 時,才會被打印出來。

1.2 示例模塊

文件一:print_level.c1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32#include

#include

static int __init (void)

{

printk(KERN_EMERG "hello! KERN_EMERG = %sn", KERN_EMERG );

printk(KERN_ALERT "hello! KERN_ALERT = %sn", KERN_ALERT );

printk(KERN_CRIT "hello! KERN_CRIT = %sn", KERN_CRIT );

printk(KERN_ERR "hello! KERN_ERR = %sn", KERN_ERR );

printk(KERN_WARNING "hello! KERN_WARNING = %sn", KERN_WARNING);

printk(KERN_NOTICE "hello! KERN_NOTICE = %sn", KERN_NOTICE );

printk(KERN_INFO "hello! KERN_INFO = %sn", KERN_INFO );

printk(KERN_DEBUG "hello! KERN_DEBUG = %sn", KERN_DEBUG );

return 0;

}

static void __exit mod_exit(void)

{

printk(KERN_EMERG "goodbye! KERN_EMERG = %sn", KERN_EMERG );

printk(KERN_ALERT "goodbye! KERN_ALERT = %sn", KERN_ALERT );

printk(KERN_CRIT "goodbye! KERN_CRIT = %sn", KERN_CRIT );

printk(KERN_ERR "goodbye! KERN_ERR = %sn", KERN_ERR );

printk(KERN_WARNING "goodbye! KERN_WARNING = %sn", KERN_WARNING);

printk(KERN_NOTICE "goodbye! KERN_NOTICE = %sn", KERN_NOTICE );

printk(KERN_INFO "goodbye! KERN_INFO = %sn", KERN_INFO );

printk(KERN_DEBUG "goodbye! KERN_DEBUG = %sn", KERN_DEBUG );

}

module_init(mod_init);

module_exit(mod_exit);

MODULE_LICENSE("GPL");

文件二:Makefile1

2

3

4

5

6

7

8

9

10

11

12

13

14obj-m += print_level.o

KERNEL = /home/user/workspace/mini2440/linux-2.6.32.2

SHARE = /home/user/board

all:

make -C $(KERNEL) M=`pwd` modules

rm -rf $(SHARE)/*

cp -f *.ko $(SHARE)/

make clean

@echo "

總結(jié)

以上是生活随笔為你收集整理的linux内核printk调试手段,[Mini2440] 内核调试手段之 printk的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。