免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1003 | 回复: 0
打印 上一主题 下一主题

内核模块编程 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-08-07 18:15 |只看该作者 |倒序浏览

                今天学习了一下简单的内核模块编程。感觉很有意思,现在就简单记录一下。
    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切换到字符模式下重新加载和卸载模块进行实验。


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/77727/showart_2020979.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP