吴忠躺衫网络科技有限公司

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

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

3天內不再提示

使用動態輸出打印內核的DEBUG信息

嵌入式與Linux那些事 ? 來源:嵌入式與Linux那些事 ? 2023-01-06 10:46 ? 次閱讀

簡介

printk()是很多嵌入式開發者喜歡用的調試手段之一,但是,使用printk()每次都要重新編譯內核,很不方便。使用動態輸出在不需要重新編譯內核的情況下,方便的打印出內核的debug信息

要開啟動態輸出,內核需要添加CONFIG_DYNAMIC_DEBUG。開啟宏之后,pr_debug(),dev_dbg() ,print_hex_dump_debug(),print_hex_dump_bytes()`所有信息都可以被動態打印出來。

動態輸出支持的特性

動態輸出在debugfs文件系統中對應的是control文件節點。control文件節點記錄了系統中所有使用動態輸出技術的文件名路徑,輸出語句所在的行號、模塊名和將要輸出的語句等。

你可以通過以下命令查看目前所有調試狀態的行為配置:

cat/sys/kernel/debug/dynamic_debug/control

你也可以應用標準的Unix文本過濾命令來過濾這些數據, 例如:

grep-irdma/sys/kernel/debug/dynamic_debug/control|wc-l

在第三列顯示了調試狀態位的激活標志。如果無額外行為被激話, 為 "=_"。因此你可以通過下面的命令查看任何不是默認標志的狀態位:

awk'$3!="=_"'/dynamic_debug/control

命令行使用方法

在語法層面上,一個命令由一系列的規格匹配組成,最后由一個標記來改變這規格。

command::=match-spec*flags-spec

match-spec常用來選擇一個已知的dprintk()調用點的子集來套用flags-spec。把他們當做彼此之間的每對做隱式查詢。注意,一個空的match_specs列表是有可能的,但不是非常有用,因為它不會匹配任何調用點的調試子句。

一個匹配規范由一個關鍵字組成,關鍵字控制被比較的調用點的屬性和要比較的值。可能關鍵字是:

match-spec::='func'string|
'file'string|
'module'string|
'format'string|
'line'line-range
line-range::=lineno|
'-'lineno|
lineno'-'|
lineno'-'lineno

注意:line-range不能包含空格,例如,“1-30”是有效的范圍,但“1 - 30”就是無效的

每個關鍵字的含義如下:

func:給定的字符串會和每個調用點的函數名比較。例如:func svc_tcp_accept

file:給定的字符串會和每個調用點的源文件的全路徑名或者相對名比較。例如:file svcsock.c, file /usr/src/packages/BUILD/sgi-enhancednfs-1.4/default/net/sunrpc/svcsock.c

module:給定的字符串會和每個調用點的模塊名進行比較。模塊名是和在ls mod 里看到的字符串一樣。例如,module sunrpc

format:給定的字符串會在動態調試格式字符串里查找。注意這字符串不需要匹配這個格式。空格和其他特殊字符能夠用八進制字符語法來轉義,例如空字符是?40。作為選擇,這個字符串可以附上雙引號(")或者是單引號(‘)。例如:

formatsvcrdma://NFS/RDMA服務器的dprintks
formatreadahead//一些在預加載緩存里的dprintks
formatnfsd:?40SETATTR//一個使用空格來匹配格式的方式
format"nfsd:SETATTR"http://一個整齊的方法來用空格匹配格式
format'nfsd:SETATTR'//同樣是一個用空格來匹配格式的方法和

line:給定的行號或者是行號范圍會和每個dprintk()調用點的行號進行比較。例如:

line1603//準確定位到1603行
line1600-1605//1600行到1605行之間的6行
line-1605//從第一行到1605行之間的1605行
line1600-//從1600行到結尾的全部行

標記規范包含了一個由一個或多個標記字符跟隨的變化操作。這變化操作如下所示:

-//移除給定的標記

+//加入給定的標記

=//設置標記到給定的標記上

f//包含已打印消息的函數名

l//包含已在打印消息的行號

m//包含已打印消息的模塊名

p//產生一個printk()消息到顯示系統啟動日志

t//包含了不在中斷上下文中產生的消息里的線程ID

傳遞啟動參數給內核

在調試系統啟動是時,像USB核心初始化等,這些代碼在系統進入shell前已經初始化完畢,因此無法及時打開動態輸出語句。這時可以在內核啟動時傳遞參數給內核,在系統初始化時就打開它們。

例如,在內核命令行中添加 usbnet.dyndbg=+plft ,就可以在啟動時打開 usbnet的動態輸出。

在內核啟動后,通過 dmesg | grep "usbnet" 即可看到輸出的調試信息。

舉例

打開文件svcsock.c 1603行動態輸出語句

echo-n'filesvcsock.cline1603+p'>/sys/kernel/debug/dynamic_debug/control

打開文件svcsock.c所有動態輸出語句

echo-n'filesvcsock.c+p'>/sys/kernel/debug/dynamic_debug/control

打開NFS服務模塊所有動態輸出語句

echo-n'modulenfsd+p'>/sys/kernel/debug/dynamic_debug/control

打開函數svc_process()的所有動態輸出語句

echo-n'funcsvc_process+p'>/sys/kernel/debug/dynamic_debug/control

關閉函數svc_process()的所有動態輸出語句

echo-n'funcsvc_process-p'>/sys/kernel/debug/dynamic_debug/control

打開NFS調用的所有以READ開始的信息.

echo-n'format"nfsd:READ"+p'>/sys/kernel/debug/dynamic_debug/control

查看輸出的信息可以使用 dmesg | grep XXX 。也可以使用 tail -f /var/log/dmesg來實時監控dmesg的日志輸出。

審核編輯:湯梓紅

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

    關注

    5092

    文章

    19177

    瀏覽量

    307674
  • 內核
    +關注

    關注

    3

    文章

    1382

    瀏覽量

    40422
  • 字符串
    +關注

    關注

    1

    文章

    585

    瀏覽量

    20603
  • DEBUG
    +關注

    關注

    3

    文章

    94

    瀏覽量

    19976

原文標題:使用動態輸出打印內核的DEBUG信息

文章出處:【微信號:嵌入式與Linux那些事,微信公眾號:嵌入式與Linux那些事】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    Linux內核學習筆記:動態輸出調試

    上篇說到printk調試,但printk是全局的,只能設置輸出等級。而動態輸出可以動態選擇打開某個內核子系統的
    發表于 06-01 15:16 ?598次閱讀
    Linux<b class='flag-5'>內核</b>學習筆記:<b class='flag-5'>動態</b><b class='flag-5'>輸出</b>調試

    STM32WB55開發(4)----配置串口打印Debug調試信息

    在STM32WB55系列微控制器上進行開發時,實時監控應用程序的運行情況和調試潛在問題是至關重要的。使用串口(USART/UART)進行Debug信息打印是一種簡便、高效的方法。下面是如何在STM32WB55上配置串口來
    的頭像 發表于 12-01 15:48 ?1410次閱讀
    STM32WB55開發(4)----配置串口<b class='flag-5'>打印</b><b class='flag-5'>Debug</b>調試<b class='flag-5'>信息</b>

    [求助]winCE板子進桌面后就不打印debug信息

    我的mini2440+winCE,在板子啟動時,屏幕出現歡迎界面時串口能打印debug信息,但進入桌面后就不打印了,有的正在打印的函數名,只
    發表于 03-06 14:11

    內核調試解惑!

    解惑!我在使用飛思卡爾的單片機(M0+內核的)用J-link做一個串口調試,就是在程序里調用printf函數然后在keil的Debug(printf)Viewer或者是Debug Uart#里
    發表于 01-23 11:10

    AM335x linuxBSP 編出的內核沒有打印啟動信息

    使用TI提供的linux-3.1.0-psp04.06.00.03.sdk編譯的內核只是將pr_err信息打印出來了,請問如何設置可以講內核啟動信息
    發表于 05-15 07:06

    am335x調試內核時怎么設置輸出打印信息

    請問怎么設置輸出打印信息啊?用printk后還要修改其他宏嗎?請知道的朋友告訴我,寫下步驟。謝謝。
    發表于 06-21 03:12

    多任務環境下串口輸出debug信息的方法是什么?

    debug信息交錯到一起的現象。于是我又添加了另一種輸出的方式:為debug輸出額外創建一個進程專用于
    發表于 07-20 08:03

    如何利用串口輸出printf的打印信息

    PC機上,printf輸出到顯示設備,在嵌入式linux系統,一般利用printf輸出調試信息,需要重定向到串口。以AT91RM9200為例,簡要說明如何利用串口輸出printf的
    發表于 11-04 07:10

    分享一下Linux內核日志與信息打印

    嵌入式軟件調試技術專題(3):Linux內核日志與信息打印 6年嵌入式開發經...
    發表于 12-23 07:36

    串口DEBUG只有打印信息的功能嗎

    使用串口DEBUG,只是看到boot的一些信息,無法登錄?這是因為這個debug功能只是打印信息?額外問一下,想在target 端 編譯開發,要安裝GCC等,但是不可以使用連到包管理服
    發表于 01-11 06:25

    PRINT指定輸出串口1的打印信息,如果想輸出其他串口0的信息,怎么修改?

    PRINT指定輸出串口1的打印信息,如果想輸出其他串口0的信息,怎么修改!
    發表于 08-09 07:32

    嵌入式log打印格式輸出技巧

    嵌入式log打印格式輸出技巧Log 信息格式條件編譯可變參數宏C標準中一些預定義的宏格式輸出16進制數組Log 信息格式參考目前主流嵌入式、
    發表于 10-20 21:06 ?5次下載
    嵌入式log<b class='flag-5'>打印</b>格式<b class='flag-5'>輸出</b>技巧

    Linux內核動態輸出調試

    pr_debug()/dev_dbg()函數來輸出信息,這些就使用了動態輸出。 需要打開的內核
    的頭像 發表于 09-27 15:45 ?580次閱讀
    Linux<b class='flag-5'>內核</b><b class='flag-5'>動態</b><b class='flag-5'>輸出</b>調試

    Linux內核基礎:動態輸出使用

    動態輸出使用 打開svcsock.c文件中所有的動態輸出語句 # echo 'file svcsock.c +p' > /sys/ kernel /
    的頭像 發表于 09-27 15:51 ?540次閱讀
    Linux<b class='flag-5'>內核</b>基礎:<b class='flag-5'>動態</b><b class='flag-5'>輸出</b>使用

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

    很多內核開發者喜歡的調試工具是printk,在Linux內核中,使用printk()函數來打印信息,它與C庫的printf()函數類似。 printk()與printf()的一個重要
    的頭像 發表于 09-27 16:09 ?1117次閱讀
    粤港澳百家乐娱乐平台| 大丰收娱乐城官网| 百家乐官网娱乐网站| 神娱乐百家乐官网的玩法技巧和规则| 稳赢百家乐的玩法技巧| 六合彩挂牌| 百家乐官网是否能赢| 百家乐出老千视频| 富宁县| 百家乐两头压注| 爱玩棋牌官方下载| 百家乐官网技巧辅助软件| 时时博百家乐的玩法技巧和规则| 百家乐官网娱乐城介绍| 百家乐技巧心得| 百家乐官网游戏公司| 美高梅百家乐娱乐城| 大发888官网| 3U百家乐官网的玩法技巧和规则 | 百家乐电投| 长岛县| 百家乐兑换棋牌| 百家乐官网筹码样式| 安阳百家乐赌博| 博乐市| 百家乐的路单怎样看| 灌阳县| 真人百家乐视频赌博| 金赞百家乐官网现金网| 百家乐娱乐备用网址| 百家乐官网三珠连跳打法| 百家乐五湖四海娱乐场| 澳门百家乐官网娱乐场| 打百家乐纯打庄的方法| 百家乐官网的规则博彩正网| 百家乐号公| 百家乐官网娱乐官网| 大发888下载34| 24山向水法吉凶断| 太阳城网上娱乐| 至尊百家乐娱乐网|