1

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

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

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

4

1 に答える 1

2

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

そして、ユーザースペースからカーネル内の関数を呼び出す方法についての質問について...それを直接行う方法はありません。ライブラリの場合のように、ユーザースペースコードをカーネルにリンクすることはできません。まず、関数をsyscallとして登録してから、syscall()関数を使用してsyscallを呼び出す必要があります。

これを説明する良い方法は次のとおりです: http://www.tldp.org/HOWTO/html_single/Implement-Sys-Call-Linux-2.6-i386/

于 2012-04-15T01:49:47.820 に答える