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

Is it possible to develop a loadable kernel module (LKM) on Linux with C++?

本文关键字:加载 开发 内核模块 LKM Linux C++ 是否      更新时间:2023-10-16

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

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

在某种程度上可能是可能的,但请注意(从 http://www.tux.org/lkml/#s15-3):

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

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

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

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

我很

确定我在某处看到了一个内核配置选项,允许在内核模块中C++,不久前(但无法再次找到它)。我可以看到某些模板在驱动程序模块中使用会非常有趣。仅供轶事使用:OS X Mach 内核部分是用C++编写的。

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

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

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

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

嗯,最初的问题是针对Linux的,而不是OS X或Windows或其他什么。

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