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

推薦する

Vue のデータ応答性に関する詳細な理解

目次1. ES 構文のゲッターとセッター2. ES構文でのdefineProperty 3. Vue...

Vue のスロットリング関数使用時の落とし穴ガイド

序文一般的なビジネス シナリオでは、検索ボックスへの入力が完了した後、検索データを取得するために関連...

CSS ボックスモデル内のパディングと略語の詳細な説明

上図のように、パディング値は時計回り(右上、右下)の複合属性であり、パディングの内側の余白がボックス...

CSS で順序付きリスト項目と順序なしリスト項目のスタイルを設定する方法

順序なしリストでは、順序なしリストのシンボルは各リストの前に表示されるドットです。順序付きリスト o...

CentOS 7 で MySQL 接続数が 214 に制限される問題の解決方法

問題を見つける最近、プロジェクトで問題が発生しました。接続が多すぎるため、「接続が多すぎます」という...

Vue+Openlayerはグラフィックスのドラッグと回転変形効果を実現します

目次序文関連資料成果を達成する実装手順序文Openlayer には独自の拡張プラグイン ol-ext...

カルーセル効果を実現するjQueryプラグイン

毎日jQueryプラグイン - カルーセルチャートを実装するためのjQueryプラグイン。参考までに...

ユーザーエクスペリエンスの76の経験ポイントの要約

ウェブサイト体験の分類1. 感覚体験:快適性を重視した視聴覚体験をユーザーに提供します。 2. イン...

JS 面接の質問: forEach はループから抜け出すことができますか?

この質問をされたとき、私は無知で頭が真っ白になりました。もちろん、正しく答えられませんでした。私はず...

Web データ ストレージ: Cookie、UserData、SessionStorage、WebSqlDatabase

クッキーこれはクライアント ブラウザの状態を保存するための標準的な方法です。Cookie はブラウザ...

MySQL 5.7.18 winx64 のインストールと設定方法のグラフィックチュートリアル

圧縮パッケージのインストールは、mysql-5.7 以降、大幅に変更されました。この記事では、mys...

React Routerの歴史について簡単に説明します

React Router を理解したいなら、まず歴史を理解する必要があります。より具体的には、Rea...

MySQL 8.0.21 無料インストール版 設定方法 グラフィックチュートリアル

MySQLをインストールする6つの手順(インストールパッケージのみがインストール場所を選択できます)...

MySQL統計の概要

MySQL は、SQL 解析とクエリ最適化のプロセスを通じて SQL を実行します。パーサーは SQ...

Ubuntu 16.04 で PostgreSQL の起動を設定する方法

PostgreSQL はコンパイルされインストールされるため、起動時に起動するように設定する必要があ...