ホームページ  >  記事  >  システムチュートリアル  >  Linux カーネル モジュールの謎を探る

Linux カーネル モジュールの謎を探る

WBOY
WBOY転載
2024-02-14 17:10:17716ブラウズ

Linux オペレーティング システムでは、カーネルがコア部分であり、コンピュータ ハードウェアとソフトウェア間の相互作用を制御します。カーネル モジュールはカーネルにおける重要な概念であり、実行時に動的にカーネルにロードできるため、カーネルの機能が拡張されます。この記事では、Linux カーネル モジュールがどのように機能し、構成されているかを詳しく説明し、独自のカーネル モジュールを作成する方法を説明します。

Linux カーネルのモジュラー設計

1. Linux カーネル設計: 単一カーネル、モジュール式 (動的ロードおよびアンロード)

(1) Linux: シングルカーネル設計ですが、マイクロカーネル システム設計の利点を最大限に活用し、カーネルにモジュラー メカニズムを導入します。 (2) カーネルのコンポーネント:
kernel: カーネル コア、通常は bzImage 形式で、通常は /boot ディレクトリにあり、vmlinuz-VERSION-release という名前です。 このファイルは管理を容易にするためにメモリにロードされ、/boot の下に配置されるため、システムの起動後は使用されなくなります。 カーネル オブジェクト: カーネル モジュール。通常は /lib/modules/VERSION-release/
に配置されます。 カーネル モジュールとカーネル コアのバージョンは厳密に一致する必要があります;


2. カーネル モジュール: コンパイル選択モード

[ ]: N、この部分はコンパイルしないでください [M]: モジュール形式でコンパイルされたモジュールは、一時的にロードでき、ディスク領域を占有し、カーネル領域を占有しません。 [*]: Y、カーネルコアにコンパイルされ、直接呼び出すことができます


3.ramdisk: 補助ファイル (必須ではありません) は、rootfs が配置されているデバイスをカーネルが直接駆動できるかどうかによって異なります。
ramdisk: ルート ファイル システムの簡易バージョン。利用可能なドライバーは次のとおりです:

ターゲット デバイス ドライバー (SCSI デバイス ドライバーなど);

論理デバイス ドライバー (LVM デバイス ドライバーなど); ファイル システム (xfs ファイル システムなど);

カーネルモジュール情報取得・管理コマンド


1.ldd: バイナリ アプリケーションが依存するライブラリ ファイルを印刷します - 共有ライブラリの依存関係を印刷します

形式: ldd [オプション]…ファイル…

見せる:### \1) 依存ライブラリファイル名 => 依存ライブラリファイルパス(メモリロードシンボリックリンクマッピングポイントに相当)

\2) システムコールライブラリ全体への入り口 リーリー

2.uname: カーネル情報取得 - システム情報の出力


形式: uname [オプション]…

uname -a: すべてのカーネル情報を表示しますLinux カーネル モジュールの謎を探る uname -v: カーネルのコンパイルされたバージョン番号

uname -r: カーネル リリース番号 uname -n: ホスト名



3.lsmod: カーネル モジュールの一覧表示


表示されるカーネルは/proc/modulesからのものですLinux カーネル モジュールの謎を探る モジュール名、サイズ、参照回数、参照内容

4.modinfoコマンド: 指定したモジュールの詳細情報を表示します



形式: modinfo [-F フィールド] [-k カーネル] [モジュール名|ファイル名…] -k kernel: 複数のカーネルが共存する場合に、別のカーネルのモジュール情報を照会します。 -F フィールド: 指定されたフィールドに関する情報のみを表示します;Linux カーネル モジュールの謎を探る -n: ファイルパスを表示;

/lib/modules/

#/* ファイル

# の元のデータを読み取って、関連情報を表示します。 表示内容: ファイル名、プロトコル、説明、作成者、エイリアス、RHEL に適用可能なバージョン番号、依存モジュール、署名単位、署名、暗号化アルゴリズム



Linux カーネル モジュールの謎を探る5.modprobe: モジュールのロードとアンロードを実装し、依存するモジュールもマウントします

Linux カーネル モジュールの謎を探る形式: modprobe [-r] モジュール名

モジュールの動的ロード: modprobe module_name

動的アンインストール: modprobe -r module_name 注: デフォルトでロードされたモジュールはアンインストールしないでください



6.depmod:- modules.dep とマップ ファイルを生成します

Linux カーネル モジュールの謎を探るカーネル モジュール依存関係ファイルおよびシステム情報マッピング ファイルを生成するツール;

7.insmod、rmmod: モジュールのロードとアンロードでモジュールの依存関係を自動的に解決できません

insmod [ファイル名] [モジュールオプション…] ファイル名: モジュール ファイルのファイル パス;

rmmod [モジュール名]

RAMディスクファイルの管理


1.mkinitrd(CentOS 5): 現在使用しているカーネルの ramdisk ファイルを再作成します

# mkinitrd [オプション…] [] –with=: デフォルトのモジュールに加えて、initramfs にロードする必要があるモジュール;

–preload=: initramfs によって提供されるモジュールには、プリロードされたモジュールが必要です。 例: ~]# mkinitrd /boot/initramfs-(uname -r)

2.dracut(CentOS 6/7、5 と互換性あり): – initramfs イメージを生成するための低レベル ツール


# ドラカット [オプション…] [ []] 例: ~]# dracut /boot/initramfs-(uname -r)

カーネル情報出力擬似ファイルシステム

1./proc: カーネルのステータスと統計情報の出力インターフェイス。構成インターフェイス /proc/sys

も提供します。

(1) パラメータ:
読み取り専用: 情報出力; 例: /proc/#/、プロセス関連情報
Linux カーネル モジュールの謎を探る
書き込み可能: ユーザーは「新しい値」を指定して、カーネルの特定の機能または機能を構成できます (/proc/sys/
)。 形式: /proc/sys: net/ipv4/ip_forward は net.ipv4.ip_forward と同等です
Linux カーネル モジュールの謎を探る
(2) パラメータ変更メソッド
\1) sysctl コマンド
/proc/sys ディレクトリ内のパラメータの値を表示または設定するために特に使用されます; sysctl [options] [variable[=value]] 表示: # sysctl -a; # sysctl 変数
値を変更します: # sysctl -w 変数=値
\2) ファイルシステムコマンド (cat、echo)
ビュー: # cat /proc/sys/PATH/TO/SOME_KERNEL_FILE
設定: # echo "VALUE" > /proc/sys/PATH/TO/SOME_KERNEL_FILE
\3) 設定ファイル: /etc/sysctl.conf、/etc/sysctl.d/
.conf
すぐに有効な方法: sysctl -p [/PATH/TO/CONFIG_FILE]

(3)重要なカーネルパラメータ
net.ipv4.ip_forward: コア転送;
vm.drop_caches:
kernel.hostname: ホスト名;
net.ipv4.icmp_echo_ignore_all: すべての ping 操作を無視します;

2./sys ディレクトリ: カーネル 2.6 バージョンの後に導入されました

sys ファイル システム: カーネルによって認識される各ハードウェア デバイスの関連属性情報を出力し、ハードウェア特性に対してカーネルが設定可能なパラメータも備えています。 これらのパラメータを変更すると、ハードウェア デバイスの動作特性をカスタマイズできます;

Linux カーネル モジュールの謎を探る udev: /sys ディレクトリ内のハードウェア デバイス情報を読み取って、オンデマンドで各ハードウェア デバイスのデバイス ファイルを作成します。 udev はユーザー空間プログラムです。特別なツール: devadmin、hotplug、
udev がデバイスのデバイス ファイルを作成すると、その事前定義されたルール ファイルが読み取られます。 通常は /etc/udev/rules.d/ ディレクトリと /usr/lib/udev/rules.d/ ディレクトリにあります。
要約すると、カーネル モジュールは Linux カーネルの非常に重要な部分であり、カーネルに豊富な拡張機能を提供し、ユーザーが特定のハードウェアまたはアプリケーションのシナリオに適応できるように支援します。カーネル モジュールを使用する場合は、カーネルの安定性やセキュリティを損なわないよう注意する必要があり、必要な場合にのみカーネル モジュールを使用および作成することをお勧めします。この記事の内容は、読者が Linux カーネル モジュールをよりよく理解し、適用するのに役立つと信じています。

以上がLinux カーネル モジュールの謎を探るの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はlxlinux.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。