2016-04-01 7 views
0

システムコールの追加に関する質問がたくさんありましたが、動作するLKMを使用した例は見つかりませんでした。私はこのようなリソースを見つけました:http://tldp.org/LDP/lkmpg/2.6/html/ これは、理論的には動作しますが、コンパイルされません。誰かが私にhello worldシステムコールなどを追加するための簡単な例を指摘できますか?私のカーネルを再コンパイルする必要がないhttps://tssurya.wordpress.com/2014/08/19/adding-a-hello-world-system-call-to-linux-kernel-3-16-0/のようなもの?カーネルモジュール(LKM)を使用したシステムコールの追加

答えて

1

一般的には、ではなく、は全く新しいシステムコールを実装することを強くお勧めします。

新しいioctlと新しいブロックまたは文字デバイスを実装するだけです。 ことを行う方法については

別の質問/答えはすでに存在しているように、それが見えます:How do I use ioctl() to manipulate my kernel module?

+0

私はあなたにこれらのものの使い方についていくつかの直感はないと思いますか?私は例を見つけました:http://www.tldp.org/LDP/lkmpg/2.6/html/x892.htmlしかし、私はあなたがioctlを使ってどうやって行くのか分かりません。したがって、デバイスドライバをmknodし、それを読み込んで読み込むことができます。あなたはioctlで何をしていますか? – BashOverride

+0

私は実際に私の質問を再定義すべきだと思います。現在実行中のプロセスに関するデータを返すシステムコールを追加したいとします。だから、私はそれをpidに渡し、それは親のpid、開始時間などのものを返します。ioctlはその情報を見つける読み込みを呼び出すでしょうか?または何?私は、このセットアップがどのように機能するかを理解するのに苦労しています。 – BashOverride

0

私はあなたがモジュールであることを行うことができるとは思いません。システムコールの定義は、実行時に(私が知る限りは)変更できない2つの場所に分かれています。syscallテーブル(アーキテクチャごとの番号を割り当てます)とsyscallsファイル(モジュールではなくカーネル自体でインストールされます)。 (あるいは、少なくとも実行時にコードの書き換えをするのではなくて)。

この場合、いつもカーネルを再コンパイルする必要があります。しかし、クイックアップデート/試しサイクルをしたいのであれば、ロードされている場合に正しいモジュールにメッセージを渡して、単にスタブであるシステムコールを実装することができます。実装では変更できますが、署名は変更できません。