printk一些使用技巧

2021-09-29 15:59:58 字數 3128 閱讀 7729

核心通過 printk

() 輸出的資訊具有日誌級別,日誌級別是通過在 printk

() 輸出的字串前加乙個帶尖括號的整數來控制的,如 printk

("<6>hello, world!/n"

);。核心中共提供了八種不同的日誌級別,在 linux/kernel.h 中有相應的巨集對應。

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

#define kern_info "<6>"

/* informational */

#define kern_debug "<7>"

/* debug-level messages */

所以 printk

() 可以這樣用:printk

(kern_info "hello, world!/n");。

未指定日誌級別的 printk

() 採用的預設級別是 default_message_loglevel,這個巨集在 kernel/printk.c 中被定義為整數 4,即對應kern_warning。

在 /proc/sys/kernel/printk 會顯示4個數值(可由 echo 修改),分別表示當前控制台日誌級別、未明確指定日誌級別的預設訊息日誌級別、最小(最高)允許設定的控制台日誌級別、引導時預設的日誌級別。當 printk

() 中的訊息日誌級別小於當前控制台日誌級別時,printk 的資訊(要有/n符)就會在控制台上顯示。但無論當前控制台日誌級別是何值,通過 /proc/kmsg (或使用dmesg)總能檢視。另外如果配置好並執行了 syslogd 或 klogd,沒有在控制台上顯示的 printk 的資訊也會追加到 /var/log/messages.log 中。

char myname=

"chinacodec/n"

;printk

(kern_info "hello, world %s!/n"

, myname);

可用的格式字元

----

----

----

----

----

----

----

----

----

----

----

----

----

----

-int

%d or %x

unsigned

int%u or %x

long

%ld or %lx

unsigned

long

%lu or %lx

long

long

%lld or %llx

unsigned

long

long

%llu or %llx

size_t %zu or %zx

ssize_t %zd or %zx

u64 should be printed with %llu/

%llx,

(unsigned

long

long):

printk

("%llu",(

unsigned

long

long

)u64_var)

;s64 should be printed with %lld/

%llx,

(long

long):

printk

("%lld",(

long

long

)s64_var)

;可參考

列印裸指標(raw pointer)用 %p,

%p除了可以用來列印指標外還可以列印其它的資訊

%pf可列印函式指標的函式名和偏移位址,%pf只列印函式指標的函式名,不列印偏移位址。

如printk

("%pf %pf\n"

, ptr, ptr) will print:

module_start module_start+

0x0/

0x62

[hello]

但是為了支援這個功能你需要開啟config_kallsyms 選項

%pm列印冒號分隔的mac位址,%pm列印mac位址的16進製制無分隔

如printk

("%pm %pm\n"

, mac, mac) will print:

2c:00

:1d:00:

1b:00

2c001d001b00

%i4列印無前導0的ipv4位址,%i4列印冒號分隔的ipv4位址

%i4列印無前導0的ipv6位址,%i6列印無冒號分隔的ipv6位址

如printk

("%pi4 %pi4\n"

, ip, ip) will print:

127.0

.0.1

127.000

.000

.001

其它的特殊格式字元參見

參考http:

2010

/printk-format-specifiers/

SlickEdit 一些使用技巧

slickedit 使用了幾天以後,發現不僅僅是自動提示,瀏覽,它提供的編輯功能也非常強大。如果說 sourceinsight 和 slickedit 在瀏覽 上面各有所長,那麼編輯這方面 se 和 si 就不是乙個級別了。下面是我知道的一些使用技巧,老鳥就不用看了,哈哈.1.如果發現路徑的 顯示成...

mysql 一些使用技巧

1.忘記root密碼,解決辦法 usr local mysql share mysql mysql.server stop mysql4 usr local mysql support files mysql.server stop mysql5 usr local mysql bin mysqld...

latex一些使用技巧

1.如何使連續的參考文獻能夠中間用破折號連起來?比如 6,7,8,9 變成 6 9 方法 在文件開始前加上下面的語句命令 usepackage numbers,sort compress 不但可以壓縮參考文獻標號,還可以進行排序,即無論正文裡面的順序怎樣,顯示出來都是先後順序。在elsevier模板...