Chinaunix首页 | 论坛 | 博客
  • 博客访问: 390995
  • 博文数量: 87
  • 博客积分: 2571
  • 博客等级: 少校
  • 技术积分: 920
  • 用 户 组: 普通用户
  • 注册时间: 2009-12-29 13:10
文章分类

全部博文(87)

文章存档

2012年(49)

2011年(7)

2010年(26)

2009年(5)

分类: LINUX

2010-04-26 10:56:46

/* hello.c
   2.6.18-8.e15
 */

#ifndef __KERNEL__
  #define __KERNEL__
#endif
#ifndef MODULE
  #define MODULE
#endif

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

MODULE_LICENSE("GPL");
MODULE_VERSION("1.0");

static int __init hello_init(void)
{
  printk("Hello module init\n");
  return 0;
}

static void __exit hello_exit(void)
{
  printk("Hello module exit\n");
}

module_init(hello_init);
module_exit(hello_exit);


    以上是源码,以下是Makefile(大写M)

 

obj-name=hello
obj-m:=$(obj-name).o
KERNELDIR:=/lib/modules/$(shell uname -r)/build

default:
    make -C $(KERNELDIR) M=$(shell pwd) modules
install:
    insmod $(obj-name).ko
uninstall:
    rmmod $(obj-name).ko
clean:
    make -C $(KERNELDIR) M=$(shell pwd) clean


     以上部分要使用时,将makefile中的命令前的空格换为Tab键

使用:


编译 make
安装 make install
卸载 make uninstall
清理 make clean

安装后,可以在/proc/devices中可以看到,其对应数字为主设备号major
对文件设备模块,要创建设备文件:
     mknod /dev/模块名 c 主设备号  次设备号
    其中c表示字符设备;
    用cat /proc/devices | grep 模块名 | awk '{print $1}' 可以得到主设备号

说明:

该模块只能将自己加入内核,并在加入时打印一句话,如果在stdout上看不到输出,可用dmesg查看

阅读(938) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~