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

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

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

3天內不再提示

Linux內核日志玩明白了嗎?printk調試神器全解析

眺望電子 ? 2025-12-19 08:32 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

前言:

Linux驅動開發或內核調試的朋友,一定對printk不陌生,但你真的會用它嗎?為什么同樣是調試RK3588內核,別人能精準捕捉關鍵錯誤,你卻被海量日志淹沒?今天就帶大家吃透printk的日志等級機制,從參數配置到實戰用法一次講透~

一、printk與printf的差異

用戶態的printf大家都熟,直接打印內容,簡單粗暴。但內核場景更復雜,系統崩潰或是debug調試細節,不同信息的重要性天差地別。如果所有日志一鍋端,關鍵錯誤就容易被淹沒。

printk的核心就是給日志加了"優先級標簽",解決兩個核心問題:

控制輸出渠道

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

區分信息重要性

從致命崩潰到調試細節,8個等級可以快速定位關鍵問題,比如優先關注錯誤級日志,忽略調試級冗余信息。

例如眺望電子RK3588 Linux6.1內核在中定義了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 condition

通知(重要正常事件)

模塊加載/卸載、系統啟動關鍵步驟

KERN_INFO

6

informational

信息性消息

驅動版本、硬件探測結果

KERN_DEBUG

7

debug-level messages

調試消息

開發者調試


二、4個printk核心參數

終端執行以下指令:

cat/proc/sys/kernel/printk

這串數字不是隨機的,而是內核日志系統的“核心配置開關”,它直接決定了printk的日志輸出行為。輸出的4 4 1 7,這 4 個參數順序固定,分別對應內核日志的4個核心配置。

控制臺日志級別:4

這決定了哪些日志會實時輸出到控制臺。當日志等級≤該值時,直接打印到控制臺,數值越大,輸出越全。

默認消息日志級別:4

當printk未顯式指定等級時,自動使用的默認等級。

最小控制臺日志級別:1

限制控制臺日志級別的最低值,避免誤操作將級別設為0,導致遺漏關鍵日志。

默認控制臺日志級別:7

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

三、日志級別配置

根據場景調整日志級別,給大家分享如下兩種配置方法:

3.1臨時修改

想看到所有日志(包括調試信息):echo 7 > /proc/sys/kernel/printk

只看錯誤及以上(過濾無關信息):echo 3 > /proc/sys/kernel/printk(僅顯示0~3級)

恢復默認配置:echo 4 4 1 7 > /proc/sys/kernel/printk


3.2永久修改

臨時修改重啟就沒了,永久修改需寫入配置文件/etc/sysctl.conf:

1. 編輯/etc/sysctl.conf,添加一行:kernel.printk = 4 4 1 7(數值可按需調整)

2. 執行sysctl -p,讓配置立即生效


四、日志查看技巧

實時查看控制臺日志

直接在終端觀察,僅顯示符合級別要求的日志。

查看內核緩沖區日志

dmesg指令可以顯示所有等級日志,包括未輸出到控制臺的,搭配過濾更高效:dmesg |grep"ERR" # 篩選錯誤級日志dmesg -w # 實時監控日志

查看持久化日志文件

多數linux系統發行版會將內核日志寫入/var/log/kern.log,可用tail實時跟蹤:

3d8e2816-dc72-11f0-8ce9-92fbcf53809c.png


五、printk正確用法

5.1基本語法

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

5.2避坑事項

別濫用KERN_DEBUG:調試完成后一定要刪除或注釋,否則會占用內核緩沖區,影響系統性能;

關鍵錯誤用高等級:比如驅動加載失敗、硬件異常,必須用KERN_ERR(3級),而不是KERN_INFO(6級),避免被過濾;



六、總結

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

核心邏輯如下:數值越小,優先級越高;控制臺日志級別≥日志等級時,才會實時輸出;調試用KERN_DEBUG+級別7,生產環境用KERN_ERR+級別3~4。

掌握了printk的日志級別機制,不管是內核調試還是驅動開發,都能精準定位問題。下次遇到內核相關的排障需求,不妨試試這些技巧,效率絕對翻倍~

如果覺得有用,記得點贊收藏并關注我們公眾號,轉發給身邊做Linux開發的朋友!

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

    關注

    0

    文章

    140

    瀏覽量

    12637
  • LINUX內核
    +關注

    關注

    1

    文章

    321

    瀏覽量

    23201
  • RK3588
    +關注

    關注

    8

    文章

    556

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    Linux內核學習筆記:printk調試

    很多內核開發者喜歡的調試工具是printk,在Linux內核中,使用printk()函數來打印信
    發表于 06-01 15:14 ?1857次閱讀

    Linux內核調試方法的總結

    內核開發比用戶空間開發更難的一個因素就是內核調試艱難。內核錯誤往往會導致系統宕機,很難保留出錯時的現場。調試
    發表于 05-20 10:30

    linux內核打印函數printk的方法

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

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

    內核通過 printk() 輸出的信息具有日志級別,日志級別是通過在 printk() 輸出的字符串前加一個帶尖括號的整數來控制的,如
    的頭像 發表于 03-30 15:53 ?8101次閱讀

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

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

    內核日志printk結構淺析

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

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

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

    Linux中的Printk與dmesg功能

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

    Linux:QEMU調試內核的步驟

    Linux:QEMU調試內核的步驟
    的頭像 發表于 06-23 09:03 ?3900次閱讀
    <b class='flag-5'>Linux</b>:QEMU<b class='flag-5'>調試</b><b class='flag-5'>內核</b>的步驟

    嵌入式LINUX系統內核內核模塊調試

    嵌入式LINUX系統內核內核模塊調試(嵌入式開發和硬件開發)-嵌入式LINUX系統內核
    發表于 07-30 13:55 ?10次下載
    嵌入式<b class='flag-5'>LINUX</b>系統<b class='flag-5'>內核</b>和<b class='flag-5'>內核</b>模塊<b class='flag-5'>調試</b>

    內核調試利器printk的使用心得

    ? ? [導讀] 剛剛開始做Linux相關開發工作時,深感Linux內核代碼龐大,要加些自己的驅動進內核代碼樹,常常深陷bug的泥沼難以自拔,今天來分享一下
    的頭像 發表于 11-08 17:31 ?3495次閱讀
    <b class='flag-5'>內核</b><b class='flag-5'>調試</b>利器<b class='flag-5'>printk</b>的使用心得

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

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

    Linux內核中如何修改printk等級

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

    內核調試工具printkprintk的輸出格式

    很多內核開發者喜歡的調試工具是printk,在Linux內核中,使用printk()函數來打印信
    的頭像 發表于 09-27 16:09 ?1904次閱讀

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

    一、開篇:一個命令引出的核心問題 在?Linux?終端執行?cat /proc/sys/kernel/printk,你可能會看到這樣的輸出: 這串數字不是隨機的,而是內核日志系統的“核
    的頭像 發表于 11-20 15:54 ?1696次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>內核</b><b class='flag-5'>printk</b><b class='flag-5'>日志</b>級別<b class='flag-5'>全</b><b class='flag-5'>解析</b>:從參數解讀到實操配置