如何将内核模块从用户空间终端调用到应用程序中

时间:2012-08-24 07:25:55

标签: linux-kernel kernel kernel-module

http://www.makelinux.net/ldd3/chp-2-sect-3#chp-2-ITERM-4135此链接描述了用户空间和内核空间通信。 任何人都可以通过c中的简单用户空间应用程序来解释它,链接&将(发送/接收值)传递给内核对象。?

2 个答案:

答案 0 :(得分:0)

大多数Linux机器上可用的程序insmod(但需要运行sudo权限)指示内核通过系统调用加载指定的模块(内核对象) {{1 }}

更一般地说,用户空间程序通过这些系统调用与内核通信,这些调用本质上是从用户空间向内核请求。您在C中编写的任何应用程序都必须以某种方式使用系统调用与系统进行交互(例如,init_module使用引擎盖下的printf系统调用将字符放在屏幕上。

答案 1 :(得分:0)

只需使用open(2)打开文件即可。编译器会向应用程序添加代码以进行此调用,这会将函数参数放入堆栈并使其以某种方式崩溃(请参阅system call)。内核捕获所有崩溃并处理它们。

由于这是一个“好”的崩溃,内核将查找要调用的函数,从堆栈中获取参数并调用该函数。

这种复杂方法的原因是安全性:通过“崩溃”,应用程序完全放弃控制。 CPU也将切换到不同的模式。在此模式下,它可以访问硬件(在“应用程序”模式下,对硬件的任何访问都会导致“非法访问”崩溃,从而终止您的应用程序。)

open(2)函数本身不能做太多。相反,它将检查哪个文件系统可以处理请求并调用文件系统的open函数。文件系统实现为内核模块。