linux驱动虚拟内存转换,kgdboc driver

这是KDB使用I/O接口驱动,代码位于/drivers/tty/serial/kgdboc.c.对应于CONFIG_KGDB_SERIAL_CONSOLE.该驱动是目前配置与kdb shell交互

的设备的最主要的驱动程序。

kgdboc驱动依赖于底层硬件驱动程序。在kgdboc的最初的实现中,serial_core 暴露了一个UART钩子执行轮询操作,在原子上下文中读写一个单字节。当kgdb向调试器发出IO请求时,kgdboc唤醒一个回调函数,该回调函数又唤醒UART驱动。

如果通过UART使用kgdboc,UART驱动必须实现两个回调函数(位于STRUCT uart_ops)

示例代码:/drivers/tty/serial/8250/8250.c

spacer.gif

手动进入内核调试有很多种方式,所有的方式都与sysrq-g相关,因此必须开启CONFIG_MAGIC_SYSRQ配置项。触发kdb需要执行下面的操作

echo g > /proc/sysrq-trigger

有很多运行态的内核参数影响内核调试器的配置。

1)kdgboc

对于kdb而言,kgdboc告诉内核怎样跟kdb进行交互。可以通过串口进行交互,也可以通过键盘进行交互。当然,也可以选择集成kms(kernel mode setting)。当使用kgdboc支持的kms时,就可以以图形化界面的方式进入控制台。如果内核的执行重新开始了,之前的图像化模式将会被保存。这种方式旨在使用图形化控制台界面的方式使用kdb诊断内核crash或者对内存进行诊断。

kgdboc:

kgdboc=[kms][[,]kbd][[,]serial_device][,baud]

如果使用上面参数的某些组合,那么必须遵守顺序。

可以将kgdboc配置为使用键盘或者串口,这依赖于使用kdb/kgdb。

1、通过串口使用kdb和kgdb。

kgdboc=[,baud]

Example: kgdboc=ttyS0,115200

2、通过串口和键盘使用kdb和kgdb

kgdboc=kbd,[,baud]

Example: kgdboc=kbd,ttyS0,115200

3、使用键盘使用kdb

kgdboc=kbd

4、使用集成了kms的kdb

kgdboc=kms,kbd

5、kdb集成了kms同时kgdb通过串口连接

kgdboc=kms,kbd,ttyS0,115200

如果将kgdboc驱动编入内核:kgdboc=,[baud]

如果将kgdboc驱动作为内核模块: modprobe kgdboc kgdboc=,[baud]

在运行阶段通过sysfs配置kgdboc

1、开启/关闭 kgdboc

echo ttyS0 > /sys/module/kgdboc/parameters/kgdboc

echo "" > /sys/module/kgdboc/parameters/kgdboc

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux 驱动调试是开发者在开发和调试Linux内核驱动程序时经常遇到的任务。下面是一些常用的Linux驱动调试方法: 1. 打印调试信息: 在驱动程序中使用printk或者dev_printk函数输出调试信息。由于驱动程序运行在内核空间,因此可以使用printk函数将调试信息输出到内核日志中。通过查看内核日志,可以了解内核执行过程中驱动程序相关的信息。 2. 开启内核调试功能: 使用kdb、kgdb或者kgdboc等工具来开启内核调试功能。这些工具可以通过调试界面或者串口连接到内核进行调试。通过设置断点、单步执行等操作,可以对驱动程序进行详细的调试。 3. 使用调试工具: Linux内核提供了一些调试工具,如kprobe、kprobe-based-trace等。这些工具可以用于在运行时跟踪内核函数的调用和参数,并通过利用perf工具进行性能分析。针对特定问题,可以使用ftrace来进行函数追踪和性能分析。 4. 使用模拟环境: 在某些情况下,为了调试驱动程序,可以使用模拟环境。如使用qemu来模拟运行某个特定的硬件平台,以便方便地进行驱动程序的调试。 5. 动态打印调试信息: Linux内核提供了一些函数(如dynamic_debug_enable)来动态控制驱动程序打印调试信息的级别。通过在驱动程序中使用动态调试宏(如pr_debug),可以根据需要在运行时动态地输出调试信息。 总结起来,Linux驱动调试方法包括打印调试信息、开启内核调试功能、使用调试工具、使用模拟环境以及动态打印调试信息等。这些方法可以帮助开发者定位和解决驱动程序中的问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值