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



http://www.makelinux.net/ldd3/chp-2-sect-3#chp-2-ITERM-4135这个链接描述了用户空间和内核空间的通信。有人能用一个简单的c语言用户空间应用程序来解释它吗;与内核对象通信(发送/接收值)。?

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

更一般地说,用户空间程序通过这些系统调用与内核通信,这些系统调用本质上是用户空间对内核的请求。用C编写的任何应用程序都必须以某种方式使用系统调用来与系统交互(例如,printf在后台使用write系统调用来在屏幕上显示字符)。

只需使用open(2)打开一个文件。编译器将为该调用向应用程序添加代码,这将把函数参数放在堆栈上,并使其以某种方式崩溃(请参阅系统调用)。内核捕获并处理所有崩溃。

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

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

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

最新更新