Linux におけるドライバモジュールのパラメータ転送プロセスの分析

Linux におけるドライバモジュールのパラメータ転送プロセスの分析

ドライバーモジュールに渡すパラメータ名、タイプ、権限を宣言します。

module_param(変数名、タイプ、権限);

#include <linux/init.h>
#include <linux/module.h>

静的char *p_name = "Usr";
module_param(p_name, charp, S_IRUGO);
MODULE_PARM_DESC(p_name, "これはchar * 文字列です。");

静的 int __init hi_init(void)
{
  printk(KERN_INFO "Hi enter %s\n",p_name);
  0を返します。
}
モジュールを初期化します。

静的void __exit hi_exit(void)
{
  printk(KERN_INFO "Hi exit %s\n ",p_name);
}
モジュールを終了します。

モジュールAUTHOR("libra13179");
MODULE_LICENSE("GPL v2");
KVERS = $(シェル uname -r)

# カーネルモジュール
obj-m += hi.o

# モジュールのコンパイルのフラグを指定します。
#EXTRA_CFLAGS=-g -O0

ビルド: kernel_modules

カーネルモジュール:
  make -C /lib/modules/$(KVERS)/build M=$(CURDIR) モジュール
# @echo $(KVERS)

クリーン:
  make -C /lib/modules/$(KVERS)/build M=$(CURDIR) をクリーンにする

設定されていない場合はデフォルト値が使用されます。

root@lin-virtual-machine:/home/lin/hi# insmod ./hi.ko
root@lin-virtual-machine:/home/lin/hi# cat /var/log/syslog | grep Hi
...
7月25日 15:11:38 lin-virtual-machineカーネル: [ 203.238178] Hi enter Usr
...

設定を使用する場合

root@lin-virtual-machine:/home/lin/hi# insmod hi.ko p_name='God'

モジュールをロードすると、/sys/modules の下にモジュール フォルダーが生成され、そのフォルダーの下にパラメーター フォルダーが作成されます。

パラメータ名にちなんで名付けられたファイルノードが含まれており、たとえばp_nameに設定した値が格納されます。

root@lin-virtual-machine:/home/lin/hi# cat /sys/module/hi/parameters/p_name

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

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

<<:  MySQL の 3 つの Binlog 形式の概要と分析

>>:  Docker に Solr 8.6.2 をインストールし、中国語の単語セグメンターを構成する方法

推薦する

負荷分散と動的・静的分離を実現するNginx+Tomcatの原理の分析

1. Nginx ロードバランシングの実装原理1. Nginxはリバースプロキシを通じて負荷分散を実...

Linuxで同一ファイルを見つける方法

コンピュータを使用すると、システム内に大量のゴミが生成されます。最も一般的なケースは、同じファイルが...

Linux 負荷分散 LVS の詳細な理解

目次1. LVS 負荷分散2. 負荷分散LVSの基本紹介3. LVSアーキテクチャ3.1 ロードバラ...

問題におけるJS演算子の調査

問題は、誰もが「メモリ リーク」について知っていることです。一般的なシナリオはいくつかあります。クロ...

React で遅延読み込みを使用して最初の画面の読み込み時間を短縮する方法

目次使用インストールルーティングでどのように使用しますか?読み込み速度の比較最近、中間およびバックエ...

mysql はインデックスを無効にしますか?

mysql の IN はインデックスを無効にしますか?しませんよ! 結果をご覧ください: mysq...

$remote_addr に基づく nginx フロントエンド配布方法の詳細な説明

要件は次のとおりです。ドメイン名の下に複数のサーバーがあります。現在、特定の地域をテストしています。...

MySQL共通ストレージエンジンの機能と使用方法の詳細な説明

この記事では、一般的な MySQL ストレージ エンジンの機能と使用方法を例を使って説明します。ご参...

Vue の vue.$set() メソッドのソースコード例の詳細な説明

Vue を使用してプロジェクトを開発する過程で、次のような問題によく遭遇します。Vue のデータでオ...

MySQL 分離レベル操作プロセスの詳細説明 (cmd)

コミットされていない読み取りの例の操作プロセス - コミットされていない読み取り1. 2 つの My...

弾幕効果を実現するためのjQuery

この記事では、弾幕効果を実現するためのjQueryの具体的なコードを参考までに共有します。具体的な内...

dockerプライベート倉庫の構築と利用の詳細説明

1. リポジトリイメージをダウンロードする docker プルレジストリ 2. プライベートウェアハ...

JavaScriptのプリミティブ値とラッパーオブジェクトの詳細な紹介

目次序文文章プリミティブ型プリミティブ値ラッパーオブジェクト物体コンストラクタ通常機能(関数)プリミ...

HTMLページ作成に関する私の経験の簡単な要約

Word of Mouth に入社して 3 ~ 4 か月が経ちました。仕事の中で一番の収穫は、ビジュ...

複数のサーバーにNginxリバースプロキシを実装する方法

Nginx は複数のサーバーをリバース プロキシします。つまり、nginx に異なるリクエストを送信...