内核模块编程
时间:2009-08-07 来源:dolinux
Linux的这种模块机制有效的控制了内核的大小,他可以将一些并不是必需的功能直接编译到内核中,而是以模块的形式进行组织。这样我们要在现有的内核中增加或删除一些功能时就不需要重新编译内核了。模块本身并不会编译到内核映像中,这样就有效的控制了内核的大小
下面我们就来写一个简单的内核模块
#include <linux/init.h> 这个简单的模块之包含了内核模块加载函数、卸载函数和对GPL权限的声明描述信息。接下来我们编写一个makefile文件来编译这个模块。 Makefile:
|
obj-m += hello.o |
编译完成之后我们就可以加载模块了,加载模块和卸载模块需要在root权限下执行。
sudo insmod hello.ko
这样我们就成功加载了模块。
这时我们可以输入lsmod进行查看。可以看到我们提交的hello模块已经在正常工作了。
along@along-laptop:~/code/modules$ lsmod
Module Size Used by
hello 9344 0
binfmt_misc 16776 1
ppdev 15620 0
bridge 56212 0
stp 10500 1 bridge
卸载模块我们可以使用 sudo rmmod hello
如果我们是在字符模式下工作,那么加载和卸载模块时我们会在屏幕上分别看到 Hello Modules!和Good bye!这两个字符串。如果我们是在窗口系统下工作,很有可能我们看不到任何的输出。这是因为此时他将系统信息输出到了日志文件中。我们可以在/var/log/messges文件中查看,当然此时的信息就可能不是我们期望的字符串了(至少在我这里是这样的)。要想加载和卸载模块时看到字符串的输出,我们可以Ctrl+Alt+F1切换到字符模式下重新加载和卸载模块进行实验。