2012-04-14 13 views
1

私はカーネルプログラミングの初心者です。私はちょっとインスピレーションが必要です。私は、カーネルソースにいくつかの関数を書いて、カーネルを再構築して再起動できることを知っています。コードは、ハードウェアを制御する何らかのハードウェアドライバであってもよい。しかし、どのように私たちのユーザー空間プログラムは、これらの機能を使用できますか? 私は、ユーザスペースプログラムがカーネルスペースと通信できることを知っています。また、ロード可能なカーネルモジュールは、カーネルソースコードで定義された関数も使用できます。しかし、私たちのユーザープログラムはこれをどのように達成できますか?linuxでは、ユーザー空間プログラムがどのようにカーネル関数を使用できますか?私は本当にインスピレーションが必要です

PS:今私はqemu-kvmを学んでいます。私はqemuがユーザスペースプログラムであり、kvmがカーネルであることを知っています。私はちょうどqemuプログラムがkvmをどのように使用するかを理解したい。

これは非常に基本的なLinuxカーネルプログラミングの問題ですが、私は長い間混乱しています。誰かが私にヒントを与えることができますか? :>

+0

手段 '/ dev'で'/proc'ファイルシステムとデバイスファイルは次のとおりです。

は、ここでそれを説明する良いHOWTOです。 –

+0

私はqemu-kvmがnetlinkを使ってカーネル<=>のユーザー空間に通信していると思います。 – strkol

+0

@strkol:ネットリンクとは何ですか? –

答えて

2

ドライバをプログラミングする場合は、新しいsyscallを挿入しないでください。新しいシステムコールは通常悪い考えです。あなたはそれを行うのに十分な理由があります。ハードウェアドライバは良くありません。ドライバをcharデバイス、ブロックデバイスまたはネットワークデバイスとして登録する必要があります。さまざまな種類のドライバの例を見るには、「Linux Device Driver」(インターネット上で合法的に入手可能)の本をお勧めします。

そして、ユーザ空間からカーネル内の関数を呼び出す方法については、直接的な方法はありません。ライブラリと同様にユーザ空間コードとカーネルをリンクすることはできません。まず、関数をsyscallとして登録し、syscall()関数を使ってsyscallを呼び出す必要があります。脇のシステムコールからカーネル/ユーザ空間の通信のhttp://www.tldp.org/HOWTO/html_single/Implement-Sys-Call-Linux-2.6-i386/

関連する問題