我曾經的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萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章