chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

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

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

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

掃碼添加小助手

加入工程師交流群

前言:

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

一、printk與printf的差異

用戶態(tài)的printf大家都熟,直接打印內(nèi)容,簡單粗暴。但內(nèi)核場景更復(fù)雜,系統(tǒng)崩潰或是debug調(diào)試細(xì)節(jié),不同信息的重要性天差地別。如果所有日志一鍋端,關(guān)鍵錯誤就容易被淹沒。

printk的核心就是給日志加了"優(yōu)先級標(biāo)簽",解決兩個核心問題:

控制輸出渠道

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

區(qū)分信息重要性

從致命崩潰到調(diào)試細(xì)節(jié),8個等級可以快速定位關(guān)鍵問題,比如優(yōu)先關(guān)注錯誤級日志,忽略調(diào)試級冗余信息。

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

等級宏

數(shù)值

英文含義

中文說明

典型場景

KERN_EMERG

0

system is unusable

緊急情況(系統(tǒng)不可用)

內(nèi)核崩潰、致命硬件錯誤

KERN_ALERT

1

action must be taken immediately

必須立即處理的警報

關(guān)鍵資源耗盡、權(quán)限驗證失敗

KERN_CRIT

2

critical conditions

嚴(yán)重錯誤

文件系統(tǒng)損壞、進程調(diào)度異常

KERN_ERR

3

error conditions

普通錯誤

驅(qū)動初始化失敗、函數(shù)調(diào)用關(guān)鍵錯誤

KERN_WARNING

4

warning conditions

警告(潛在問題)

參數(shù)非法、內(nèi)存分配警告

KERN_NOTICE

5

normal but significant condition

通知(重要正常事件)

模塊加載/卸載、系統(tǒng)啟動關(guān)鍵步驟

KERN_INFO

6

informational

信息性消息

驅(qū)動版本、硬件探測結(jié)果

KERN_DEBUG

7

debug-level messages

調(diào)試消息

開發(fā)者調(diào)試


二、4個printk核心參數(shù)

終端執(zhí)行以下指令:

cat/proc/sys/kernel/printk

這串?dāng)?shù)字不是隨機的,而是內(nèi)核日志系統(tǒng)的“核心配置開關(guān)”,它直接決定了printk的日志輸出行為。輸出的4 4 1 7,這 4 個參數(shù)順序固定,分別對應(yīng)內(nèi)核日志的4個核心配置。

控制臺日志級別:4

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

默認(rèn)消息日志級別:4

當(dāng)printk未顯式指定等級時,自動使用的默認(rèn)等級。

最小控制臺日志級別:1

限制控制臺日志級別的最低值,避免誤操作將級別設(shè)為0,導(dǎo)致遺漏關(guān)鍵日志。

默認(rèn)控制臺日志級別:7

內(nèi)核啟動時的默認(rèn)控制臺級別,也作為重置參考值。

三、日志級別配置

根據(jù)場景調(diào)整日志級別,給大家分享如下兩種配置方法:

3.1臨時修改

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

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

恢復(fù)默認(rèn)配置:echo 4 4 1 7 > /proc/sys/kernel/printk


3.2永久修改

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

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

2. 執(zhí)行sysctl -p,讓配置立即生效


四、日志查看技巧

實時查看控制臺日志

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

查看內(nèi)核緩沖區(qū)日志

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

查看持久化日志文件

多數(shù)linux系統(tǒng)發(fā)行版會將內(nèi)核日志寫入/var/log/kern.log,可用tail實時跟蹤:

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


五、printk正確用法

5.1基本語法

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

5.2避坑事項

別濫用KERN_DEBUG:調(diào)試完成后一定要刪除或注釋,否則會占用內(nèi)核緩沖區(qū),影響系統(tǒng)性能;

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



六、總結(jié)

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

核心邏輯如下:數(shù)值越小,優(yōu)先級越高;控制臺日志級別≥日志等級時,才會實時輸出;調(diào)試用KERN_DEBUG+級別7,生產(chǎn)環(huán)境用KERN_ERR+級別3~4。

掌握了printk的日志級別機制,不管是內(nèi)核調(diào)試還是驅(qū)動開發(fā),都能精準(zhǔn)定位問題。下次遇到內(nèi)核相關(guān)的排障需求,不妨試試這些技巧,效率絕對翻倍~

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

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

    關(guān)注

    0

    文章

    140

    瀏覽量

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

    關(guān)注

    1

    文章

    319

    瀏覽量

    23076
  • RK3588
    +關(guān)注

    關(guān)注

    8

    文章

    503

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

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

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

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

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

    內(nèi)核開發(fā)比用戶空間開發(fā)更難的一個因素就是內(nèi)核調(diào)試艱難。內(nèi)核錯誤往往會導(dǎo)致系統(tǒng)宕機,很難保留出錯時的現(xiàn)場。調(diào)試
    發(fā)表于 05-20 10:30

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

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

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

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

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

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

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

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

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

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

    Linux中的Printk與dmesg功能

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

    Linux:QEMU調(diào)試內(nèi)核的步驟

    Linux:QEMU調(diào)試內(nèi)核的步驟
    的頭像 發(fā)表于 06-23 09:03 ?3701次閱讀
    <b class='flag-5'>Linux</b>:QEMU<b class='flag-5'>調(diào)試</b><b class='flag-5'>內(nèi)核</b>的步驟

    嵌入式LINUX系統(tǒng)內(nèi)核內(nèi)核模塊調(diào)試

    嵌入式LINUX系統(tǒng)內(nèi)核內(nèi)核模塊調(diào)試(嵌入式開發(fā)和硬件開發(fā))-嵌入式LINUX系統(tǒng)內(nèi)核
    發(fā)表于 07-30 13:55 ?10次下載
    嵌入式<b class='flag-5'>LINUX</b>系統(tǒng)<b class='flag-5'>內(nèi)核</b>和<b class='flag-5'>內(nèi)核</b>模塊<b class='flag-5'>調(diào)試</b>

    內(nèi)核調(diào)試利器printk的使用心得

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

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

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

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

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

    內(nèi)核調(diào)試工具printkprintk的輸出格式

    很多內(nèi)核開發(fā)者喜歡的調(diào)試工具是printk,在Linux內(nèi)核中,使用printk()函數(shù)來打印信
    的頭像 發(fā)表于 09-27 16:09 ?1722次閱讀

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

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