Linux カーネル デバイス ドライバー Linux カーネル 基本メモの概要

Linux カーネル デバイス ドライバー Linux カーネル 基本メモの概要

1. Linuxカーネルドライバモジュールの仕組み

静的ロードでは、ドライバモジュールをカーネルにコンパイルし、カーネルの起動時にロードします。動的ロードでは、ドライバモジュールを ko としてコンパイルし、カーネルの起動時にロードします。

2. カーネルドライバを書く

#include <linux/module.h>
#include <linux/init.h>
静的 int __init test_init(void) 
{
return 0; // 成功を示すには 0 を返し、モジュールのロードを終了するには負の数を返します}
//__init カーネルがドライバーを初期化した後、この関数のコード命令空間を解放します static void __exit test_exit(void)
{
....
}
//__exit は、この関数がドライバーがアンインストールされたときにのみ使用され、使用後に解放されることを指定します。module_init(test_init); //モジュール初期化関数として test_init を指定します。module_exit(test_exit); //モジュール終了アンインストール関数として test_exit を指定します。MODULE_LICENSE("GPL"); //サポートされているプロトコルを指定します。MODULE_AUTHOR("Author");
MODULE_DESCRIPTION("説明");
MODULE_VERSION("バージョン");
#define __init __section(.init.text)
#define __initdata __section(.init.data)
char __initdata buf[] = "hello world";
#define __exitdata __section(.exit.data)
#define __exit __section(.exit.text)
/////////////

モジュール情報を表示するにはmodinfo test.ko

cat /proc/modules現在のシステムの動的ロードモジュールを表示します。これはlsmod
と同等です。 lsmod

テスト 1768 0 - ライブ 0xbf03c000

モジュール名、使用メモリサイズ、呼び出し回数、有効性、モジュールが配置されているメモリアドレス

すべてのモジュールを表示するにはls /sys/moduleします。

3. ドライバモジュールのMakefile

  • obj-m += test.o //ソースコードファイルはtest.cです
  • モジュール:make -C カーネルソースディレクトリ M = ドライバコードディレクトリ モジュール
  • モジュールのインストール:make -C カーネルソースディレクトリ M=ドライバコードディレクトリ modules_install INSTALL_MOD_PATH=/ファイルシステムパス
  • clean:make -C カーネルソースディレクトリ M=ドライバコードディレクトリ モジュールクリーン

4. ドライバーの出力メッセージを確認する

/var/log/メッセージを調べる
/var/log/メッセージを追跡する

5. Printk レベル制御

/usr/src/kernels/2.6.18-194.el5-i686/include/linux/kernel.h

<linux/カーネル.h>
#define KERN_EMERG "<0>" /* システムは使用不可です */
#define KERN_ALERT "<1>" /* すぐにアクションを実行する必要があります */
#define KERN_CRIT "<2>" /* クリティカルコンディション */
#define KERN_ERR "<3>" /* エラー条件 */
#define KERN_WARNING "<4>" /* 警告条件​​ */
#define KERN_NOTICE "<5>" /* 正常だが重要な状態 */
#define KERN_INFO "<6>" /* 情報 */
#define KERN_DEBUG "<7>" /* デバッグレベルのメッセージ */

デフォルトのレベルはKERN_WARNING "<4>"です

使用方法: printk(KERN_INFO"內容");

現在のカーネルの出力レベルを表示する cat /proc/sys/kernel/printk
7 4 1 7
7:コンソールログレベル
4:デフォルトメッセージログレベル
1:最小コンソールログレベル
7:デフォルトのコンソールログレベル

printk関数で使用されるレベルが現在のconsole_loglevelレベルより低い場合は出力できますが、そうでない場合は出力されません。

出力レベルを変更するecho 8 > /proc/sys/kernel/printk

要約する

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

以下もご興味があるかもしれません:
  • Linuxカーネルの動作原理を示す図
  • LED を使って Linux カーネルを使い始める方法を探る

<<:  ログインインターセプションを実装するためのVueルーティング

>>:  Linux システムで MySQL データベースにリモート接続する方法のチュートリアル

推薦する

Angular CLI リリース パスの構成項目の簡単な分析

序文プロジェクトのリリースでは、常に特定の状況に応じたパッケージ化が必要です。Angular CLI...

CSS3 天子グリッドリストのスタイルの書き方

多くのプロジェクトでは、中央に灰色の分割線があり、両側に分割線がないグリッド表示の機能を実装する必要...

MySQL の自動増分主キーに関する詳細な説明

目次特徴保存戦略自己増加の決定自動増分値の変更実行プロセス問題点自動増分ロックロック戦略バッチ挿入の...

JavaScript ツールチェーンの不完全なガイド

目次概要静的型チェックコードスタイルチェック(Linter)パッケージマネージャーモジュールローダー...

SpringBoot アプリケーションの Docker デプロイメントの実装手順

目次序文DockerファイルDockerfile とは何ですか? Dockerfile 構文Spri...

Nginxの書き換えモジュールの詳細な説明

書き換えモジュールは ngx_http_rewrite_module モジュールです。その主な機能は...

CentOS はローカル yum ソースを使用して LAMP 環境を構築するグラフィック チュートリアル

この記事では、ローカル yum ソースを使用して CentOS 上に LAMP 環境を構築する方法に...

モバイルデバイスでのフリーズ問題に対する CSS3 ソリューション (アニメーション パフォーマンスの最適化)

1. CSS、jQuery、Canvasを使用してアニメーションを作成する1. キャンバス利点: ...

私が遭遇したIE8の互換性に関する注意事項

1. IE8 の getElementById は id のみをサポートし、name はサポートしま...

MySQLステートメントを監視する方法の詳細な説明

クイックリーディングSQL ステートメントを監視する必要があるのはなぜか、監視方法と監視手段について...

Linux gzip コマンドのファイル圧縮実装原理とコード例

gzip は、Linux システムでファイルの圧縮と解凍によく使用されるコマンドです。このコマンドで...

WindowsシステムでPhPStudy MySQLの起動に失敗する問題を解決する

エラーを報告するApache\Nginx サービスは正常に起動しましたが、MySQL は起動に失敗し...

MySQLの大文字と小文字の区別によって発生する問題の分析

MYSQLは大文字と小文字を区別します言葉を見れば信じられます。タイトルを見れば内容がわかります。 ...

CSSアニメーション属性キーフレームの詳細な説明

コラムを更新してからどれくらい経ったでしょうか?半年ですか?今年の後半は、まさに離陸、つまり文字通り...

Xtrabackup を使用して MySQL をバックアップおよび復元する方法

目次1. バックアップ1.1 万全の準備1.2 追加の準備2 バックアップとリカバリ2.1 データの...