Linuxデバイスドライバを作ってみようかな、と思い立って、Free Software Magazineのチュートリアルをウォークスルーしてみる。
曰く、まずは空のソースコードをコンパイルしてカーネルモジュールを作り、insmodしてみましょうと。
んで、カーネルモジュールのコンパイル時に、そのロード先と同じカーネルが必要とのこと。今回はクロスコンパイルではなくホストシステムをそのままターゲットにするので、ホストと同じカーネルのソースが必要になる。
ホストのLinuxバージョンは
とりあえずKernel/Compile - Community Ubuntu Documentationを参考に
ツール類のインストール
カーネル取得
終わるとカレントディレクトリの下にカーネルのディレクトリができるので、入る。
んで現システムで使われているconfigを持ってきてoldconfigした後、make。
ひとまずこれでビルドOK
ということで、カーネルモジュールを作ってみる。
# 移動、ソース作成
しかし
とのこと。
enakai00さんの記事によれば、vermagicの不整合がまずいらしい。
modinfoコマンドでカーネルモジュールを調べてみる。
う~ん、vermagicがちょいと新しくないか?
いまいちど、カーネルのディレクトリに行って、バージョンを確認してみる。手順はここのQA参考。
あれ、思ってたのと違うお。。
Makefileを見てみると、
うん、やっぱり変だな。
クレバーじゃないと思いつつ、カーネルのMakefileのバージョン指定を無理やり変えてビルドしてみる。
で、カーネルモジュールのディレクトリに移動してもう一度ビルド。それからmodinfoしてみる。
ということで、vermagicはそろったものの、insmodしてみると
うーむ、以前状況は変わらず。
そんで悩んで行き着いたのがStack OverflowのこのQA。なんでも、
で行けるっぽい。調べてみると、このbuildってのは/usr/src/linux-headers-$(uname -r)へのシンボリックリンクになっている。linux-headersがインストールしてあればOKなんですな。
成功したぽい。
0 件のコメント:
コメントを投稿