19

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

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

4

5 回答 5

16

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

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

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

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

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

于 2012-05-06T08:29:38.580 回答
6

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

于 2012-08-13T11:39:33.900 回答
4

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

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

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

于 2012-05-06T08:26:33.917 回答
1

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

于 2017-03-26T19:33:35.583 回答
-6

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

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

于 2014-03-03T19:47:02.403 回答