当我开发可加载内核模块 (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++ 编写的。
有一个操作系统正在用 C++ 重写 Linux 内核,它被称为 Boss-Mool,您可以使用 C++ 编写驱动程序。这是链接:https ://www.bosslinux.in/boss-mool
好吧,最初的问题是针对 Linux 的,而不是针对 OS X 或 Windows 之类的。
绝对没有办法用 C++ 编写 Linux 内核模式驱动程序!那是因为您需要与不会与您的模块链接的 libstdc++ 链接。libstdc++ 不适用于内核模式,就这么简单!