从Kprobe处理程序打开/写入文件

时间:2015-07-14 12:41:31

标签: linux-kernel kernel-module kprobe

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

我可以从模块中的init()函数打开/写入,但是当我尝试在探测器处理程序中执行此操作时,内核崩溃。

1 个答案:

答案 0 :(得分:3)

来自Documentation / kprobes.txt:

  

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

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

  

我需要将输出写入一个非常具体的位置,因此我无法使用任何标准的记录机制。

您可以将探针处理程序中的跟踪输出到特殊设备文件中,然后运行(并行)用户空间程序,该程序只读取该文件并在非常特定的位置写入