6

私は数年のCプログラミングの経験があります。今、私は Linux カーネル モジュールの開発に取り組むことにしました。しかし、私は始めることさえできません。このコードをubuntuでコンパイルしました。

#include <linux/module.h>
int init_module(void){ printk("<1> hellp"); return 0;}
void cleanup_module(void){ printk("<1> bye");}

ただし、insmod は機能していません。エラー メッセージは「無効なモジュール形式です」です。グーグルで調べた後、バージョンの互換性に問題がある可能性があると考えました。そして、それを解決する良い方法はありません。では、実際のカーネル モジュール開発者からアドバイスをもらえますか? 学習を始める前にどのような環境を準備すればよいですか?

ありがとう!

4

3 に答える 3

10

module_init()module_exit()マクロといくつかの重要なものがありません#defines。make / gccオプションなど、より多くの情報が必要です。カーネルが64ビットの場合は32ビットでコンパイルしているため、「無効なモジュール形式」が報告されている可能性があります。そのため、-64コンパイルおよびリンクフラグを使用していることを確認してください。

カーネルモジュールのHelloWorldチュートリアルは、http: //archive.is/KNkEEにあります(記事への元のリンクは壊れています)。

カーネルモジュールの作成へようこそ。これらは、Windowsドライバーを作成する場合と比較して非常に楽しいものです(私は両方を実行しました)。Linuxカーネルモジュールのインターフェースははるかに使いやすく、委任して作業をより速く行うことができる多くのベースドライバーがあります。

于 2012-10-07T05:04:38.240 に答える