2 ポイント 投稿者 GN⁺ 2024-07-28 | 1件のコメント | WhatsAppで共有

紹介

著者

  • Linux Kernel Module Programming Guide は Ori Pomerantz が Linux v2.2 向けに最初に執筆
  • Peter Jay Salzman が Linux v2.4 向けに更新
  • Michael Burian が Linux v2.6 向けの共同メンテナンスを担当
  • Bob Mottram が Linux v3.8 以降のバージョン向けにサンプルを更新
  • Jim Huang が最近の Linux バージョン(v5.0 以上)向けに更新し、LaTeX ドキュメントを修正

謝辞

  • 複数の貢献者が修正と提案を提供

カーネルモジュールとは?

  • Linux カーネルモジュールは、必要に応じてカーネルへ動的にロードおよびアンロードできるコードセグメント
  • カーネルモジュールは、システムを再起動せずにカーネル機能を拡張
  • モジュールがなければ、新機能を追加するたびにカーネルを再ビルドし、システムを再起動する必要がある

カーネルモジュールパッケージ

  • Ubuntu/Debian: sudo apt-get install build-essential kmod
  • Arch Linux: sudo pacman -S gcc kmod

自分のカーネルにはどのモジュールがあるのか?

  • lsmod コマンドで、現在カーネルにロードされているモジュールを確認可能
  • /proc/modules ファイルでも確認可能

カーネルのダウンロードとコンパイルが必要か

  • このガイドに従うために、カーネルをダウンロードしてコンパイルする必要はない
  • テスト用ディストリビューションでサンプルを実行するのが安全

始める前に

  • モジュールのバージョン管理、X Window System の使用、SecureBoot などの注意事項

ヘッダー

  • カーネルヘッダーファイルのインストールが必要
  • Ubuntu/Debian: sudo apt-get install kmod linux-headers-$(uname -r)
  • Arch Linux: sudo pacman -S linux-headers
  • Fedora: sudo dnf install kernel-devel kernel-headers

サンプル

  • すべてのサンプルはドキュメントの examples サブディレクトリにある

Hello World

最も簡単なモジュール

  • hello-1.c ファイルを作成してコンパイル
  • モジュールのロードおよびアンロード方法を説明

Hello と Goodbye

  • module_init および module_exit マクロの使用例

__init と __exit マクロ

  • __init マクロは初期化関数の完了後にメモリを解放
  • __exit マクロは、モジュールがカーネルに組み込まれている場合に関数を省略

ライセンスとモジュールの文書化

  • MODULE_LICENSE マクロを使用してモジュールのライセンスを指定
  • MODULE_AUTHORMODULE_DESCRIPTION マクロの使用例

コマンドライン引数の受け渡し

  • module_param マクロを使用してモジュールにコマンドライン引数を渡す
  • MODULE_PARM_DESC マクロを使用して引数の説明を追加

複数ファイルにまたがるモジュール

  • 複数のソースファイルに分割されたカーネルモジュールの例

事前コンパイル済みカーネル向けモジュールのビルド

  • 事前コンパイル済みカーネル向けモジュールのビルド方法を説明

GN⁺のまとめ

  • このガイドは Linux カーネルモジュールプログラミングに関する包括的な案内書であり、多様なサンプルとともに、カーネルモジュールの基本概念から高度なトピックまで扱っている
  • カーネルモジュールを使えば、システムを再起動せずにカーネル機能を拡張でき、これは開発者にとって大きな利点となる
  • モジュールのバージョン管理や SecureBoot などの注意事項を十分に理解して従う必要がある
  • 関連プロジェクトには Linux Device Drivers、The Linux Programming Interface などがある

1件のコメント

 
GN⁺ 2024-07-28
Hacker Newsのコメント
  • 「"Detecting button presses"」の例はRPiモジュールをビルドする必要があるため難しい、という意見がある
    • qemuはカーネルハックを体験するのに良い方法だ
  • Linux FoundationはLDD(linux device driver)やLinuxカーネル本の更新を支援すべきだ、という意見がある
  • 22年前に初めて読んだ、というユーザーの体験共有
  • The Linux Memory Manager本の最新アップデートは7月初旬にあり、現在編集中とのこと
  • Linuxカーネルプログラミングに関する一般的な質問、たとえばファイルシステムやメモリ管理のハックに関する質問がある
    • Robert Loveの「Linux Kernel Development」という本があったが、おそらくもう更新されていない
  • カーネルモジュールをすぐにビルドする、詳細で実践的なチュートリアルへの称賛がある
  • 著者がLLMを使ってテキストを書いたり改善したりしたのか、という質問がある