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

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

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

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

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

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

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

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

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

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

所以是的,有可能,你在这里找到关于这个的辩论。

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

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

好吧,最初的问题是针对Linux,而不是OS X或Windows等等。

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