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

     2023-02-22     139

关键词:

【中文标题】是否可以使用 C++ 在 Linux 上开发可加载内核模块(LKM)?【英文标题】:Is it possible to develop a loadable kernel module (LKM) on Linux with C++? 【发布时间】:2012-05-06 08:23:15 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

这在一定程度上是可能的,但请注意(来自http://www.tux.org/lkml/#s15-3):

用 C++ 编写新的驱动程序是个好主意吗? 简短的回答是 不,因为内核中不支持 C++ 驱动程序。

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

我认为最好的办法是查阅现有资源(有几本内核驱动书籍,包括网上免费的一本),都是用 C 语言编写的,搞清楚基础知识,然后你可以试试看能不能搞定c++ 在那里工作。

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

【讨论】:

除此警告外,请记住,如果您的驱动程序不在 C 语言中,则无法将其接受到 Linus 的树中。 用 C++ 编写的程序不需要任何共享库,无需标准库甚至无需 malloc 即可工作。我们可以将 C++ 作为系统语言的角色视为 C 的扩展。更好的语法,OOP。我个人用混合 C/C++ 为裸机微控制器编写了很多代码,并且都运行良好。所以我相信C++语言没有问题,问题在于编译器和每个Linux头文件周围的extern "C" 【参考方案2】:

我很确定我在某个地方看到了一个内核配置选项,允许在内核模块中使用 C++,不久前(但无法再次找到它)。 我可以看到某些模板在驱动程序模块中使用会非常有趣。仅供参考:OS X Mach 内核部分是用 C++ 编写的。

【讨论】:

【参考方案3】:

最终归结为目标代码,由汇编器生成并随后链接在一起。

所以是的,有可能,你会发现关于 here 的辩论。

这取决于你想用 LKM 做什么,你想将它用于自己和一些实验,还是会在任何地方变得富有成效?

【讨论】:

【参考方案4】:

有一个操作系统正在用 C++ 重写 Linux 内核,它被称为 Boss-Mool,您可以使用 C++ 编写驱动程序。这是链接:https://www.bosslinux.in/boss-mool

【讨论】:

【参考方案5】:

嗯,最初的问题是针对 Linux,而不是 OS X 或 Windows 之类的。

绝对没有办法用 C++ 编写 Linux 内核模式驱动程序! 那是因为您需要与不会与您的模块链接的 libstdc++ 链接。 libstdc++ 不能用于内核模式,就这么简单!

【讨论】:

这对已经在这里的关于这样做的糟糕智慧的补充很少,但它在技术上也是错误的,因为必要的支持可以包含在模块本身中,就像可以使用 C++对于根本不支持共享库的嵌入式目标。其他答案的作者考虑到了这一点。

在 Linux 上运行 C++ 可执行文件

...【发布时间】:2016-02-0817:15:24【问题描述】:我正在尝试使用OpenCV在Linux中编译一个执行C++程序。当我输入时g++-cfacedetection.cpp-std=c++11-ofacedetectionfacedetection文件已正确生成。请注意,我使用-std=c++11是因为我有一个错误建议这样做... 查看详情

如何在 Windows 上使用 Visual C++ 强制加载链接库

...中创建了一些全局对象并在列表中注册,以便可执行文件可以使用它们来构建其他东西。在可执行文件中没有对任何库的任何函数的引用,它只需要对象,然后它就知道要做什么 查看详情

是否可以在 Linux 上使用 .Net Core 3.1 创建 C++/CLI 代码的 C# DLL

】是否可以在Linux上使用.NetCore3.1创建C++/CLI代码的C#DLL【英文标题】:IsitpossibletocreateaC#DLLofC++/CLIcodeusing.NetCore3.1onLinux【发布时间】:2020-01-2817:05:06【问题描述】:这可能是一个非常具体的问题。但是对于其他一些人来说,这可能... 查看详情

如果我在 Linux 上更改 C++ 动态共享库而我的可执行程序在它上面使用会发生啥

...我在Linux上更改C++动态共享库而我的可执行程序在它上面使用会发生啥【英文标题】:whatwouldhappenedifIchangedtheC++DynamicSharedLibraryonLinuxwhilemyexecutableprogramusingonit如果我在Linux上更改C++动态共享库而我的可执行程序在它上面使用会发... 查看详情

在windows上使用vscode远程链接到linux上开发并调试c++程序

...ain.cMakefilelaunch.jsontasks.json按F5,选择工程类型:选择gcc版本:可以看到VSCode成功进入了调试模式,左边还能显示所有变量的值: 查看详情

在 Linux 和 Windows 机器上使用 C++ 调度任务

...序应用程序。网关将视频流式传输到客户端。网关模拟器可以模拟1000网关。用户可以发出命令,例如1小时后开始录制并录制长达1小时,或者可能是5点开始播放视频。所以基本上是在安排任务。此网关 查看详情

是否可以使用 C++ 训练在 tensorflow 和 pytorch 中开发的 ONNX 模型?

】是否可以使用C++训练在tensorflow和pytorch中开发的ONNX模型?【英文标题】:IsitpossibletotrainONNXmodelsdevelopedintensorflowandpytorchwithC++?【发布时间】:2021-12-1912:32:15【问题描述】:我想知道是否可以使用转换为onnx模型的tensorflow和pytorch... 查看详情

使用 C++ 在 Linux 中计算磁盘读/写

...一个图表。我需要在C++中的Linux(Ubuntu12.10)上执行此操作。是否有任何API/工具可用于此任务?我找到了 查看详情

在linux上支持qt对ug进行二次开发吗

...t对ug进行二次开发,只要是对系统升级有好的一方面都是可以进行升级开发的 参考技术B是的,在Linux上可以使用Qt对UG进行二次开发。UG是一款3D建模软件,它支持C++语言进行二次开发,并且提供了对Qt应用框架的支持,因此您可... 查看详情

C++ 可用于 Android 和 iOS 上的 UI 开发

...iOS【发布时间】:2021-12-2013:24:00【问题描述】:我想知道是否可以用C++编写移动应用程序。在互联网上,我发现了一篇关于用Kotlin或FLutter/Dart编写应用程序的文章。我找到了一些可以阅读有关C++和应用程序的网站,但这些网站已... 查看详情

我在linux上使用啥来使python程序可执行

...题描述】:我刚刚安装了一个linux系统(Kubuntu),想知道是否有一个程序可以使python程序在linux上可执行。【问题讨论】:已经在这里回答http://***.co 查看详情

windows下怎样编译出可在linux上执行的程序

1、可以安装cygwin,Cygwin是一个在windows平台上运行的类UNIX模拟环境,是cygnussolutions公司开发的自由软件,搜索官网下载即可,下载完成,安装的时候注意记得安装相关语言的编译器、解释器,在cygwin中生成Linux可执行文件。2、可... 查看详情

Linux中最好的C++开发环境

...使用VisualStudio进行调试,使用SlickEdit进行编辑(Linux上也可以使用SE)。有没有比上面提到的两个更好的IDE? 查看详情

使用Visual C++ for Linux开发时是不是可以直接使用linux文件夹/usr/include

.../includewhenuseVisualC++forLinuxDevelopment使用VisualC++forLinux开发时是否可以直接使用linux文件夹/usr/include【发布时间】:2017-02-2719:32:41 查看详情

valgrind/callgrind 可以在发布的可执行 C++ 程序上工作吗?

】valgrind/callgrind可以在发布的可执行C++程序上工作吗?【英文标题】:Canvalgrind/callgrindworkonareleaseexecutableC++program?【发布时间】:2014-07-1115:09:56【问题描述】:我知道valgrind可以调用memcheck进行内存泄漏检查,在这种情况下编译的... 查看详情

在 Linux 上使用 GLUT 静态编译的 C++

】在Linux上使用GLUT静态编译的C++【英文标题】:C++withGLUTstaticcompileonlinux【发布时间】:2015-12-0517:47:05【问题描述】:我正在尝试将简单的程序编译为独立的可执行文件,以便将其发送给我的朋友。但我正面临GLUT依赖的问题。我... 查看详情

如何在 Linux 和 Windows 计算机上使用代码块开发 C++ 项目?

】如何在Linux和Windows计算机上使用代码块开发C++项目?【英文标题】:HowtodevelopaC++projectusingcodeblockswithseparateLinuxandWindowscomputer?【发布时间】:2017-03-2312:27:59【问题描述】:我正在使用code::blocks开发C++应用程序。在研究所,我们... 查看详情

eclipse可以开发c++吗

参考技术Aeclipse可以开发c++,方法如下:1.首先确保电脑上已经安装了Java,如果没有,或者不确定,请到官网上下载并安装2.到官网上下载并安装Eclipse,因为是用来进行C、C++编程的,需要选择EclipseIDEforC/C++Developers(并根据所使... 查看详情