Tech と Culture

テクノロジーとカルチャー

デバイスドライバ コンパイル環境

ここから私にとっての一番の難所、デバイスドライバの開発が始まります。
数ヶ月間、うんうんうなりながら必死に参考書を読んだ成果が出せるでしょうか。

まず最初に、コンパイルできる開発環境を作らねばなりません。ただ単に登録してメッセージを出力するデバイスドライバを開発します。
いわゆる、Hello World です。

kurihello1.png

まず、$SNAPGEAR_HOME/linux-2.6.21.1/drivers に、kmjpegというディレクトリを作り、そのディレクトリに kuri_hello.c というファイル名で上記のドライバを作りました。

これをコンパイルするためには、
$SNAPGEAR_HOME/linux-2.6.21.1/drivers/kmjpeg/Makefile
$SNAPGEAR_HOME/linux-2.6.21.1/drivers/kmjpeg/Kconfig
というファイルを二つつくり、
$SNAPGEAR_HOME/linux-2.6.21.1/drivers/Makefile
$SNAPGEAR_HOME/linux-2.6.21.1/drivers/Kconfig
という二つのファイルを修正します。

作ったMakefileの中身は、
kurihello2.png
という単純なものです。
同じく、Kconfigの方は、

kurihello3.png
です。コンフィグレーションする際にチェックボックスが表示されます。
また一つ上のディレクトリのMakefileには以下の一行を追加します。
kurihello4.png
同様に、Kconfigには下のように追加。
kurihello5.png
これだけ修正するだけで、snapgear linuxをコンパイルする際にチェックボックスが出ます。

$SNAPGEAR_HOME で、make xconfigを行います。
最初にLeon構成のコンフィグを行いますが、構成は変更してないのでそのままにします。その際にKernel settingを変えるかというチェックボックスがありますので、そこをチェックして、終了します。
するとカーネル設定のウィンドウが立ち上がります。ここで、新しく作ったドライバのチェックボックスができていますのでチェックして終了。
make dep
make
を行うと、新しいデバイスドライバを組み込んだlinuxイメージファイルができあがります。
私は、デバイスドライバをローダブルモジュールにせず、最初から静的に組み込むようにしています。

そのイメージファイルをFPGAにダウンロードして実行すると、、、、、
出ました! Linuxのブートメッセージの中に "KURI driver loaded" の一行があります。
画面から消えた場合は、dmesgコマンドで再び表示することができます。

これで一応デバイスドライバコンパイル環境ができました。

いちいちシステム全体をコンパイルしていては開発に時間がかかるので単体のコンパイルをできるように参考書をみて行ってみましたが、うまく行きません。ローダブルモジュールじゃないとだめなのかな?ここら辺は要調査ですが、いろいろいじっているうちにLinuxデバイスドライバ開発に詳しくなって分かってくるだろうと予測して、今のところはスルーします。