国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Linux內核printk日志級別全解析:從參數解讀到實操配置

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

掃碼添加小助手

加入工程師交流群

一、開篇:一個命令引出的核心問題

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

wKgZO2kc_MqAHvRAAAADO3gPLnk932.png

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

二、先搞懂:什么是printk輸出等級?

printk是Linux內核的“調試利器”,類似用戶態的printf,但多了一個核心特性——輸出等級(Log Level)

它的本質是給日志貼“優先級標簽”,核心作用有兩個:

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

2.區分信息重要性:從致命崩潰到調試細節,8個等級幫你快速定位關鍵問題(比如優先關注錯誤級日志,忽略調試級冗余信息)。

三、8個輸出等級:數值越小,越緊急!

Linux內核在中定義了8個標準輸出等級,數值0~7,數值越小優先級越高(0級為系統崩潰級,7級為調試級)。每個等級都有明確的使用場景,對應關系如下:

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

小細節:每個等級宏本質是帶優先級的字符串,比如KERN_ERR等價于<3>,所以printk(KERN_ERR "xxx")也可以寫成printk("<3>xxx")。

四、深度解讀:/proc/sys/kernel/printk的4個參數

回到開篇的輸出7 4 1 7,這4個參數順序固定,分別對應內核日志的4個核心配置(從左到右):

1.控制臺日志級別(console_loglevel):7

?核心作用:決定哪些日志會實時輸出到控制臺。

?規則:日志等級≤該值時,直接打印到控制臺(數值越大,輸出越全)。

?你的系統配置:7表示所有8個等級的日志(0~7)都會實時顯示,適合調試場景(默認通常為4,僅輸出警告及以上)。

2.默認消息日志級別(default_message_loglevel):4

?核心作用:printk未顯式指定等級時,自動使用的默認等級(對應KERN_WARNING)。

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

3.最小控制臺日志級別(minimum_console_loglevel):1

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

?意義:避免誤操作將級別設為0(僅顯示緊急級),導致遺漏關鍵日志。

4.默認控制臺日志級別(default_console_loglevel):7

?核心作用:內核啟動時的默認控制臺級別,也作為重置參考值。

五、實操指南:日志級別配置與日志查看

1.臨時修改控制臺日志級別(立即生效)

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

echo7 > /proc/sys/kernel/printk

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

echo3> /proc/sys/kernel/printk # 僅輸出0~3級(緊急/警報/嚴重錯誤/普通錯誤)

?需求3:恢復默認配置(假設默認是4):

echo4417> /proc/sys/kernel/printk

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

臨時修改會在重啟后失效,需寫入配置文件:

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

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

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

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

dmesg| grep"ERR"# 篩選錯誤級日志dmesg -w # 實時監控日志

?查看持久化日志文件:多數發行版會將內核日志寫入/var/log/kern.log,可用tail實時跟蹤:

wKgZO2kc_MqANFNFAAAbUD_1glY903.png

六、開發實戰:printk正確用法

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

#include// 包含等級宏定義// 錯誤級日志:驅動初始化失敗printk(KERN_ERR"網卡驅動初始化失敗:設備節點不存在n");// 調試級日志:打印變量值intbuf_size =1024;printk(KERN_DEBUG"緩沖區大小:%d 字節n", buf_size);// 未指定等級(默認 KERN_WARNING)printk("參數校驗警告:數值超出范圍n");

2.避坑指南

?不要濫用KERN_DEBUG:調試完成后建議刪除或注釋,避免占用內核緩沖區。

?關鍵錯誤必須用高等級:比如驅動加載失敗用KERN_ERR,而非KERN_INFO,確保不會被過濾。

?結合日志工具:復雜場景可搭配syslogd或klogd守護進程,自定義日志存儲規則。

七、總結

printk輸出等級是Linux內核日志的“優先級管理系統”,8個等級+ 4個核心參數,共同決定了日志的輸出行為。記住核心邏輯:

?數值越小,優先級越高;

?控制臺日志級別≥日志等級時,才會實時輸出;

?調試用KERN_DEBUG+級別7,生產環境用KERN_ERR+級別3~4。

掌握這些知識,無論你是調試內核模塊、排查驅動問題,還是優化系統日志,都能更高效地定位關鍵信息,告別日志“大海撈針”!

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Linux
    +關注

    關注

    88

    文章

    11608

    瀏覽量

    217666
  • LINUX內核
    +關注

    關注

    1

    文章

    318

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    Linux內核學習筆記:printk調試

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

    Linux內核調試方法的總結

    的方式指定一個LOG級別printk(KERN_CRIT “Hello, world!\n”);注意,第一個參數并不一個真正的參數,因為其中沒有用于分隔
    發表于 05-20 10:30

    printk()函數的總結

    我們在使用printk()函數中使用日志級別為的是使編程人員在編程過程中自定義地進行信息的輸出,更加容易地掌握系統當前的狀況。對程序的調試起到了很重要的作用。(下文中的日志
    發表于 07-09 03:47

    linux內核打印函數printk的方法

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

    迅為RK3399開發板Android 系統--打印級別設置(printk日志等級設置)

    內核源碼 include/linux/kern_levels.h 文件中預定義了內核 log 等級,一共有八個等級, 0 到 7,優先級依次降低,如下所示: // include/
    發表于 10-25 11:21

    Linux內核模塊介紹,使用Linux模塊的優點

    內核通過 printk() 輸出的信息具有日志級別日志級別是通過在
    的頭像 發表于 03-30 15:53 ?7937次閱讀

    如何配置和使用Linux內核printk功能

    了解如何配置和使用Linux內核printk功能,包括其動態調試功能。 這樣可以選擇性地打印調試消息,而無需重新編譯內核
    的頭像 發表于 11-27 06:40 ?3505次閱讀

    內核日志printk結構淺析

    做DPDK項目時,調試rte_kni.ko時,發現printk并不會向我們想想的那樣把log信息顯示在我們的終端上。
    發表于 04-22 17:45 ?1510次閱讀

    你知道Linux內核調試關鍵技術之一的printk

    內核調試技術之中,最簡單的就是printk的使用了,它的用法和C語言應用程序中的printf使用類似,在應用程序中依靠的是stdio.h中的庫,而在linux內核中沒有這個庫,所以在
    發表于 05-10 11:18 ?1863次閱讀

    Embeded linux之gpio

    左至右分別為控制臺(串口/ssh/telnet)日志級別、默認消息(printk("...");)日志
    發表于 05-15 15:43 ?775次閱讀
    Embeded <b class='flag-5'>linux</b>之gpio

    Embeded linux之移植iptables

    左至右分別為控制臺(串口/ssh/telnet)日志級別、默認消息(printk("...");)日志
    發表于 05-15 15:45 ?812次閱讀
    Embeded <b class='flag-5'>linux</b>之移植iptables

    Linux中的Printk與dmesg功能

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

    介紹一下linux內核比較優秀的調試方式KGDB

    printf相信學過C語言的同志再熟悉不過了,然而在linux內核開發中有一種非常簡潔的日志輸出函數叫-printk
    的頭像 發表于 03-08 13:45 ?2565次閱讀

    Linux內核中如何修改printk等級

    KERN_SOH "7" /* 調試輸出 */ Linux內核printk定義了8個輸出等級, KERN_EMERG
    的頭像 發表于 09-27 15:56 ?3254次閱讀

    如何配置和驗證Linux內核參數

    Linux系統運維和性能優化中,內核參數(sysctl)的配置至關重要。合理的參數調整可以顯著提升網絡性能、系統穩定性及資源利用率。然而,
    的頭像 發表于 05-29 17:40 ?742次閱讀