Linux カーネル デバイス ドライバー proc ファイル システム ノート

Linux カーネル デバイス ドライバー proc ファイル システム ノート
/*****************
 * proc ファイルシステム********************/

(1)/procファイルシステムの特徴と/procファイルの説明

/proc ファイルシステムは、ソフトウェアによって作成される特別なファイルシステムです。カーネルはこれを使用して情報を外部にエクスポートします。/proc システムはメモリ内にのみ存在し、外部メモリ領域を占有しません。

/proc の下にある各ファイルはカーネル関数にバインドされており、ユーザーがファイルを読み取るとファイルの内容を動的に生成します。 /procファイルに書き込むことでカーネルパラメータを変更することもできます。

/proc ディレクトリ /proc/$pid の下のファイル分析、プロセス $pid に関する情報ディレクトリ。各プロセスには、/proc の下にプロセス番号にちなんで名付けられたディレクトリがあります。例: $>strings -f /proc/[0-9]*/cmdline

  • /proc/cmdline カーネル起動用のコマンドライン
  • /proc/cpuinfo タイプ、製造元、モデル、パフォーマンスなどのプロセッサ情報。
  • /proc/devices には、キャラクタ デバイスとブロック デバイスのメジャー番号と、それらの番号に割り当てられたデバイス名がリストされます。
  • /proc/dma は現在使用されている DMA チャネルを表示します。
  • /proc/filesystemsには、使用可能なファイルシステムの種類がリストされています。通常はカーネルに組み込まれていますが、モジュールを介して新しい種類を追加することもできます。
  • /proc/interrupts には、使用された割り込み番号、割り込み名、およびシステムの起動後にこれらの割り込みが発生した回数が表示されます。
  • /proc/ioports 現在使用されている I/O ポート。
  • /proc/kallsyms カーネル シンボル テーブル。新しいモジュールをインストールするとここに反映されます
  • /proc/kcore システムの物理メモリイメージ。物理メモリとまったく同じサイズですが、実際にはそれほど多くのメモリを占有しません。(覚えておいてください: /proc の下にあるものは、ファイルにコピーされない限り、ディスク領域を占有しません)
  • /proc/kmsg カーネル出力メッセージ。 syslog にも送信されます。
  • /proc/loadavg システムの平均負荷。最初の 3 つは過去 1 分、5 分、15 分の負荷で、その後に実行中のタスクの数とタスクの合計数、最後に最後に実行されたプロセス番号が続きます。
  • /proc/meminfo 物理メモリやスワップなどのメモリ使用量情報。
  • /proc/modules 現在ロードされているコアモジュール。
  • /proc/partitions システムに現在マウントされているハードディスクのパーティション情報
  • /proc/pci システム PCI バス情報
  • /proc/net ネットワーク プロトコルのステータス情報。
  • /proc/self /proc を参照するプログラムのプロセス ディレクトリへのシンボリック リンク。 2 つのプロセスが /proc を参照する場合、それらは異なる接続です。これは主に、プログラムが独自のプロセス ディレクトリを取得する場合に便利です。
  • /proc/slabinfo システム内のスラブキャッシュの割り当て情報
  • /proc/stat システムのステータス情報
  • /proc/swaps システムが使用するスワップ領域情報
  • /proc/sysrq-trigger は sysRq キーを開始するために使用されます $>echo 1 > sysrq-trigger
  • /proc/uptime システムが起動してアイドル状態になっている時間の長さ。稼働時間の使用
  • /proc/version カーネルバージョン

(2)/procファイルを自分で実装する

ヘッダーファイル<linux/proc_fs.h>をインクルードする必要があり、関数は/fs/proc/generic.cで定義されています。

a. /procの下にファイルを作成する

/proc の下に新しいファイルを作成するには、create_proc_read_entry を呼び出します。

構造体proc_dir_entry *create_proc_read_entry(
    定数char *名前、
    mode_t モード、 
    構造体proc_dir_entry *ベース、
    read_proc_t *read_proc、 
    void * データ)

b. /proc以下のファイルをアンインストールする

proc ファイルをアンインストールするには、remove_proc_entry を使用します。

void プロシージャエントリを削除します(
    定数char *名前、 
    構造体 proc_dir_entry *親);

c. データを返す関数を定義する

プロセスが /proc ファイルを読み取ると、カーネルはメモリ ページ (つまり、PAGE_SIZE バイトのメモリ ブロック) を割り当て、ドライバーはこのメモリ ページを通じてユーザー空間に書き込まれるデータを返します。

typedef int (read_proc_t)(char *page, char **start, off_t off,
int カウント、int *eof、void *データ);

要約する

以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。これについてもっと知りたい場合は、次のリンクをご覧ください。

以下もご興味があるかもしれません:
  • Linux カーネル デバイス ドライバーのメモリ管理に関する注意事項
  • Linux カーネル デバイス ドライバー カーネル時間管理に関する注意事項
  • Linux カーネル デバイス ドライバー キャラクタ デバイス ドライバー ノート
  • Linux カーネル デバイス ドライバー仮想ファイル システムに関する注意事項
  • Linux カーネル デバイス ドライバー カーネル デバッグ テクニカル ノート集
  • Linux カーネル デバイス ドライバー カーネル リンク リストの使用上の注意
  • Linuxカメラドライバの書き方の詳細説明
  • Linux におけるドライバモジュールのパラメータ転送プロセスの分析

<<:  Vueでブラウザ共有機能を呼び出す方法

>>:  MySQL でスロークエリログを有効にする方法

推薦する

24 の実用的な JavaScript 開発のヒント

目次1.配列を初期化する2. 配列の合計、最大値、最小値3. エラー値をフィルタリングする4. 論理...

LeetCode の SQL 実装 (175. 2 つのテーブルの結合)

[LeetCode] 175.2つのテーブルを結合する表: 人物+-------------+--...

MySQL における KEY、PRIMARY KEY、UNIQUE KEY、INDEX の違い

タイトルで提起された問題は、段階的に分解して解決することができます。 MySQL では KEY と ...

効率的なMySQLページングの詳細な説明

序文通常、大量のデータを扱う MySQL クエリには「ページング」戦略が採用されます。ただし、ページ...

Reactはいくつかの方法でパラメータを渡します

目次親コンポーネントと子コンポーネント間でパラメータを渡すルーティングパラメータステータスの改善コン...

CentOS 7.5 に Docker をインストールする詳細なチュートリアル

Docker入門Docker は、アプリケーションをより速く配信するのに役立つオープンソースのコンテ...

AngularJSにおける括弧の役割の詳細な説明

1. 括弧の役割1.1 角括弧 [ ]属性名が角括弧で囲まれている場合、右側には式の値が割り当てられ...

CSS は、モバイル端末でクリックされたときに生成された要素の背景色を削除します (推奨)

クリック時に背景色を生成する要素の CSS スタイルに次のコードを追加します。 -webkit-ta...

Vue3 を使用してポップアップ コンポーネントをカプセル化するのは簡単ですか?

目次最初に要約: 🌲🌲 序文: 🍬🍬公開🍬🍬 🍬🍬グローバル🍬🍬 🍬🍬ボールボックス🍬🍬 🎉🎉🎉結論...

小さなプログラムが天井に張り付いてしまう問題を完璧に解決するためにposition:stickyを使用する方法

最近、あるプロジェクトのクライアントが、上部に 2 つのタブ メニューを配置することを要求しました。...

MySQLデータベースのマスタースレーブレプリケーションと読み取り書き込み分離に関する詳細なチュートリアル

目次序文1. MySQL マスタースレーブレプリケーション1. サポートされているレプリケーションの...

暗号化における https の Apache 展開の概要

目次目的実験環境実験原理実験手順1. 独立したCAを生成する2. サーバーの秘密鍵と署名要求ファイル...

Tomcat 7.0 で仮想ディレクトリを設定し、仮想パスを構成する方法

Tomcat7.0は仮想ディレクトリを設定します(1)現在、当社のウェブサイトはデフォルトのディレク...

CSS3+HTML5+JSでブロックの縮小・拡大アニメーション効果を実現

最近、あるプロジェクトに取り組んでいたとき、自分のプロジェクトでは CSS3 のアニメーション技術を...

nginx/apache 静的リソースのクロスドメインアクセスの問題を解決する詳細な説明

1. Apache 静的リソースのクロスドメイン アクセスApache設定ファイルhttpd.con...