Username: Password:

一个最简单的Linux 2.6内核驱动模块
来源: ChinaUnix博客  作者: 发布时间:2007-01-01 17:24:00


/* hello.c */
#include        /* Needed by all modules */
#include        /* Needed for KERN_ALERT */
#include          /* Needed for the module-macros */

static int __init hello_init(void)    // Module entry function specified by module_init()
{
        printk(KERN_ALERT "Hello,world!\n");
        return 0;
}

static void __exit hello_exit(void)  //Module exit function specified by module_exit()
{
        printk(KERN_ALERT "Goodbye,cruel world!\n");
}

module_init(hello_init);
module_exit(hello_exit);

MODULE_LICENSE("Dual BSD/GPL");  //should always exist or you’ll get a warning
MODULE_AUTHOR("BENSON"); //optional
MODULE_DESCRIPTION("STUDY_MODULE"); //optional

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

obj-m := hello.o表示编译后生成hello.o模块。
$(KDIR) 指定了内核源码的路径,“M=”表示这是个外部模块,M=$(PWD) 指定了该模块文档所在的路径。
注: makefile预定义了$(PWD)变量,此处能够不必重复定义。

执行#make编译成功后
加载模块
#insmod hello.ko
#lsmod 输出内核已加载模块信息,能够查看到刚刚加载成功的hello模块
……
Module                  Size  Used by
hello                   5632  0
能够在日志里查看加载模块时的信息
#vi /var/log/messages
……
Sep 27 13:25:21 localhost kernel: Hello,world!

卸载模块
#rmmod hello.ko
#lsmod 发现hello模块已被卸载
查看日志信息
#vi /var/log/messages……
…………
Sep 27 13:26:58 localhost kernel: Goodbye,cruel world!

参考资料:
The Linux Kernel Module Programming Guide 2.6  很好的kernel module program 入门教程

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1803576


喜欢本文,那就收藏到:

    Del.icio.us Google书签 Digg Live Bookmark Technorati Furl Yahoo书签 Facebook 百度搜藏 新浪ViVi 365Key网摘 天极网摘 和讯网摘 博拉网 POCO网摘 添加到饭否 QQ书签 Digbuzz我挖网
相关评论  我也要评论
还没有关于此文章的相关评论!
  • 昵称: (为空则显示guest)
  • 评论分数: ★ ★ ★★★ ★★★★ ★★★★★
  • 评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
  • 导航
    赞助商
    文章类别
    订阅