Linux

Linuxのカーネルモジュールを作って遊んでみる

今回はLinuxのカーネルモジュール(例えばデバイスドライバ)のプログラミングにトライします。

まず今回はHello World的プログラムを作り、次回は/procファイルシステムへのアクセスなど色々試して遊んでみたいと思います。

環境はLinux(CentOS 7)(64bit)です。

カーネルモジュールとは

カーネル・モジュールはLinuxのユーザー空間ではなくカーネル空間で動作するプログラムの事です。

例としてデバイスドライバと呼ばれるものはカーネルモジュールの1つのです。

ユーザー空間のアプリケーションのプログラミングとは少々お作法が事なります。

【参考】

まずはHello World

どんなプログラミングでも最初はやはりHello Worldを試すのが一般的ですので今回も例にもれずやっていきます。

事前にカーネルモジュールのプログラミングに必要なものをインストールします。

準備が整ったらdmesgにHello Worldのログを出力するmymod.cとビルドするためのMakefileを作ります。

mymod.c

Makefile

makeを実行するとビルドが開始されます。ビルド後の出来上がった*.koのファイルがカーネルモジュールです。

実行結果

カーネルモジュールが出来上がったので実際にロードしてみます。

insmodコマンドでカーネルにモジュールをロード、lsmodでロード中のモジュールを確認できます。

カーネルモジュールのロードとdmesgにHello Worldが出力されていることが確認できました。

今度はrmmodでモジュールをアンロードしてみます。

こちらも期待通りdmesgにメッセージが出力されていますね。

次回はもう少し実用的なプログラムを作ってみます。