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 をインストールし、中国語の単語セグメンターを構成する方法

推薦する

さまざまな種類のMySQLインデックス

インデックスとは何ですか?インデックスは、データベース ストレージ エンジンが指定されたデータをすば...

Tomcat をアンインストールして再インストールする方法 (画像とテキスト付き)

tomcat9をアンインストールする1. Tomcatのインストールはディレクトリに解凍するだけで...

Windows 2016 Server セキュリティ設定

目次システムアップデート構成Windows Update サーバーの変更自動更新を有効にして許可する...

CSS 共通スタイルで二重矢印を描画するサンプルコード

1. 単一の矢印への複数の呼び出し単一の矢印を実装したら、二重矢印を実装するのは簡単です。上では、単...

Nginx 仮想ホストを構成する 3 つの方法 (ドメイン名に基づく)

Nginx は、IP ベースの仮想ホスト構成、ポート ベースの仮想ホスト構成、ドメイン名ベースの仮...

MybatisはSQLクエリのインターセプションと変更の詳細を実装します

序文インターセプターの機能の 1 つは、特定のメソッドの呼び出しをインターセプトできることです。イン...

MySQL の最適化: 高品質の SQL 文を書く方法

序文インターネット上にはデータベースの最適化に関する情報や方法が数多くありますが、その多くは品質にば...

商品クエリ機能を実現するJavaScript

この記事の例では、商品検索機能を実現するためのJavaScriptの具体的なコードを参考までに共有し...

MySQL データベースで機密データの暗号化と復号化を実装する方法

目次1. 準備2. MySQL暗号化関数方式2.1 MySQL 暗号化2.2 MYSQL 復号化3....

MySQLのインデックスシステムがB+ツリーを使用する理由の分析

目次1. インデックスとは何ですか? 2. インデックスはなぜ必要なのでしょうか? 3. インデック...

Mysql InnoDBとMyISAMの違いの分析

MySQL は、myisam、innodb、memory、archive、example など、多く...

ubuntu14.04 に jdk1.8 をインストールするチュートリアル

1. jdkダウンロードアドレスをダウンロードする我下載的是jdk-8u221-linux-x64....

Linuxのテキスト処理コマンドsortの詳細な説明

テキストファイルの内容を並べ替える使用方法: ソート + オプション + ファイル名 (複数のファイ...

CSSレイアウトにおけるフロート属性と位置属性の違い

CSS レイアウト - position プロパティposition 属性は、要素に適用する配置方法...

Vue Notepadの例の詳細な説明

この記事の例では、メモ帳機能を実装するためのVueの具体的なコードを参考までに共有しています。具体的...