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

Ami*_*yan 18 c c++ linux-kernel

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

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

del*_*ver 14

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

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

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

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

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

  • 除了这个警告之外,请记住,如果它不在C中,你的驱动程序将无法被接受到Linus的树中. (14认同)
  • C++编写的程序不需要任何共享库,并且可以在没有标准库甚至没有malloc的情况下工作。我们可以将 C++ 视为系统语言的角色,将其视为 C 的扩展。更好的语法,OOP。我个人用混合 C/C++ 为裸机微控制器编写了很多代码,并且所有代码都运行得很好。所以我相信 C++ 语言没有问题,问题在于编译器和每个 Linux 标头周围的 `extern "C" {}`。 (3认同)

RJV*_*JVB 5

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