【发布时间】:2012-05-06 08:23:15
【问题描述】:
当我开发可加载内核模块 (LKM) 时,我应该使用 C 吗?
是否可以在 Linux 上使用非 C 语言(例如 C++)开发可加载内核模块 (LKM)?
【问题讨论】:
标签: c++ c linux-kernel
当我开发可加载内核模块 (LKM) 时,我应该使用 C 吗?
是否可以在 Linux 上使用非 C 语言(例如 C++)开发可加载内核模块 (LKM)?
【问题讨论】:
标签: c++ c linux-kernel
这在一定程度上是可能的,但请注意(来自http://www.tux.org/lkml/#s15-3):
用 C++ 编写新的驱动程序是个好主意吗? 简短的回答是 不,因为内核中不支持 C++ 驱动程序。
为什么不在内核中添加一个 C++ 接口层来支持 C++ 驱动程序? 简短的回答是为什么要麻烦,因为没有任何 C++ 驱动程序 Linux。
我认为最好的办法是查阅现有资源(有几本内核驱动书籍,包括网上免费的一本),都是用 C 语言编写的,搞清楚基础知识,然后你可以试试看能不能搞定c++ 在那里工作。
但我非常怀疑这会很容易。您甚至无法访问内核中的完整 C 标准库。需要考虑的一点:它不链接到共享库,并且总可执行映像通常为 2-3 MB。
【讨论】:
extern "C" {}。
我很确定我在某个地方看到了一个内核配置选项,允许在内核模块中使用 C++,不久前(但无法再次找到它)。 我可以看到某些模板在驱动程序模块中使用会非常有趣。仅供参考:OS X Mach 内核部分是用 C++ 编写的。
【讨论】:
【讨论】:
有一个操作系统正在用 C++ 重写 Linux 内核,它被称为 Boss-Mool,您可以使用 C++ 编写驱动程序。这是链接:https://www.bosslinux.in/boss-mool
【讨论】:
嗯,最初的问题是针对 Linux,而不是 OS X 或 Windows 之类的。
绝对没有办法用 C++ 编写 Linux 内核模式驱动程序! 那是因为您需要与不会与您的模块链接的 libstdc++ 链接。 libstdc++ 不能用于内核模式,就这么简单!
【讨论】: