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

推薦する

MySQL 5.5 で範囲パーティションを追加および削除する例

導入RANGE パーティション分割は、指定された連続した間隔範囲に基づいています。RANGE の初期...

新しい ECMAscript オブジェクト機能の紹介

目次1. オブジェクトのプロパティ1.1 属性表記2. プロパティ名を計算する3.オブジェクトメソッ...

MySQL でファイルデータをインポートする際の 1290 エラーの解決方法

エラーシナリオcmd の mysql コマンドを使用して、学生情報テーブルにデータを追加します。デー...

mysql indexof関数の使用手順

以下のように表示されます。 LOCATE(部分文字列、文字列)文字列 str 内の部分文字列 sub...

h1、h2、h3タグを適切に使用する

Web ページを作成する過程では、<h1>、<h2>、<h3> ...

JavaScript クリップボードの使用法の詳細な説明

(1)はじめに: clipboard.js は、テキストをクリップボードにコピーする機能を実装する軽...

HTML/CSS での空白処理とページ内の空白を保持する方法

HTML の空白ルールHTML では、コンテンツ内の複数のスペースは通常 1 つとみなされ、連続する...

mysqlは複数の主キーを設定する操作を実装します

ユーザーテーブル、ID番号は一意である必要があります、携帯電話番号、電子メールアドレスは一意である必...

Linux 3.X/4.x/5.x でパゴダ パネルのパスワードを忘れた場合の解決方法

ssh に入り、次のコマンドを入力してパスワードをリセットします (コマンドの末尾の「testpas...

RHCEはApacheをインストールし、ブラウザでIPにアクセスします

1. at は、5 時間後にルート ディレクトリの at_test ファイルに「これは at タスク...

Ubuntuのソースリスト(ソースリスト)を変更する方法詳細説明

導入Ubuntu のデフォルトのソースは国内サーバーではないため、更新されたソフトウェアのダウンロー...

CSS 背景画像を設定するための 6 つの興味深いヒント

background-image は、おそらくすべてのフロントエンド開発者がキャリアの中で少なくとも...

mysql init_connect に関するいくつかの重要なポイントの要約

init_connectの役割init_connect は通常、接続が来たときに、自動コミットを 0...

Linuxターミナルでファイルを作成する2つの一般的な方法を簡単に理解する

mkdir コマンドを使用して新しいディレクトリを作成できることは誰もが知っていますが、多くの場合、...

Ubuntu 20.04 に MySql5.7 をインストールして構成するための詳細なチュートリアル

目次1. Ubuntuソースの変更2. MySQLをインストールする3. 新しいユーザーを作成し、権...