10

私は非常に単純な hello world カーネル モジュールを作成しており、おかしな動作をしています。これは、カーネル 3.3.8 にアップグレードするまでは機能していましたが、現在は機能しています...まあ、init終了時に関数を呼び出し、exit初期化時に関数を呼び出しています。名前が正しいことを確認しました

// 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);

出力例:

root@cop4610:/home/cop4610/Downloads/linux-3.3.8/mymodule# insmod mymodule.ko root@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

4

2 に答える 2

22

改行が必要でした!!!!!!!! アーゴッ!!!

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

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

バッファがフラッシュされていないため、最初のものが発行されるまで2番目のものが表示されなかったため、実際にはそれらを順不同で実行しているように見えました。

于 2012-10-12T16:16:59.233 に答える
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
于 2012-10-16T15:42:42.920 に答える