質問
同じ問題を抱えている私の友人の一人が stackoverflow で投稿したものを複製しました。
このチュートリアルからコードをコピーしました。 http://www.thegeekstuff.com/2012/04/create-proc-files/
そして、私のprocfileを作成したモジュールを作成しました。
"text" > proc/name_of_procfile をエコーできる procfile を取得したことがわかってうれしかったです
猫と一緒に読むこともできます!!
私はそれをだましていましたが、今では procfile にかなりの数の値があります。cat を実行するたびに、これらの値が順番に処理されます。
Q1. procfile から値を削除するにはどうすればよいでしょうか?
また、後で、ファイルが procfile を読み取るたびに、proc_file で読み取られた値の値を変更するという動作を取得しようとします。
Q2.これが「int read_info」メソッドで実装されることはわかっていますが、これを行う方法についてのヒントはありますか?
解決
Q1.
ファイル システムに対する通常の削除操作では、これらの値を削除することはできません。してもいいです echo
書き込み可能な場合は、procfile に何かを書き込みます。この「受信」データがどのように扱われるかは、モジュールの動作に依存します。それは保存されるか破棄されるか、あるいは何らかの方法で内部的に処理されるか - モジュールが決定します。より正確に言うと、モジュールに組み込むロジックによって処理が定義されます。この例のモジュールには非常に単純なロジックがあります。カーネルが呼び出したときに内部バッファに文字列を記憶します。 write_info
関数 - 実際には、新しいデータと現在のコンテンツを連結します。その後、カーネルが read_info 関数を呼び出したときに、このバッファの内容を返すことができます。したがって、次のようにすると:
echo "some text">/proc/yourprocfile
echo "another text">/proc/yourprocfile
それから cat /proc/yourprocfile
印刷するだろう
some text
another text
画面上。要約する:これらのファイルの完全な動作は次のとおりです。 module-defined
.
Q2.
通常の場合とほぼ同じようにこれを行うことができます C
プログラム。大きな違いは 2 つあります。
カーネルモードでアクセスできるAPIが異なります。一部の関数は、標準の類似物と同じまたはよく似た名前と機能を持ちます。
C
図書館にはあります。他の関数の名前は異なりますが、一部のユーザー空間関数に似ています。そして、カーネル空間でのみ利用できるいくつかの特定の関数。カーネル空間で行うことはすべて、何度もチェックしてデバッグする必要があります
on the sheet of paper
モジュールにバグがあると、少なくともカーネル コア ダンプが発生する可能性があるため (カーネルは停止するだけで、その後、reset
ボタンを押してシステムを再起動してください)、最悪の場合、ファイル システムのデータ破損を引き起こす可能性があります。
したがって、VirtualBox パッケージをセットアップすることをお勧めします。この美しいツールを使用して仮想マシンを作成します。そこに最小限の Linux バージョンをインストールし、インストール後にその仮想ディスクのスナップショットを作成します。したがって、何か問題が発生した場合でも、いつでも損害を元に戻すことができます。すべてのビルド ツールとカーネル ソースをそこにインストールする必要はありません。この仮想マシン上でモジュール/アプリケーションをロードしてテスト/デバッグするだけです。
とにかく、これから触れようとしている、あるいは正確に言えばすでに触れられている領域は、非常に興味深いものです。
幸運を