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 データベースにリモート接続する方法のチュートリアル

推薦する

MySQL分離の使用手順を読む

現在のトランザクションはどの履歴バージョンを読み取ることができますか?読み取りビューは、トランザクシ...

W3C チュートリアル (11): W3C DOM アクティビティ

ドキュメント オブジェクト モデル (DOM) は、プログラムがドキュメントのコンテンツ、構造、およ...

Vueブラウザが監視を再開するための具体的な手順

序文ページを共有するときに、ブラウザの戻るボタンをクリックしてプロジェクトのホームページに戻り、訪問...

JavaScript 配列の include と Reduce の基本的な使用法

目次序文配列.プロトタイプ.includes文法パラメータ戻り値例配列プロトタイプの削減文法パラメー...

HTML ページ出力で従うべきいくつかの原則の要約

1. DOCTYPE は必須です。ブラウザは宣言した DOCTYPE に基づいてページのレンダリング...

MySQLとNavicatプレミアムのインストールと設定の詳細な手順

前提条件: Mac、zsh がインストールされ、bash のときに mysql がダウンロードされ、...

js 配列から重複を削除する 11 の方法

実際の業務や面接では、「配列の重複排除」の問題によく遭遇します。以下は、js を使用して実装された配...

CSS で子 div の高さを親コンテナの残りのスペースに合わせる方法

1. フローティング方式を使用する効果画像: コードは次のとおりです: (.content の高さは...

AIX マウント NFS の書き込み効率が低い場合の解決策

NFSが提供するサービスマウント: サーバー上で /usr/sbin/rpc.mountd サーボ ...

Nodejs 組み込み暗号化モジュールを使用してピアツーピアの暗号化と復号化を実現する詳細な説明

暗号化と復号化は、通信のセキュリティを確保するための重要な手段です。すでに多くの暗号化アルゴリズムが...

Dockerコンテナはルーティングを介して直接通信し、ネットワーク通信を実現します。

概要Docker 自体の現在のデフォルト ネットワークについては、単一ホスト上の異なる Docker...

HTML ページジャンプコード

次のコードを index.html などのデフォルトのホームページ ファイルとして保存し、ルート デ...

Linux で MySQL パスワードを忘れた場合の解決策

問題は次のとおりです。mysql -uroot -p コマンドを入力しましたが、パスワードを忘れてし...

MySql 5.6.36 64 ビット グリーン バージョンのインストール グラフィック チュートリアル

MySQL のインストールについてはインターネット上に多くの記事がありますが、今日ノート PC にイ...

Vue はネストされたルーティングメソッドの例を実装します

1. ネストされたルーティングはサブルーティングとも呼ばれます。実際のアプリケーションでは、通常、ネ...