91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Linux內(nèi)核printk日志級(jí)別全解析:從參數(shù)解讀到實(shí)操配置

jf_44130326 ? 2025-11-20 15:54 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

一、開篇:一個(gè)命令引出的核心問題

Linux終端執(zhí)行cat /proc/sys/kernel/printk,你可能會(huì)看到這樣的輸出:

wKgZO2kc_MqAHvRAAAADO3gPLnk932.png

這串?dāng)?shù)字不是隨機(jī)的,而是內(nèi)核日志系統(tǒng)的“核心配置開關(guān)”——它直接決定了printk(內(nèi)核打印函數(shù))的日志輸出行為。如果你是嵌入式開發(fā)者、內(nèi)核調(diào)試工程師,或經(jīng)常需要排查驅(qū)動(dòng)/系統(tǒng)問題,理解這串?dāng)?shù)字和printk輸出等級(jí),能讓你高效篩選關(guān)鍵日志,避免被無效信息淹沒。

二、先搞懂:什么是printk輸出等級(jí)?

printk是Linux內(nèi)核的“調(diào)試?yán)鳌?,類似用戶態(tài)的printf,但多了一個(gè)核心特性——輸出等級(jí)(Log Level)。

它的本質(zhì)是給日志貼“優(yōu)先級(jí)標(biāo)簽”,核心作用有兩個(gè):

1.控制輸出渠道:只有日志等級(jí)≥內(nèi)核“控制臺(tái)日志級(jí)別”時(shí),才會(huì)實(shí)時(shí)打印到控制臺(tái)(串口/終端);否則僅存入內(nèi)核緩沖區(qū)(需用dmesg查看)。

2.區(qū)分信息重要性:從致命崩潰到調(diào)試細(xì)節(jié),8個(gè)等級(jí)幫你快速定位關(guān)鍵問題(比如優(yōu)先關(guān)注錯(cuò)誤級(jí)日志,忽略調(diào)試級(jí)冗余信息)。

三、8個(gè)輸出等級(jí):數(shù)值越小,越緊急!

Linux內(nèi)核在中定義了8個(gè)標(biāo)準(zhǔn)輸出等級(jí),數(shù)值0~7,數(shù)值越小優(yōu)先級(jí)越高(0級(jí)為系統(tǒng)崩潰級(jí),7級(jí)為調(diào)試級(jí))。每個(gè)等級(jí)都有明確的使用場(chǎng)景,對(duì)應(yīng)關(guān)系如下:

等級(jí)宏 數(shù)值 英文含義 中文說明 典型場(chǎng)景
KERN_EMERG 0 system is unusable 緊急情況(系統(tǒng)不可用) 內(nèi)核崩潰、致命硬件錯(cuò)誤(如內(nèi)存耗盡掛起)
KERN_ALERT 1 action must be taken immediately 必須立即處理的警報(bào) 關(guān)鍵資源耗盡(磁盤滿)、權(quán)限驗(yàn)證失敗
KERN_CRIT 2 critical conditions 嚴(yán)重錯(cuò)誤 文件系統(tǒng)損壞、進(jìn)程調(diào)度異常
KERN_ERR 3 error conditions 普通錯(cuò)誤 驅(qū)動(dòng)初始化失敗、函數(shù)調(diào)用關(guān)鍵錯(cuò)誤
KERN_WARNING 4 warning conditions 警告(潛在問題) 參數(shù)非法、內(nèi)存分配警告(非致命)
KERN_NOTICE 5 normal but significant 通知(重要正常事件) 模塊加載/卸載、系統(tǒng)啟動(dòng)關(guān)鍵步驟
KERN_INFO 6 informational 信息性消息 驅(qū)動(dòng)版本、硬件探測(cè)結(jié)果
KERN_DEBUG 7 debug-level messages 調(diào)試消息 開發(fā)者調(diào)試(函數(shù)進(jìn)出、變量值打印)

小細(xì)節(jié):每個(gè)等級(jí)宏本質(zhì)是帶優(yōu)先級(jí)的字符串,比如KERN_ERR等價(jià)于<3>,所以printk(KERN_ERR "xxx")也可以寫成printk("<3>xxx")。

四、深度解讀:/proc/sys/kernel/printk的4個(gè)參數(shù)

回到開篇的輸出7 4 1 7,這4個(gè)參數(shù)順序固定,分別對(duì)應(yīng)內(nèi)核日志的4個(gè)核心配置(從左到右):

1.控制臺(tái)日志級(jí)別(console_loglevel):7

?核心作用:決定哪些日志會(huì)實(shí)時(shí)輸出到控制臺(tái)。

?規(guī)則:日志等級(jí)≤該值時(shí),直接打印到控制臺(tái)(數(shù)值越大,輸出越全)。

?你的系統(tǒng)配置:7表示所有8個(gè)等級(jí)的日志(0~7)都會(huì)實(shí)時(shí)顯示,適合調(diào)試場(chǎng)景(默認(rèn)通常為4,僅輸出警告及以上)。

2.默認(rèn)消息日志級(jí)別(default_message_loglevel):4

?核心作用:printk未顯式指定等級(jí)時(shí),自動(dòng)使用的默認(rèn)等級(jí)(對(duì)應(yīng)KERN_WARNING)。

?示例:printk("無等級(jí)日志")等價(jià)于printk(KERN_WARNING "無等級(jí)日志")。

3.最小控制臺(tái)日志級(jí)別(minimum_console_loglevel):1

?核心作用:限制控制臺(tái)日志級(jí)別的“最低值”(不能低于1)。

?意義:避免誤操作將級(jí)別設(shè)為0(僅顯示緊急級(jí)),導(dǎo)致遺漏關(guān)鍵日志。

4.默認(rèn)控制臺(tái)日志級(jí)別(default_console_loglevel):7

?核心作用:內(nèi)核啟動(dòng)時(shí)的默認(rèn)控制臺(tái)級(jí)別,也作為重置參考值。

五、實(shí)操指南:日志級(jí)別配置與日志查看

1.臨時(shí)修改控制臺(tái)日志級(jí)別(立即生效)

?需求1:顯示所有日志(調(diào)試用):

echo7 > /proc/sys/kernel/printk

?需求2:僅顯示錯(cuò)誤及以上(減少冗余):

echo3> /proc/sys/kernel/printk # 僅輸出0~3級(jí)(緊急/警報(bào)/嚴(yán)重錯(cuò)誤/普通錯(cuò)誤)

?需求3:恢復(fù)默認(rèn)配置(假設(shè)默認(rèn)是4):

echo4417> /proc/sys/kernel/printk

2.永久修改(重啟不失效)

臨時(shí)修改會(huì)在重啟后失效,需寫入配置文件:

# 編輯 sysctl 配置文件vi/etc/sysctl.conf# 添加以下內(nèi)容(根據(jù)需求調(diào)整數(shù)值)kernel.printk =4417# 生效配置sysctl-p

3.日志查看方式(3種常用)

?實(shí)時(shí)查看控制臺(tái)日志:直接在終端觀察(僅顯示符合級(jí)別要求的日志)。

?查看內(nèi)核緩沖區(qū)日志:dmesg(顯示所有等級(jí)日志,包括未輸出到控制臺(tái)的),搭配過濾更高效:

dmesg| grep"ERR"# 篩選錯(cuò)誤級(jí)日志dmesg -w # 實(shí)時(shí)監(jiān)控日志

?查看持久化日志文件:多數(shù)發(fā)行版會(huì)將內(nèi)核日志寫入/var/log/kern.log,可用tail實(shí)時(shí)跟蹤:

wKgZO2kc_MqANFNFAAAbUD_1glY903.png

六、開發(fā)實(shí)戰(zhàn):printk正確用法

1.基本語法(必須指定等級(jí)宏)

#include// 包含等級(jí)宏定義// 錯(cuò)誤級(jí)日志:驅(qū)動(dòng)初始化失敗printk(KERN_ERR"網(wǎng)卡驅(qū)動(dòng)初始化失敗:設(shè)備節(jié)點(diǎn)不存在n");// 調(diào)試級(jí)日志:打印變量值intbuf_size =1024;printk(KERN_DEBUG"緩沖區(qū)大?。?d 字節(jié)n", buf_size);// 未指定等級(jí)(默認(rèn) KERN_WARNING)printk("參數(shù)校驗(yàn)警告:數(shù)值超出范圍n");

2.避坑指南

?不要濫用KERN_DEBUG:調(diào)試完成后建議刪除或注釋,避免占用內(nèi)核緩沖區(qū)。

?關(guān)鍵錯(cuò)誤必須用高等級(jí):比如驅(qū)動(dòng)加載失敗用KERN_ERR,而非KERN_INFO,確保不會(huì)被過濾。

?結(jié)合日志工具:復(fù)雜場(chǎng)景可搭配syslogd或klogd守護(hù)進(jìn)程,自定義日志存儲(chǔ)規(guī)則。

七、總結(jié)

printk輸出等級(jí)是Linux內(nèi)核日志的“優(yōu)先級(jí)管理系統(tǒng)”,8個(gè)等級(jí)+ 4個(gè)核心參數(shù),共同決定了日志的輸出行為。記住核心邏輯:

?數(shù)值越小,優(yōu)先級(jí)越高;

?控制臺(tái)日志級(jí)別≥日志等級(jí)時(shí),才會(huì)實(shí)時(shí)輸出;

?調(diào)試用KERN_DEBUG+級(jí)別7,生產(chǎn)環(huán)境用KERN_ERR+級(jí)別3~4。

掌握這些知識(shí),無論你是調(diào)試內(nèi)核模塊、排查驅(qū)動(dòng)問題,還是優(yōu)化系統(tǒng)日志,都能更高效地定位關(guān)鍵信息,告別日志“大海撈針”!

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Linux
    +關(guān)注

    關(guān)注

    88

    文章

    11764

    瀏覽量

    219092
  • LINUX內(nèi)核
    +關(guān)注

    關(guān)注

    1

    文章

    321

    瀏覽量

    23218
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    Linux內(nèi)核學(xué)習(xí)筆記:printk調(diào)試

    很多內(nèi)核開發(fā)者喜歡的調(diào)試工具是printk,在Linux內(nèi)核中,使用printk()函數(shù)來打印信息,它與C庫的printf()函數(shù)類似。
    發(fā)表于 06-01 15:14 ?1862次閱讀

    Linux內(nèi)核調(diào)試方法的總結(jié)

    的方式指定一個(gè)LOG級(jí)別printk(KERN_CRIT “Hello, world!\n”);注意,第一個(gè)參數(shù)并不一個(gè)真正的參數(shù),因?yàn)槠渲袥]有用于分隔
    發(fā)表于 05-20 10:30

    printk()函數(shù)的總結(jié)

    我們?cè)谑褂?b class='flag-5'>printk()函數(shù)中使用日志級(jí)別為的是使編程人員在編程過程中自定義地進(jìn)行信息的輸出,更加容易地掌握系統(tǒng)當(dāng)前的狀況。對(duì)程序的調(diào)試起到了很重要的作用。(下文中的日志
    發(fā)表于 07-09 03:47

    linux內(nèi)核打印函數(shù)printk的方法

    1.linux內(nèi)核打印函數(shù)printk一、函數(shù)有頭文件二、定義的關(guān)鍵宏三、函數(shù)原型合理的創(chuàng)建標(biāo)題,有助于目錄的生成如何改變文本的樣式插入鏈接與圖片如何插入一段漂亮的代碼片生成一個(gè)適合你的列表創(chuàng)建一個(gè)
    發(fā)表于 12-20 07:02

    迅為RK3399開發(fā)板Android 系統(tǒng)--打印級(jí)別設(shè)置(printk日志等級(jí)設(shè)置)

    內(nèi)核源碼 include/linux/kern_levels.h 文件中預(yù)定義了內(nèi)核 log 等級(jí),一共有八個(gè)等級(jí), 0 到 7,優(yōu)先級(jí)依次降低,如下所示: // include/
    發(fā)表于 10-25 11:21

    Linux內(nèi)核模塊介紹,使用Linux模塊的優(yōu)點(diǎn)

    內(nèi)核通過 printk() 輸出的信息具有日志級(jí)別日志級(jí)別是通過在
    的頭像 發(fā)表于 03-30 15:53 ?8108次閱讀

    如何配置和使用Linux內(nèi)核printk功能

    了解如何配置和使用Linux內(nèi)核printk功能,包括其動(dòng)態(tài)調(diào)試功能。 這樣可以選擇性地打印調(diào)試消息,而無需重新編譯內(nèi)核。
    的頭像 發(fā)表于 11-27 06:40 ?3658次閱讀

    內(nèi)核日志printk結(jié)構(gòu)淺析

    做DPDK項(xiàng)目時(shí),調(diào)試rte_kni.ko時(shí),發(fā)現(xiàn)printk并不會(huì)向我們想想的那樣把log信息顯示在我們的終端上。
    發(fā)表于 04-22 17:45 ?1593次閱讀

    你知道Linux內(nèi)核調(diào)試關(guān)鍵技術(shù)之一的printk?

    內(nèi)核調(diào)試技術(shù)之中,最簡(jiǎn)單的就是printk的使用了,它的用法和C語言應(yīng)用程序中的printf使用類似,在應(yīng)用程序中依靠的是stdio.h中的庫,而在linux內(nèi)核中沒有這個(gè)庫,所以在
    發(fā)表于 05-10 11:18 ?1921次閱讀

    Linux中的Printk與dmesg功能

    要將linux內(nèi)核的帶級(jí)別控制的printk內(nèi)容打印出來,在命令行輸入 dmesg -n 8 就將所有級(jí)別的信息都打印出來。
    發(fā)表于 04-02 14:39 ?630次閱讀

    介紹一下linux內(nèi)核比較優(yōu)秀的調(diào)試方式KGDB

    printf相信學(xué)過C語言的同志再熟悉不過了,然而在linux內(nèi)核開發(fā)中有一種非常簡(jiǎn)潔的日志輸出函數(shù)叫-printk
    的頭像 發(fā)表于 03-08 13:45 ?2707次閱讀

    Linux內(nèi)核中如何修改printk等級(jí)

    KERN_SOH "7" /* 調(diào)試輸出 */ Linux內(nèi)核printk定義了8個(gè)輸出等級(jí), KERN_EMERG
    的頭像 發(fā)表于 09-27 15:56 ?3498次閱讀

    如何配置和驗(yàn)證Linux內(nèi)核參數(shù)

    Linux系統(tǒng)運(yùn)維和性能優(yōu)化中,內(nèi)核參數(shù)(sysctl)的配置至關(guān)重要。合理的參數(shù)調(diào)整可以顯著提升網(wǎng)絡(luò)性能、系統(tǒng)穩(wěn)定性及資源利用率。然而,
    的頭像 發(fā)表于 05-29 17:40 ?1166次閱讀

    基于 DR1M90 的 Linux-RT 內(nèi)核開發(fā):編譯配置到 GPIO / 按鍵應(yīng)用實(shí)現(xiàn)(1)

    本手冊(cè)由創(chuàng)龍科技研發(fā),針對(duì) DR1M90,詳述 Linux-RT 實(shí)時(shí)內(nèi)核開發(fā):含實(shí)時(shí)性測(cè)試(LinuxLinux-RT 對(duì)比、CPU 空載 / 滿負(fù)荷 / 隔離狀態(tài)測(cè)試)、
    的頭像 發(fā)表于 12-02 10:38 ?1191次閱讀
    基于 DR1M90 的 <b class='flag-5'>Linux</b>-RT <b class='flag-5'>內(nèi)核</b>開發(fā):<b class='flag-5'>從</b>編譯<b class='flag-5'>配置</b>到 GPIO / 按鍵應(yīng)用實(shí)現(xiàn)(1)

    Linux內(nèi)核日志玩明白了嗎?printk調(diào)試神器解析

    日志等級(jí)機(jī)制,參數(shù)配置到實(shí)戰(zhàn)用法一次講透~一、printk與printf的差異用戶態(tài)的printf大家都熟,直接打印內(nèi)容,簡(jiǎn)單粗暴。但
    的頭像 發(fā)表于 12-19 08:32 ?873次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>內(nèi)核</b><b class='flag-5'>日志</b>玩明白了嗎?<b class='flag-5'>printk</b>調(diào)試神器<b class='flag-5'>全</b><b class='flag-5'>解析</b>