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 8.0.12 のインストールと設定のチュートリアル

この記事はMySQL 8.0.12のインストールと設定に関する詳細なチュートリアルを記録しています。...

CSS3はアニメーション効果を実現するためにvar()とcalc()関数を使用する。

ナレッジポイントをプレビューします。アニメーションフレーム背景グラデーションvar() と calc...

CentOS7 ファイアウォール操作コマンドの完全なリスト

目次インストール: 1. ファイアウォールの基本的な使い方2. ファイアウォールd-cmdを設定する...

MySQLデータベースはMMM高可用性クラスタアーキテクチャを実装します

コンセプトMMM (Mysql のマスター マスター レプリケーション マネージャー) は、Perl...

ページを更新せずにフォームを送信するには iframe を使用します

そこで、この問題を解決するために埋め込みフレームワークを導入します。具体的な原則は、フォームがデータ...

vmware workstation12 インストール CentOS プロンプト VMware Player と Device/Credential Guard に互換性がない、理由と解決策

最新バージョンの WIN10 では、Microsoft は仮想化コンテナに基づくセキュリティ メカニ...

Webフロントエンド開発経験の概要

XMLファイルは、可能な限りutf-8でエンコードする必要があります。gb2312には、?など、保存...

検索データ表示を実装するJavaScript

この記事ではJavaScript検索のデータ表示コードを参考までに共有します。具体的な内容は以下のと...

uniapp WeChatミニプログラムのグローバル共有を実装するためのサンプルコード

目次グローバル共有コンテンツファイルを作成するファイルをインポートしてグローバルに登録するページ共有...

TOM.COMのホームページリニューアルの経験

<br />何の警告もなく、cnBeta で TOM.COM の Web サイトが再設計...

React Native が「NSArray<id<RCTBridgeModule>>型のパラメータを初期化できません」というエラーを報告する (解決方法)

最近、古い RN プロジェクトを Xcode で実行すると、次のコード エラーが報告されました。 &...

Nginx 静的ファイル サービスの構成と最適化の詳細な説明

ルートディレクトリとインデックスファイルroot ディレクティブは、ファイルの検索に使用するルート ...

Vue3 でサードパーティのコンポーネントライブラリをオンデマンドでロードする方法

序文Element Plus を例に、コンポーネントとスタイルのオンデマンド読み込みを構成します。環...

HTML シンプルな Web フォーム作成例の紹介

<input> はユーザー情報を収集するために使用され、終了ステートメントはありません。...

Vueはボタン切り替え画像を実装します

この記事では、ボタン切り替え画像を実現するためのVueの具体的なコードを例として紹介します。具体的な...