1
/*
 *  hello-1.c - The simplest kernel module.
 */

#include <linux/module.h>       /* Needed by all modules */
#include <linux/kernel.h>       /* Needed for KERN_INFO */

int init_module(void)
{
        printk(KERN_INFO "Hello world 1.\n");

        /*
         * A non 0 return means init_module failed; module can't be loaded.
         */
        return 0;
}

void cleanup_module(void)
{
        printk(KERN_INFO "Goodbye world 1.\n");
}

メイクファイル

obj-m += hello.o

all:
        make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules

clean:
        make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

makeコマンドの後、次のエラーが発生します。このエラーの理由は何ですか?どうすれば解決できますか?

make -C /lib/modules/2.6.32-358.el6.x86_64/build M=/home/hello modules
make: *** /lib/modules/2.6.32-358.el6.x86_64/build: No such file or directory.  Stop.
make: *** [all] Error 2
4

2 に答える 2

3

make コマンドの -C オプションは、ディレクトリを -C で指定されたディレクトリに変更するように指示します。あなたの場合、それは /lib/modules/2.6.32-358.el6.x86_64/build です。しかし、そのディレクトリに移動しようとすると、コンパイルで「No such file or directory」というエラーが表示されます。これは、/lib/modules/2.6.32-358.el6.x86_64/ にビルド ディレクトリがないことを意味します。

多くの場合、指定されたパスのビルドはディレクトリではなく、カーネル ソース コード ディレクトリへのソフト リンクである可能性があります。

そのため、必要なパスにカーネル ソースを含むビルド ディレクトリがあるか、カーネル ソースへのソフト リンクであるかを確認する必要があります。

于 2013-10-03T10:24:12.557 に答える
0

これらのビルド関連のすべてのコメントとは別に、カーネル モジュールを作成するときに従わなければならないことがいくつかあります。これらのビルドの問題を修正した後でも、コードは期待どおりに機能しません。なんで?init ルーチンと cleanup ルーチンを作成しましたが、どれが init ルーチンでどれが cleanup であるかを指定/指示していません。

このようにしなければならない、

ファイルの最後に、これらの 2 行を追加します。

module_init ( foo_init_fn);

module_exit ( bar_exit_fn);

また、以下のようにモジュールライセンスの詳細などを指定する必要があります。

MODULE_LICENSE("GPL");

MODULE_AUTHOR("Copyright (c) 2006 by xxxx xxxxx, Inc.");

MODULE_DESCRIPTION("klm_vdc");
于 2013-10-04T11:43:16.250 に答える