当我开发可加载内核模块(LKM)时,我应该使用C?
是否可以在Linux上使用C语言以外的语言开发可加载内核模块(LKM),例如C ++?
答案 0 :(得分:14)
有可能在某种程度上,但要警告(来自http://www.tux.org/lkml/#s15-3):
用C ++编写新驱动程序是个好主意吗? 简短的回答是 不,因为内核中没有对C ++驱动程序的支持。
为什么不在内核中添加C ++接口层来支持C ++驱动程序? 简短的回答是为什么麻烦,因为没有任何C ++驱动程序 Linux操作系统。
我认为最好的想法是咨询现有的资源(有一些内核驱动程序书籍,包括一个在线的免费书籍),这些都在C中,找到基础知识,然后你可以尝试看看你是否可以获得c ++在那里工作。
但我非常怀疑这很容易。您甚至无法访问内核中的完整C标准库。需要考虑的事情:它没有链接到共享库,总可执行映像通常是2-3 MB。
答案 1 :(得分:5)
我很确定我在某个地方看到了一个允许内核模块中的C ++的内核配置选项(不能再找到它)了。 我可以看到某些模板在驱动程序模块中的使用非常有趣。仅仅是为了轶事:OS X Mach内核部分用C ++编写。
答案 2 :(得分:3)
答案 3 :(得分:1)
有一个操作系统在C ++中重写Linux内核,它被称为Boss-Mool,您可以使用C ++编写驱动程序。这是链接:https://www.bosslinux.in/boss-mool
答案 4 :(得分:-4)
嗯,最初的问题是Linux,而不是OS X或Windows等等。
绝对没有办法在C ++中编写Linux内核模式驱动程序! 那是因为您需要链接libstdc ++,它不会与您的模块链接。 libstdc ++不适用于内核模式,就这么简单!