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)不再提示

使用動態(tài)輸出打印內(nèi)核的DEBUG信息

嵌入式與Linux那些事 ? 來源:嵌入式與Linux那些事 ? 2023-01-06 10:46 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

簡介

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

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

動態(tài)輸出支持的特性

動態(tài)輸出在debugfs文件系統(tǒng)中對應(yīng)的是control文件節(jié)點。control文件節(jié)點記錄了系統(tǒng)中所有使用動態(tài)輸出技術(shù)的文件名路徑,輸出語句所在的行號、模塊名和將要輸出的語句等。

你可以通過以下命令查看目前所有調(diào)試狀態(tài)的行為配置:

cat/sys/kernel/debug/dynamic_debug/control

你也可以應(yīng)用標(biāo)準(zhǔn)的Unix文本過濾命令來過濾這些數(shù)據(jù), 例如:

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

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

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

命令行使用方法

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

command::=match-spec*flags-spec

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

一個匹配規(guī)范由一個關(guān)鍵字組成,關(guān)鍵字控制被比較的調(diào)用點的屬性和要比較的值??赡荜P(guān)鍵字是:

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”就是無效的

每個關(guān)鍵字的含義如下:

func:給定的字符串會和每個調(diào)用點的函數(shù)名比較。例如:func svc_tcp_accept

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

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

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

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

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

line1603//準(zhǔn)確定位到1603行
line1600-1605//1600行到1605行之間的6行
line-1605//從第一行到1605行之間的1605行
line1600-//從1600行到結(jié)尾的全部行

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

-//移除給定的標(biāo)記

+//加入給定的標(biāo)記

=//設(shè)置標(biāo)記到給定的標(biāo)記上

f//包含已打印消息的函數(shù)名

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

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

p//產(chǎn)生一個printk()消息到顯示系統(tǒng)啟動日志

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

傳遞啟動參數(shù)給內(nèi)核

在調(diào)試系統(tǒng)啟動是時,像USB核心初始化等,這些代碼在系統(tǒng)進(jìn)入shell前已經(jīng)初始化完畢,因此無法及時打開動態(tài)輸出語句。這時可以在內(nèi)核啟動時傳遞參數(shù)給內(nèi)核,在系統(tǒng)初始化時就打開它們。

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

在內(nèi)核啟動后,通過 dmesg | grep "usbnet" 即可看到輸出的調(diào)試信息。

舉例

打開文件svcsock.c 1603行動態(tài)輸出語句

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

打開文件svcsock.c所有動態(tài)輸出語句

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

打開NFS服務(wù)模塊所有動態(tài)輸出語句

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

打開函數(shù)svc_process()的所有動態(tài)輸出語句

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

關(guān)閉函數(shù)svc_process()的所有動態(tài)輸出語句

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

打開NFS調(diào)用的所有以READ開始的信息.

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

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

審核編輯:湯梓紅

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

    關(guān)注

    5192

    文章

    20274

    瀏覽量

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

    關(guān)注

    4

    文章

    1439

    瀏覽量

    42596
  • 字符串
    +關(guān)注

    關(guān)注

    1

    文章

    595

    瀏覽量

    23107
  • DEBUG
    +關(guān)注

    關(guān)注

    3

    文章

    95

    瀏覽量

    21304

原文標(biāo)題:使用動態(tài)輸出打印內(nèi)核的DEBUG信息

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

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

掃碼添加小助手

加入工程師交流群

    評論

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

    Linux內(nèi)核學(xué)習(xí)筆記:動態(tài)輸出調(diào)試

    上篇說到printk調(diào)試,但printk是全局的,只能設(shè)置輸出等級。而動態(tài)輸出可以動態(tài)選擇打開某個內(nèi)核子系統(tǒng)的
    發(fā)表于 06-01 15:16 ?1089次閱讀
    Linux<b class='flag-5'>內(nèi)核</b>學(xué)習(xí)筆記:<b class='flag-5'>動態(tài)</b><b class='flag-5'>輸出</b>調(diào)試

    STM32WB55開發(fā)(4)----配置串口打印Debug調(diào)試信息

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

    [求助]winCE板子進(jìn)桌面后就不打印debug信息

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

    內(nèi)核調(diào)試解惑!

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

    AM335x linuxBSP 編出的內(nèi)核沒有打印啟動信息

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

    am335x調(diào)試內(nèi)核時怎么設(shè)置輸出打印信息

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

    多任務(wù)環(huán)境下串口輸出debug信息的方法是什么?

    debug信息交錯到一起的現(xiàn)象。于是我又添加了另一種輸出的方式:為debug輸出額外創(chuàng)建一個進(jìn)程專用于
    發(fā)表于 07-20 08:03

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

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

    分享一下Linux內(nèi)核日志與信息打印

    嵌入式軟件調(diào)試技術(shù)專題(3):Linux內(nèi)核日志與信息打印 6年嵌入式開發(fā)經(jīng)...
    發(fā)表于 12-23 07:36

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

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

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

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

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

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

    Linux內(nèi)核動態(tài)輸出調(diào)試

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

    Linux內(nèi)核基礎(chǔ):動態(tài)輸出使用

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

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

    很多內(nèi)核開發(fā)者喜歡的調(diào)試工具是printk,在Linux內(nèi)核中,使用printk()函數(shù)來打印信息,它與C庫的printf()函數(shù)類似。 printk()與printf()的一個重要
    的頭像 發(fā)表于 09-27 16:09 ?1792次閱讀