Linux 动态输出 dynamic_debug

  • 怎么打开
在 def_config中添加
CONFIG_DEBUG_FS=y 
CONFIG_DYNAMIC_DEBUG=y

设置def_config 之后,3种方式可以打印动态信息.
  • 以sd存储卡为例
# cat /sys/kernel/debug/dynamic_debug/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'		// 打开系统所有文件里面所有的动态输出语句
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值