Linux カーネル デバイス ドライバー Linux カーネル モジュールの読み込みメカニズム メモの概要

Linux カーネル デバイス ドライバー Linux カーネル モジュールの読み込みメカニズム メモの概要

#include <linux/moduleparam.h>

1. モジュールパラメータ

ドライバー内の変数の定義

static int num = 0; //ロードモジュールがnumの値を指定しない場合は0になります
  • module_param(変数名、型、権限); 型: byte、int、uint、short、ushort、long、ulong、bool、charp、権限には書き込み権限を設定できません
  • パラメータを渡す: insmod test.ko 変数名 1 = 値 1 変数名 2 = 値 2

module_param の呼び出し関係は次のとおりです。

#define module_param(名前、タイプ、権限) \
module_param_named(名前、名前、タイプ、権限)
#define module_param_named(名前、値、タイプ、パーミッション) \
param_check_##type(名前、&(値)); \
module_param_call(名前、param_set_##type、param_get_##type、&value、perm); \
__MODULE_PARM_TYPE(名前、#タイプ)
#define module_param_call(名前、設定、取得、引数、パーマ) \
__module_param_call(MODULE_PARAM_PREFIX、\
  名前、設定、取得、引数、\
  __same_type(*(arg), bool), perm)
#define __module_param_call(プレフィックス、名前、設定、取得、引数、isbool、パーマ) \
静的 int __param_perm_check_##name __attribute__((未使用)) = \
BUILD_BUG_ON_ZERO((perm) < 0 || (perm) > 0777 || ((perm) & 2)) \
+ BUILD_BUG_ON_ZERO(sizeof(""プレフィックス) > MAX_PARAM_PREFIX_LEN); \
静的const char __param_str_##name[] = プレフィックス #name; \
静的構造体 kernel_param __moduleparam_const __param_##name \
__使用済み \
  __attribute__ ((未使用、__section__ ("__param")、aligned(sizeof(void *)))) \
= { __param_str_##name、perm、isbool ? KPARAM_ISBOOL : 0、\
  設定、取得、{ 引数 } }

複数の c ファイルをモジュールにコンパイルできます。これは、次のように Makefile xxx-objs の指示を使用して実現できます。

test-objs := ao bo // ac と bc から test.ko にコンパイルします。ターゲット ko ファイルと同じ名前の .o ファイルは存在しないことに注意してください。obj-m += test.o

システム内のモジュール情報は、/sys/module/モジュール名/で確認できます。

1. elfファイルの情報を表示する

readelf test.ko -a

Koファイルの構成

  • 1. elfファイルヘッダー
  • 2. テキストデータ...
  • 3. セクションテーブル
  • 4. 記号表

2. EXPORT_SYMBOL(関数名/変数アドレス) //関数または変数のアドレスをカーネルシンボルテーブルにエクスポートします

EXPORT_SYMBOL_GPL(関数名)
///////////

/proc/kallsyms 現在のシステムのシンボルテーブルを表示する

要約する

以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。これについてもっと知りたい場合は、次のリンクをご覧ください。

以下もご興味があるかもしれません:
  • Linux コードを Windows に移植する簡単な方法
  • Linux カーネル デバイス ドライバーのメモリ管理に関する注意事項
  • Linux カーネル デバイス ドライバー カーネル時間管理に関する注意事項
  • Linux カーネル デバイス ドライバー キャラクタ デバイス ドライバー ノート
  • Linux カーネル デバイス ドライバー仮想ファイル システムに関する注意事項
  • Linux カーネル デバイス ドライバー システム コールに関する注意事項
  • Linux カーネル デバイス ドライバー カーネル デバッグ テクニカル ノート集
  • Linux カーネル デバイス ドライバー カーネル リンク リストの使用上の注意
  • Linux カーネル デバイス ドライバー proc ファイル システム ノート
  • Linux カーネル デバイス ドライバー 高度な文字デバイス ドライバーのメモ
  • Linux カーネル デバイス ドライバー アドレス マッピングに関する注意事項
  • Linux カーネル デバイス ドライバー Linux カーネル 基本メモの概要
  • 新しいカーネルをLinuxシステムに移植する手順

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

>>:  cmd と python での MySQL の一般的な操作についての簡単な説明

推薦する

HTMLの基本タグと構造の詳細な説明

1. HTMLの概要1.HTML: ハイパーテキスト マークアップ言語。これはプログラミング言語では...

Nginx の add_header ディレクティブに注意する必要があるのはなぜですか?

序文ご存知のとおり、nginx 構成ファイルは add_header ディレクティブを使用して応答ヘ...

Ajax responseText による JSON データの解析のケース スタディ

ajax 処理後にサーバーから返される responseText が JSON データであるという問...

シンプルな時計を実装するJavaScript

この記事では、JavaScriptでシンプルな時計を実装するための具体的なコードを参考までに紹介しま...

SqlクエリMySqlデータベーステーブル名と説明テーブルフィールド(列)情報

以下では、SQL クエリ ステートメントを使用して、Mysql データベース内のテーブルのテーブル名...

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

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

Windows に mysql5.7.28 winx64 の解凍バージョンをインストールするための詳細なチュートリアル

目次1. 解凍する2. データフォルダを作成する3. MySQLに環境変数を追加する3.1 コントロ...

JS 日付コントロール My97DatePicker の基本的な使い方

My97DatePicker は非常に柔軟で使いやすい日付コントロールです。使い方はとても簡単です。...

ウェブサイトのAboutページの紹介コンテンツの書き方

公式、電子商取引、ソーシャル ネットワーキング、個人のいずれの Web サイトでも、訪問者に貴重な時...

el-table カプセル化に基づくドラッグ可能な行と列、および選択列コンポーネントの実装

効果環境が必要ビュー要素UIドラッグアンドドロッププラグインSortable.js必要な構成プロパテ...

https ウェブサイトを展開し、Nginx でアドレス書き換えを構成するための詳細な手順

Nginx は、高性能な Web サイト サーバーおよびリバース プロキシ サーバーであり、IMAP...

MySQLのnull値に関する小さな問題

今日、null 値をテストしていたところ、小さな問題が見つかりました。ここに記録しました。以前にも遭...

MySQL 8.0.18 のインストールと設定方法のグラフィック チュートリアル (Linux)

この記事では、Linux MySQL 8.0.18のインストールと設定のグラフィックチュートリアルを...

大規模なMySQLデータベース用のマスタースレーブシステムを構築するアイデアを共有する

今週は戦争のように忙しかったです。他人に操られているような気がします。毎日朝早く出勤して夜遅く帰り、...

SQLクエリの実行順序をゼロから学ぶ

SQL クエリ ステートメントの実行順序は次のとおりです。 (7)選択 (8) DISTINCT &...