2012-10-07 10 views
5

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

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

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

ありがとうございます!

答えて

10

マクロがmodule_init()module_exit()であり、重要なものがいくつかあります。#definesがあります。 make/gccオプションなどの情報も必要です。カーネルが64ビットのときに32ビットでコンパイルしているので、 "無効なモジュールフォーマット"を報告している可能性がありますので、-64コンパイルとリンクフラグを使用していることを確認してください。

カーネルモジュール用の素晴らしいhello worldのチュートリアルは、 http://archive.is/KNkEEです(記事へのoriginal linkは壊れています)。

カーネルモジュールの作成にようこそ。彼らはWindowsドライバを書くことに比べて楽しいです(私は両方をやったことがあります)。 linuxカーネルモジュールのインターフェイスは、使用するほうがはるかに簡単で、多くの基本ドライバがあり、作業をより迅速に行うことができます。

+0

* "あなたは、__initと__exitマクロが含まれていない..." * - '__init'と' __exit'の使用が必要とされていません。起動が完了した後に解放できるテキストセクションのみを指定します。ドライバモジュールに必要なのは、 'module_init()'と 'module_exit()'を使って2つのエントリポイントの宣言です。 – sawdust

1

Linuxカーネル、モジュールプログラミング、組み込みデバイス用のシンプルなデバイスドライバの作成に関する完全で簡略化したブログ。

xploredevicedrivers.blogspot.in

関連する問題