Linux 動態輸出 dynamic_debug

  • 怎麼打開
在 def_config中添加
CONFIG_DEBUG_FS=y 
CONFIG_DYNAMIC_DEBUG=y

設置def_config 之後,3種方式可以打印動態信息.
  • 以sd存儲卡爲例
# cat control  |grep  "drivers/mmc"
drivers/mmc/core/core.c:158 [mmc_core]mmc_request_done =_ "%s: req done <CMD%u>: %d: %08x %08x %08x %08x\012"
drivers/mmc/core/core.c:164 [mmc_core]mmc_request_done =_ "%s: req done (CMD%u): %d: %08x %08x %08x %08x\012"
drivers/mmc/core/core.c:169 [mmc_core]mmc_request_done =_ "%s:     %d bytes transferred: %d\012"
drivers/mmc/core/core.c:177 [mmc_core]mmc_request_done =_ "%s:     (CMD%u): %d: %08x %08x %08x %08x\012"
drivers/mmc/core/core.c:201 [mmc_core]mmc_start_request =_ "<%s: starting CMD%u arg %08x flags %08x>\012"
drivers/mmc/core/core.c:206 [mmc_core]mmc_start_request =_ "%s: starting CMD%u arg %08x flags %08x\012"
drivers/mmc/core/core.c:214 [mmc_core]mmc_start_request =_ "%s:     blksz %d blocks %d flags %08x tsac %d ms nsac %d\012"
drivers/mmc/core/core.c:220 [mmc_core]mmc_start_request =_ "%s:     CMD%u arg %08x flags %08x\012"
drivers/mmc/core/core.c:471 [mmc_core]mmc_wait_for_req_done =_ "%s: req failed (CMD%u): %d, retrying...\012"
drivers/mmc/core/core.c:655 [mmc_core]mmc_interrupt_hpi =_ "%s: HPI cannot be sent. Card state=%d\012"
drivers/mmc/core/core.c:994 [mmc_core]mmc_set_ios =_ "%s: clock %uHz busmode %u powermode %u cs %u Vdd %u width %u timing %u\012"
drivers/mmc/core/core.c:1569 [mmc_core]mmc_set_signal_voltage =_ "%s: Signal voltage switch failed, power cycling card\012"
drivers/mmc/core/core.c:1628 [mmc_core]mmc_power_up =_ "Initial signal voltage of 3.3v\012"
drivers/mmc/core/core.c:1630 [mmc_core]mmc_power_up =_ "Initial signal voltage of 1.8v\012"
drivers/mmc/core/core.c:1632 [mmc_core]mmc_power_up =_ "Initial signal voltage of 1.2v\012"
drivers/mmc/core/core.c:2273 [mmc_core]mmc_calc_max_discard =_ "%s: calculated max. discard sectors %u for timeout %u ms\012"
drivers/mmc/core/core.c:2396 [mmc_core]_mmc_detect_card_removed =_ "%s: card removed too slowly\012"
drivers/mmc/core/core.c:2401 [mmc_core]_mmc_detect_card_removed =_ "%s: card remove detected\012"
drivers/mmc/core/host.c:329 [mmc_core]mmc_of_parse =_ "\042bus-width\042 property is missing, assuming 1 bit.\012"
drivers/mmc/core/sdio_io.c:68 [mmc_core]sdio_enable_func =_ "SDIO: Enabling device %s...\012"
drivers/mmc/core/sdio_io.c:93 [mmc_core]sdio_enable_func =_ "SDIO: Enabled device %s\012"
drivers/mmc/core/sdio_io.c:98 [mmc_core]sdio_enable_func =_ "SDIO: Failed to enable device %s\012"
drivers/mmc/core/sdio_io.c:118 [mmc_core]sdio_disable_func =_ "SDIO: Disabling device %s...\012"
drivers/mmc/core/sdio_io.c:130 [mmc_core]sdio_disable_func =_ "SDIO: Disabled device %s\012"
drivers/mmc/core/sdio_io.c:135 [mmc_core]sdio_disable_func =_ "SDIO: Failed to disable device %s\012"
drivers/mmc/core/sdio_irq.c:52 [mmc_core]process_sdio_pending_irqs =_ "%s: error %d reading SDIO_CCCR_INTx\012"
drivers/mmc/core/sdio_irq.c:121 [mmc_core]sdio_irq_thread =_ "%s: IRQ thread started (poll period = %lu jiffies)\012"
drivers/mmc/core/sdio_irq.c:188 [mmc_core]sdio_irq_thread =_ "%s: IRQ thread exiting with code %d\012"
drivers/mmc/core/sdio_irq.c:277 [mmc_core]sdio_claim_irq =_ "SDIO: Enabling IRQ for %s...\012"
drivers/mmc/core/sdio_irq.c:280 [mmc_core]sdio_claim_irq =_ "SDIO: IRQ for %s already in use.\012"
drivers/mmc/core/sdio_irq.c:320 [mmc_core]sdio_release_irq =_ "SDIO: Disabling IRQ for %s...\012"
drivers/mmc/core/quirks.c:94 [mmc_core]mmc_fixup_device =_ "calling %pf\012"
drivers/mmc/card/block.c:429 [mmc_block]ioctl_do_sanitize =_ "%s: %s - SANITIZE IN PROGRESS...\012"
drivers/mmc/card/block.c:440 [mmc_block]ioctl_do_sanitize =_ "%s: %s - SANITIZE COMPLETED\012"
drivers/mmc/host/mmci.c:791 [mmci]mmci_start_data =_ "blksz %04x blks %04x flags %08x\012"
drivers/mmc/host/mmci.c:883 [mmci]mmci_start_command =_ "op %02x arg %08x flags %08x\012"
drivers/mmc/host/mmci.c:938 [mmci]mmci_data_irq =_ "MCI ERROR IRQ, status 0x%08x at 0x%08x\012"
drivers/mmc/host/mmci.c:1163 [mmci]mmci_pio_irq =_ "irq1 (pio) %08x\012"
drivers/mmc/host/mmci.c:1258 [mmci]mmci_irq =_ "irq0 (data+cmd) %08x\012"
drivers/mmc/host/mmci.c:1546 [mmci]mmci_probe =_ "designer ID = 0x%02x\012"
drivers/mmc/host/mmci.c:1547 [mmci]mmci_probe =_ "revision = 0x%01x\012"
drivers/mmc/host/mmci.c:1578 [mmci]mmci_probe =_ "eventual mclk rate: %u Hz\012"
drivers/mmc/host/mmci.c:1615 [mmci]mmci_probe =_ "clocking block at %u Hz\012"
  • 前提
要想控制動態打印信息打印到控制檯上,需要設置, 
echo 8  > /proc/sys/kernel/printk 
因爲動態打印信息級別爲 7 , 在小於 8(控制檯打印級別) 的情況下可以打出來

1 啓動後動態打印設置

  • 測試1
echo 'module mmci +p' > /sys/kernel/debug/dynamic_debug/control
就會循環打印出
mmci-pl18x 10005000.mmci: op 0d arg 45670000 flags 00000195
mmci-pl18x 10005000.mmci: irq0 (data+cmd) 00000040
mmci-pl18x 10005000.mmci: irq0 (data+cmd) 00000000
然後 關閉打印
echo 'module mmci -p' > /sys/kernel/debug/dynamic_debug/control
就會停止打印
  • 測試2
echo 'module mmc_core +p' > /sys/kernel/debug/dynamic_debug/control

mmc0: req done (CMD13): 0: 00000900 00000000 00000000 00000000
mmc0: starting CMD13 arg 45670000 flags 00000195

echo 'module mmc_core -p' > /sys/kernel/debug/dynamic_debug/control

2 啓動前動態打印設置

qemu-system-arm 參數-append 中 添加 loglevel=8 mmc_core.dyndbg=+plft
-append "init=/linuxrc console=ttyAMA0 loglevel=8 root=/dev/mmcblk0 mmc_core.dyndbg=+plft"

就會打印 mmc_core模塊 的 動態打印信息

3 編譯時動態打印設置

在你關係的模塊的目錄下的Makefile下添加如下代碼,例如 mmc_core ,對應 drivers/mmc/core/Makefile 
ccflags-y := -DDEBUG
ccflags-y += -DVERBOSE_DEBUG

其他啓動後動態打印設置

echo 'file xxx.c +p'
'module xxx +p'
'func xxx +p'
echo -n '*usb* +p' 	// 打開文件路徑中包含usb的文件裏面所有的動態輸出語句
echo -n '+p'		// 打開系統所有文件裏面所有的動態輸出語句
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章