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 でスロークエリログを有効にする方法

推薦する

React でインデックスをキーとして使用することが推奨されないのはなぜですか?

1. 古い仮想DOMと新しい仮想DOMを比較し、まずキーが同じかどうかを確認します。 2. 引き続...

SQL文におけるGROUP BYとHAVINGの使用に関する簡単な説明

GROUP BY 句と HAVING 句を紹介する前に、まず SQL 言語の特殊な関数である集計関数...

Mysql マルチテーブル結合クエリの実行の詳細について簡単に説明します。

まず、このブログのケースデモンストレーション テーブルを作成します。 create table a(...

MYSQLのバックアップデータのスケジュールクリアの特定の操作

1|0 背景プロジェクトの要件により、各月の履歴在庫データをアーカイブしてバックアップする必要があり...

Linux で文字列を整理するためのヒント

Linuxの操作では、ファイル内の文字列を置換したりカウントしたりすることが多いです。ここでまとめを...

docker の実行に必要な権限の分析

Docker を実行するには root 権限が必要です。非 root ユーザーに docker コマ...

jsはaudioContextを通じて3Dサウンド効果を実現します

この記事では、audioContextを介して3Dサウンド効果を実現するためのjsの具体的なコードを...

ネイティブJSが様々なスポーツの均一な動きを実現

この記事では、ネイティブ JS で実装された均一なモーションを紹介します。その効果は次のとおりです。...

CSSスタイルは、テキストが長すぎる場合に省略記号を表示する問題を解決します

1. CSSスタイルは、テキストが長すぎる場合に省略記号を表示する問題を解決します1. 一般的なスタ...

Zabbix 監視 Docker アプリケーション構成

コンテナの応用はますます一般的になっていますが、大量のコンテナをどのように管理すればよいのでしょうか...

Vue+Element UI でサマリーポップアップウィンドウを実装するプロセス全体

シナリオ: 検査文書には n 個の検査詳細があり、検査詳細には n 個の検査項目があります。実装効果...

Zabbix WEB 監視実装プロセス図

Zabbix独自のWEBインターフェースを例に、Web監視の設定を行います。環境: zabbix4....

DockerでのinfluxDB分散時系列データベースのインストールと関連操作について簡単に説明します。

influxDB の紹介influxDB は分散型時系列データベースです。 cAdvisor はリ...

HTML テーブルタグチュートリアル (44): テーブルヘッダータグ

<br />ソース コード内で表の構造を明確に区別するために、HTML 言語では、表のヘ...

CSS を使用して三角形を実装する一般的な手法 (複数の方法)

面接の経験によっては、CSS に関する質問がよく見られ、CSS を使用して三角形を描画する方法につい...