2012-10-12 14 views
8

私は非常に単純なhello worldカーネルモジュールを作成しています。これは私がカーネル3.3.8にアップグレードするまで機能しました。今は...それは、終了時にinit関数を呼び出し、exit関数が初期化時に呼び出されています。カーネルモジュールのInit関数とExit関数が間違った順序で呼び出されています

ルートの@ cop4610::私は私の名前が正しい

// Needed for module definitions 
#include <linux/module.h> 
// Needed for initilization modules 
#include <linux/init.h> 

// Must declare some license 
MODULE_LICENSE("Dual BSD/GPL"); 

// Function to be called on insmod 
// Returns 0 on success 
static int __init mymod_init(void) 
{ 
     // Prints kernel alert. Check /var/log/syslog 
     printk(KERN_ALERT "Module was loaded, this is the printk."); 

     return 0; 
} 

// Function to be called on rmmod 
static void __exit mymod_exit(void) 
{ 
     // Prints kernel alert. Check /var/log/syslog 
     printk(KERN_ALERT "Module was unloaded, this is the printk"); 
} 

// Register these functions 
module_init(mymod_init); 
module_exit(mymod_exit); 

サンプル出力であることを確認作った/home/cop4610/Downloads/linux-3.3.8/mymodule#は mymodule.koルートをにinsmod @ cop4610:/home/cop4610/Downloads/linux-3.3.8/mymodule# tail/var/log/syslog Oct 12 10:08:20 cop4610カーネル:[633.567832] モジュールがアンロードされました。これはprintk

です。

次はこの幸せのビデオですライブライブ: http://www.youtube.com/watch?v=8aJNSpCd7as&feature=youtu.be

+0

は、アップグレード後にモジュールの再構築作りましたか? –

+0

私はカーネルのアップグレード以来、ゼロから再作成しました;) – Ben

+0

は__initと__exitマクロは現在オプションですか? –

答えて

13

改行が必要!!!!!! Arrggg !!!

printk(KERN_ALERT "Module was unloaded, this is the printk\n"); 

printk(KERN_ALERT "Module was loaded, this is the printk\n"); 

本当に順不同でそれらをやっていなかったようだ二つ目は、バッファとして発行されるまで、最初のものは現れていなかったので、それだけ、に登場洗い流されなかった。

+1

ソリューションを共有していただきありがとうございます。私は同じ問題を抱えていて、困惑した。それはあなたの答えを見た後で今意味があります。 – russoue

+0

ソリューションを共有してくれてありがとう。 – Midhun

1

これが私の基本的な例である:

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

#define MODULE_NAME "hello_md" 

MODULE_LICENSE("GPL"); 
MODULE_AUTHOR("B3h3m0th"); 
MODULE_DESCRIPTION("Basic LKM; hello world module"); 
MODULE_VERSION("0.0"); 

static int __init insert_mod(void) 
{ 
    printk(KERN_ALERT "[%s] Init: \"Hello World\"\n", MODULE_NAME); 
    return 0; 
} 


static void __exit remove_mod(void) 
{ 
    printk(KERN_ALERT "[%s] Exit\n", MODULE_NAME); 
} 

module_init(insert_mod); 
module_exit(remove_mod); 

私の基本的なメイクファイル:

obj-m += basic_module.o 

KERNELVERSION = $(shell uname -r) 

all: 
    $(MAKE) -C /lib/modules/$(KERNELVERSION)/build M=$(PWD) modules 
clean: 
    $(MAKE) -C /lib/modules/$(KERNELVERSION)/build M=$(PWD) clean 
関連する問題