首先说明我用的是ubuntu 7.04
hello.c文件
#ifndef __KERNEL__
#define __KERNEL__
#endif
#ifndef MODULE
#define MODULE
#endif
#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>
/*所有初始化必须满足下面形式 int may_init(void) */
static int hello_init(void) /*如果初始化顺利完成,则返回0,否则返回非0*/
{
printk(KERN_ALERT "hello world,my first kernel module program!\n");
return 0;
}
/*
*退出函数必须符合下列形式
*void my_exit(void);也可标其为static
*/
static void hello_exit(void)
{
printk(KERN_ALERT "remove hello world!\n");
}
module_init(hello_init); /*宏调用将hello_init被该例程注册到系统*/
module_exit(hello_exit);
/*如果载入非GPL模块到系统内存,则会在内存中被设置为被污染标志*/
MODULE_LICENSE("GPL"); /*用于指定模块的版权*/
MODULE_AUTHOR("弈伯"); /*指定代码作者*/
Makefile文件
obj-m := hello.o #也可为obj-m +=hello.o
KERNELBUILD := /lib/modules/`uname -r`/build
default:
make -C $(KERNELBUILD) M=$(shell pwd) modules #放在内核外你的shell当前位置
install:
/sbin/insmod hello.ko
remove:
/sbin/rmmod hello.ko
clean:
rm -rf *.o .*.cmd *.ko *.mod.c .tmp_versions *.symvers
注意:2.6采用kbuild构建模块,内核外维护自己的module
命令:
$make
$sudo make install
$dmesg
$sudo make remove
$dmesg
$make clean
就OK了
记录等级:
0 KERN_EMERG 紧急情况
1 KERN_ALERT 需要立即被注意的错误
2 KERN_CRIT 临界情况
3 KERN_ERR 错误
4 KERN_WARNING 警告
5 KERN_NOTICE 普通的,不过也有可能需要注意的情况
6 KERN_INFO 非正式的信息
7 KERN_DEBUG 调试信息--一般是调试信息
故printk(KERN_ALERT "hello world,my first kernel module program!\n");
也可以是printk(<1> "hello world,my first kernel module program!\n");