使用c ++在内核模块中打印消息

时间:2014-04-24 07:43:32

标签: c++ linux linux-kernel cout

我正在编辑用C ++编写的内核模块。我想要一个函数来打印消息,但我想我不能使用cout或任何标准输入/输出流库函数,因为模块驻留在内核空间中。

我试图加入iostream库:

....
#include <iostream>
....

当我用g++编译时,我得到:

 error: iostream: No such file or directory
 error: 'cout' was not declared in this scope

2 个答案:

答案 0 :(得分:2)

Linux内核根本不支持C ++,你不能使用<iostream> - 我怀疑任何STL也是完全不可能的,但是我已经有一段时间了在Linux内核模式下查看了C ++。

coutcerr的标准实现正在使用操作系统功能,这当然不会在内核中运行。所以你不能使用它们。当然可以实现以相同方式工作的东西(称之为kostream)和kostream& operator<<(kostream& os, sometype value),它会产生一些输出到缓冲区,然后使用printk或其中一些printk用于生成实际输出的基元。

无论是C还是C ++,您最终都会使用printk(或其组成部分)来打印Linux内核中的内容。

请注意,使用fstreamstringstream也无法在内核中运行。

答案 1 :(得分:2)

使用 printk api打印消息

printk(KERN_DEBUG "*** This is a debug message only. ***\n");

您可以检查内核模块的打印消息到dmesg