关于Linux内核模块的快速问题

关于Linux内核模块的快速问题,linux,kernel,c,Linux,Kernel,C,我非常熟悉Linux,我已经使用它2年了,有1年半没有Windows了,我终于开始深入研究内核编程了,我正在做一个项目。因此,我的问题是: 内核模块会比传统的c程序运行得更快吗。 我如何与一个模块通信甚至是可能的,例如调用其中的函数。 1.内核模块会比传统c程序运行得更快吗 视情况而定™ 作为内核模块运行意味着您可以按照不同的规则进行操作,根据您所做的操作,您可能会避免一些上下文切换。您可以访问一些功能强大的工具,这些工具可以用来优化您的代码,但不要期望您的代码仅仅通过将所有东西都放到内核空间中

我非常熟悉Linux,我已经使用它2年了,有1年半没有Windows了,我终于开始深入研究内核编程了,我正在做一个项目。因此,我的问题是:


内核模块会比传统的c程序运行得更快吗。 我如何与一个模块通信甚至是可能的,例如调用其中的函数。
1.内核模块会比传统c程序运行得更快吗

视情况而定™ 作为内核模块运行意味着您可以按照不同的规则进行操作,根据您所做的操作,您可能会避免一些上下文切换。您可以访问一些功能强大的工具,这些工具可以用来优化您的代码,但不要期望您的代码仅仅通过将所有东西都放到内核空间中就能神奇地运行得更快

2.我如何与模块通信是可能的,例如调用其中的函数

有多种方式:

您可以使用各种文件系统接口:。。。 你可以注册 你可以利用 您可以创建新的系统调用,尽管这是非常不鼓励的 您可以随时提出自己的方案,或者使用一些不太常见的API
内核模块会比传统的c程序运行得更快吗。 内核已经是一个C程序,它很可能是用您使用的同一个编译器编译的。因此,通用算法或一些处理器密集型计算将以几乎相同的速度执行

但是像bash这样的大多数用户空间程序都必须要求内核对系统资源执行一些操作,即在监视器上打印提示符。它需要通过系统调用进入内核,通过tty接口发送数据并传递给视频驱动程序,这可能会引入一些延迟。若你们在内核中实现了bash,你们可以直接调用视频驱动程序,这肯定会更快

然而,这种方法也有缺点。首先,bash应该能够在ssh会话或串行控制台上打印提示符,这将使逻辑复杂化。另外,如果bash挂起,您不能仅仅杀死它,您必须重新启动系统

我如何与一个模块通信甚至是可能的,例如调用其中的函数。
除了@tux3提供的优秀列表之外,我建议从char设备开始。

这是一个更好的资源。他们能给你比我们更完整的答案。内核模式可以更快,这通常取决于模块实际在做什么。内核模式通常不会使代码运行得更快,它只是提供了无限的访问权限,让您能够更直接地了解您想要完成的任务。至于通信,模块在启动时获取参数,并且可以在/proc中为纯内核相关的东西创建文件,或者在/sys中为与硬件相关的内核模块创建文件。您可以在其中任何一个中的某个位置创建一个文件,该文件在写入时执行某个函数的代码。1。为什么会有这样一个问题:如果内核模块运行得更快?它只是一个在CPU上运行的代码。如果您谈论的是优先级时间片,那么它的区别将在讨论中体现出来。2.您导出模块的非静态函数,然后从其他模块调用它。内核模块是否会比传统的c程序运行得更快?内核模型是一个c程序。第二部分:是否有任何系统调用可以在不读取/写入sysfs/procfs的情况下输入模块代码?那么通常很难映射到fs层次结构的ioctrl调用呢?@gavenkoa是的,您可以创建不经过sysfs/procfs的新系统调用,但这是非常不受欢迎的。不过,我不确定你关于ioctl的问题是什么。您可以在Linux系统调用界面上查看更多信息。