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

推薦する

ウェブサイトデザインにおいて非常に重要な概念であるdiv+floatの分析

ウェブサイトの構築では、HTML と CSS に関するさまざまな問題に常に遭遇します。ウェブサイト ...

いくつかのMySQL更新操作のケース分析

目次ケーススタディアカウント残高を更新する直接更新楽観的ロック方式ロックフリーソリューションキューイ...

単純なCSSの詳細に惚れ込むと、重要ではないものの、効率性が向上する可能性がある

CSS の将来は非常に楽しみです。一方では、まったく新しいページ レイアウト方法であり、他方では、ク...

Vue+element ui はアンカーの配置を実現します

この記事では、アンカー配置を実現するためのVue +要素UIの具体的なコードを例として紹介します。具...

TypeScript インターフェース定義ケースチュートリアル

インターフェースの役割:インターフェース (英語: interface) の機能は、簡単に言えば、コ...

Linuxで同一ファイルを見つける方法

コンピュータを使用すると、システム内に大量のゴミが生成されます。最も一般的なケースは、同じファイルが...

MySQLで置換関数を実装するためのいくつかの実用的なシナリオ

REPLACE構文REPLACE(String,from_str,to_str)つまり、String...

Vue はフォームデータ検証のサンプルコードを実装します

el-form フォームにルールを追加します。データにルールを定義する定義されたルールをel-for...

MySQL マスタースレーブレプリケーションの原理からインストールと設定までを包括的に解説します。

マスタースレーブレプリケーションがなぜ必要なのでしょうか? 1. 複雑な業務システムでは、SQL 文...

HTML で JavaScript を使用する

<script> タグHTML5では、スクリプトには次の属性があります: async、d...

携帯電話に GreasyFork js スクリプトをインストールするチュートリアル

目次序文1. Iceraven ブラウザ (Firefox) (Android) 2. (アンドロイ...

CentOS7環境でDockerを使ってPHP動作環境を構築する手順を詳しく解説

関連記事: CentOS7でyumを使用してDockerをインストールするDockerを使ってWin...

MySQL Workbench の使い方チュートリアルの詳しい説明

目次(I) Workbenchを使用してデータベースを操作する①データベースを作成する② データベー...

Centos7 に yum を使用して MySQL をインストールし、リモート接続を実現する方法

Centos7はyumを使用してMySQLをインストールし、リモート接続を実現する方法です。MySQ...

Docker ファイルの保存パス、ポート マッピング操作モードの変更

コンテナの起動コマンドを取得する方法コンテナはすでに作成されていますが、その起動パラメータ(データが...