是否可以在带有C++的Linux上开发可加载的内核模块(LKM)
Is it possible to develop a loadable kernel module (LKM) on Linux with C++?
当我开发可加载内核模块(LKM)时,我应该使用C吗?
是否可以在Linux上使用C以外的语言(例如C++)开发可加载的内核模块(LKM)?
在某种程度上可能是可能的,但请注意(从 http://www.tux.org/lkml/#s15-3):
在C++中编写新驱动程序是个好主意吗? 简短的回答是 否,因为内核中没有任何对C++驱动程序的支持。
为什么不在内核中添加一个C++接口层以支持C++驱动程序? 简短的回答是为什么要打扰,因为没有任何C++驱动程序 Linux。
我认为最好的主意是查阅现有的资源(有一些内核驱动程序书籍,包括一本免费的在线书籍),这些资源都是 C 语言的,弄清楚基础知识,然后你可以尝试看看你是否可以让 c++ 在那里工作。
但我非常怀疑这是否容易。 您甚至无法访问内核中的完整 C 标准库。 需要考虑的是:它不链接到共享库,并且总可执行映像通常为 2-3 MB。
确定我在某处看到了一个内核配置选项,允许在内核模块中C++,不久前(但无法再次找到它)。我可以看到某些模板在驱动程序模块中使用会非常有趣。仅供轶事使用:OS X Mach 内核部分是用C++编写的。
最后,它归结为目标代码,它由汇编程序生成,然后链接在一起。
所以是的,这是可能的,你在这里找到一个关于这个的辩论。
这取决于你想用LKM做什么,你想把它用于你自己和一些实验,还是它会在任何地方变得富有成效?
有一个操作系统正在重写Linux内核,C++它被称为Boss-Mool,你可以使用C++编写驱动程序。这是链接 : https://www.bosslinux.in/boss-mool
嗯,最初的问题是针对Linux的,而不是OS X或Windows或其他什么。
绝对没有办法用C++编写Linux内核模式驱动程序!这是因为您需要与libstdc++链接,而libstdc++不会与您的模块链接。libstdc++ 不适用于内核模式,就这么简单!
- std::原子加载和存储都需要吗
- 如何加载(或映射)文件部分的最大大小,但适合在Windows上的RAM
- C++ 雷神库 - 使用资源加载器类时出现问题(不命名类型)
- 为什么加载SDF会导致Mobilizer创建闭环错误
- C++atioglxx.pdb未加载错误glBufferData OpenGL
- 如何使用tinyxml2从XML加载父实体和子实体
- 如何在C++中使用pybind11加载一个pickle python列表
- 系统.将数组移交给c#中动态加载的c++DLL时发生AccessViolationException
- 当我尝试加载内核模块时,如何修复C++中的这个 malloc() 错误?
- 树莓上的 Libtorch 无法加载 pt 文件,但在 ubuntu 上工作
- Python ctypes:不会按预期加载 dll
- 为什么会出现 gettnig 运行时错误:加载类型为"_Bit_type"(stl_bvector.h) 的空指针?
- 我的程序有一个保存配置文件的GUI,如何双击此配置文件以直接加载带有配置数据的GUI?
- 保存/加载大量短数组到二进制文件
- 使用 SDL2 和SDL_image C++加载图像
- 无法使用加载库卸载注入的 dll (C++)
- 是否有原子加载非原子值的函数?
- 将 bmp 文件加载到 TSpeedButton 中
- R包开发中加载时设置的正确做法
- 是否可以在带有C++的Linux上开发可加载的内核模块(LKM)