首先說明我用的是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");