是否可以在Linux上使用C ++开发可加载的内核模块(LKM)?

时间:2012-05-06 08:23:15

标签: c++ c linux-kernel

当我开发可加载内核模块(LKM)时,我应该使用C?

是否可以在Linux上使用C语言以外的语言开发可加载内核模块(LKM),例如C ++?

5 个答案:

答案 0 :(得分:14)

有可能在某种程度上,但要警告(来自http://www.tux.org/lkml/#s15-3):

  

用C ++编写新驱动程序是个好主意吗?   简短的回答是   不,因为内核中没有对C ++驱动程序的支持。

     

为什么不在内核中添加C ++接口层来支持C ++驱动程序?   简短的回答是为什么麻烦,因为没有任何C ++驱动程序   Linux操作系统。

我认为最好的想法是咨询现有的资源(有一些内核驱动程序书籍,包括一个在线的免费书籍),这些都在C中,找到基础知识,然后你可以尝试看看你是否可以获得c ++在那里工作。

但我非常怀疑这很容易。您甚至无法访问内核中的完整C标准库。需要考虑的事情:它没有链接到共享库,总可执行映像通常是2-3 MB。

答案 1 :(得分:5)

我很确定我在某个地方看到了一个允许内核模块中的C ++的内核配置选项(不能再找到它)了。 我可以看到某些模板在驱动程序模块中的使用非常有趣。仅仅是为了轶事:OS X Mach内核部分用C ++编写。

答案 2 :(得分:3)

最后归结为目标代码,它由汇编程序生成并在之后链接在一起。

所以是的,有可能,你找到关于here的辩论。

这取决于你想用LKM做什么,你想为自己和一些实验使用它还是会在任何地方变得高效?

答案 3 :(得分:1)

有一个操作系统在C ++中重写Linux内核,它被称为Boss-Mool,您可以使用C ++编写驱动程序。这是链接:https://www.bosslinux.in/boss-mool

答案 4 :(得分:-4)

嗯,最初的问题是Linux,而不是OS X或Windows等等。

绝对没有办法在C ++中编写Linux内核模式驱动程序! 那是因为您需要链接libstdc ++,它不会与您的模块链接。 libstdc ++不适用于内核模式,就这么简单!