我正在尝试编辑 linux 内核。作为调试过程的一部分,我希望将一些信息写入文件。我已阅读有关 printk 功能的信息。但我想将文本添加到特定文件(保留调试日志的默认文件中的其他文件)。简而言之:我有点想在 printk 函数中指定“目的地”(或者至少有一些解决方法)
我怎样才能做到这一点?使用 fwrite/fopen 会起作用吗(如果是的话,与 printk 相比,它会不会产生太多开销,因为它们的实现方式不同)?
我还有什么其他选择?
使用fopen
andfwrite
肯定行不通。在内核空间中处理文件通常是个坏主意。
不过,这完全取决于您在内核中所做的事情。在某些配置中,甚至可能没有硬盘供您写入。但是,如果您正处于可以对正在运行的内核有某些假设的阶段,那么您可能实际上想要编写一个内核模块而不是编辑内核本身。对于您所关心的,内核模块与内核的任何其他部分一样好,但它们是在内核已经启动并运行时插入的。
您可能还考虑这样做是为了调试,或者有内核级应用程序的输出(例如,您被迫在内核级运行以进行实时约束的应用程序等)。在这种情况下,您可能会对kio感兴趣,但如果您想使用它,请确保您了解原因。
kio
是我为那些“内核级应用程序”编写的库,它使内核模块看到一个/proc
文件,就好像它是它的用户(而不是提供者)。为了使其工作,您应该有一个用户空间应用程序也打开该虚拟文件并将其重定向到您要写入日志的任何位置。类似于在写入模式和用户空间中打开文件的内容kopen
告诉cat /proc/your_file > ~/log_file
.
注意:printk
除非您真的知道自己在做什么,否则我仍然建议您。由于您正在考虑fopen
内核空间,因此我认为您并不真正知道自己在做什么。