1

カーネルモジュールの紹介です。私はThe Linux Kernel Module Programming Guideに従っていて、最初の単純なモジュールを書きました。

これは私のモジュール ファイルですhello.c

/*
*  hello.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");
}

module_init(init_module);
module_exit(cleanup_module);

これが私のMakefile

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/4.15.0-45-generic/build M=/home/nailaakbar modules

make 1 : ディレクトリ '/usr/src/linux-headers-4.15.0-45-generic' に入ります

モジュールの構築、ステージ 2。

MODPOST 0 モジュール

make 1 : ディレクトリ '/usr/src/linux-headers-4.15.0-45-generic' を残します

結果を出す

しかし、このコマンドを使用してカーネルに挿入しようとすると;

sudo insmod hello.k

このエラーが発生しました

insmod: エラー: モジュール hello.ko をロードできませんでした: そのようなファイルまたはディレクトリはありません

両方の関数を静的にする、ファイルの場所を変更するなど、さまざまな解決策を試しましたが、何もうまくいきませんでした。

現在、これらすべてのコマンドをデスクトップで実行しており、Linux 環境ではデュアル ブートを使用しています。

ここで私が間違っていることを誰かが助けてくれますか??

重複する可能性のある質問は実際に私の問題を解決しましたが、直接私の問題ではありませんでした。問題の検索中にその質問を調べましたが、アイデアを得ることができませんでした。それは実際には私の質問に対する1つのコメントであり、エラーに対する私の見解を変更し、その回答が私の問題を解決しました。

4

0 に答える 0