Linux kernel 从Kprobe处理程序打开/写入文件
我正在使用Linux kernel 从Kprobe处理程序打开/写入文件,linux-kernel,kernel-module,kprobe,Linux Kernel,Kernel Module,Kprobe,我正在使用KProbe编写一个Linux内核模块来跟踪特定的系统调用,我需要从KProbe处理程序(特别是Kretprobe)中写入一个文件。我知道这通常是不建议的,但我需要将输出写入一个非常特定的位置,所以我不能使用任何标准的日志机制 我可以在模块中的init()函数中正常打开/写入,但当我尝试在探测处理程序中打开/写入时,内核崩溃。来自文档/kprobes.txt: 探针处理程序在禁用抢占的情况下运行。取决于 在体系结构和优化状态下,处理程序也可以使用 禁用中断(例如,kretprobe处理
KProbe
编写一个Linux内核模块来跟踪特定的系统调用,我需要从KProbe
处理程序(特别是Kretprobe
)中写入一个文件。我知道这通常是不建议的,但我需要将输出写入一个非常特定的位置,所以我不能使用任何标准的日志机制
我可以在模块中的
init()
函数中正常打开/写入,但当我尝试在探测处理程序中打开/写入时,内核崩溃。来自文档/kprobes.txt:
探针处理程序在禁用抢占的情况下运行。取决于
在体系结构和优化状态下,处理程序也可以使用
禁用中断(例如,kretprobe处理程序和优化的kprobe
处理程序在x86/x86-64上运行时不禁用中断)。无论如何,
您的处理程序不应放弃CPU(例如,通过尝试获取
信号灯)
换句话说,您不能在探测器处理程序中睡觉。由于文件的读/写操作通常使用磁盘I/O,因此不能在处理程序中使用这些操作
我需要将输出写入一个非常特定的位置,因此我不能使用任何标准的日志机制
您可以将探测处理程序中的跟踪信息输出到特殊设备文件中,然后运行(并行)用户空间程序,该程序只需读取该文件并在非常特定的位置写入其中