我曾经的linux kernel module编程入门过程

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

发布了70 篇原创文章 · 获赞 18 · 访问量 10万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章