【问题标题】:Opening/Writing to a file from a Kprobe handler从 Kprobe 处理程序打开/写入文件
【发布时间】:2015-10-03 02:33:08
【问题描述】:

我正在使用Kprobes 编写一个Linux 内核模块来跟踪特定的系统调用,并且我需要从KProbe 处理程序(特别是Kretprobe)中写入文件。我知道通常不建议这样做,但我需要将输出写入一个非常具体的位置,所以我不能使用任何标准的日志记录机制。

我可以从模块中的init() 函数很好地打开/写入,但是当我尝试从探针处理程序中这样做时,内核会崩溃。

【问题讨论】:

    标签: linux-kernel kernel-module kprobe


    【解决方案1】:

    来自文档/kprobes.txt:

    探测处理程序在禁用抢占的情况下运行。取决于 架构和优化状态,处理程序也可以运行 禁用中断(例如,kretprobe 处理程序和优化的 kprobe 处理程序在 x86/x86-64 上不禁用中断的情况下运行)。在任何情况下, 您的处理程序不应让出 CPU(例如,通过尝试获取 信号量)。

    换句话说,您不能在探针处理程序中休眠。因为文件的读/写操作通常使用磁盘 I/O,所以不能在处理程序中使用这些操作。

    我需要将输出写入一个非常具体的位置,所以我不能使用任何标准的日志记录机制。

    您可以从探测处理程序输出跟踪,例如,到特殊设备文件中,并运行(并行)用户空间程序,该程序只需读取该文件并在非常特定的位置写入一个文件 .

    【讨论】:

      猜你喜欢
      • 2012-05-28
      • 2012-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-16
      • 1970-01-01
      相关资源
      最近更新 更多