2

これは私のラボの割り当ての1つです。ここでprocエントリを作成する必要があります:/ proc / sys / kernel /そして、追加したprocエントリのさまざまな値のユーザースペース変数を操作するシステムコールを作成する必要があります。たとえば、ユーザースペース変数が1で、procエントリが0または1の場合、システムコールはユーザースペース変数を1だけインクリメントするか(procエントリが0 / offの場合)、2を掛けます(procエントリが1の場合)。 /の上)

procエントリを追加するために、次のことを行いました。kernel /sysctl.cのファイルのkernelctlテーブルセクションの下に構造体を追加して、エントリxxxを作成しました。カーネルをコンパイルすると、システムはこのカーネルで正常に起動します。エントリは、/ proc / sys / kernel/xxxとしてprocディレクトリにも追加されます。これで、ユーザースペースから読み取りまたは書き込みを行うことができます。私は猫とエコーの両方を実行して、それぞれの読み取りと書き込みを行いました。

システムコールで次のことを行いました。ユーザースペース変数を読み取るためのシステムコールを作成しました。また、access_ok、copy_from user、copy_to_userなどすべてを完了してテストしました。また、ユーザースペース変数を操作して常にインクリメントするようにしました(今のところ)。

私が直面している問題:ここで、if条件を追加して、「xxx」値をチェックし、ユーザースペース変数をインクリメントするか乗算するかを決定する必要があります。これは私が立ち往生しているところです。システムコールを書いていない。このprocエントリ「xxx」の読み方がわかりません。

  1. ファイル処理を使用できますか?
  2. その場合、システムコール内でopen()システムコールを使用する必要がありますか?それは機能しますか?

チェックしたところ、sysctlシステムコールがありましたが、現在は非推奨のようです。このIBMチュートリアルでは、procエントリの読み取りについて説明しています。しかし、create_proc_entryは/ proc / sys / kernelディレクトリ内のパラメータには適用されませんよね?もしそうなら、どうすればread proc entry関数を使用できますか?

4

1 に答える 1

1

「しかし、今度はxxxの値を読み取るためのシステムコールを作成する必要があります。」

「システムコール」という用語は正式な意味で使用されており、値を返す新しいシステムコール(open、read、mmap、signalなど)をカーネルに追加するように求められていると思われます。

Linuxカーネル3.3での新しいシステムコールの追加を参照してください。

于 2013-02-06T08:35:54.383 に答える