文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>内核模块编程

内核模块编程

时间:2009-08-07  来源:dolinux

今天学习了一下简单的内核模块编程。感觉很有意思,现在就简单记录一下。

    Linux的这种模块机制有效的控制了内核的大小,他可以将一些并不是必需的功能直接编译到内核中,而是以模块的形式进行组织。这样我们要在现有的内核中增加或删除一些功能时就不需要重新编译内核了。模块本身并不会编译到内核映像中,这样就有效的控制了内核的大小

下面我们就来写一个简单的内核模块

#include <linux/init.h>
#include <linux/module.h>

static int hello_init(void)
{
    printk(KERN_ALERT"Hello Modules!\n");
    return 0;
}
static void hello_exit(void)
{
    printk(KERN_ALERT"Good bye!\n");
}
MODULE_LICENSE("GPL");
module_init(hello_init);
module_exit(hello_exit);

   这个简单的模块之包含了内核模块加载函数、卸载函数和对GPL权限的声明描述信息。接下来我们编写一个makefile文件来编译这个模块。

Makefile:



obj-m += hello.o
all:
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

然后输入make进行编译。
  编译完成之后我们就可以加载模块了,加载模块和卸载模块需要在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切换到字符模式下重新加载和卸载模块进行实验。
相关阅读 更多 +
排行榜 更多 +
动物大战僵尸I

动物大战僵尸I

飞行射击 下载
龙兽争霸无限零件图纸

龙兽争霸无限零件图纸

飞行射击 下载
金属战士2最新版

金属战士2最新版

飞行射击 下载