移植性の高いデバイスドライバの書き方
この記事は、Linux Journal Embeddedに掲載された Writing Portable Device Drivers を元に、原著者であるGreg Kroah-Hartmanが このサイトに投稿したものです。 このサイトの他のページ同様、ご自由にこのページを更新してください。
Linuxカーネルデバイスドライバのほとんどが、一種類以上のプロセッサ上で動作 します。これはデバイスドライバの開発者がいくつかのルールを忠実に守るから こそできることです。そのルールには、適切な型の変数を使用すること、特定の メモリページサイズに依存しないこと、外部とのデータのやりとりでエンディアン の問題に気を付けること、適切にデータのアラインメントを合わせること、そして 適切なインタフェイスを介してデバイスメモリへアクセスすることが含まれています。 以下にそのルールの一覧を示します。
InternalKernelDataTypes (カーネル内で使用されるデータ型)
MemoryIssues (メモリに関する問題)
EndianIssues (エンディアンに関する問題)
DataAlignment (データアラインメント)
IoMemoryAccess (I/Oメモリアクセス)
AccessingPciMemory (PCIメモリアクセス)
Linuxカーネルデバイスドライバを新規に作成するときや、既存のデバイスドライバを 修正するときにこれらのルールに従うことで、さまざまなプロセッサ上でうまく動作 するコードを書くことができるでしょう。これらのルールは、ひとつのプラットフォーム 上だけで動作するドライバをデバッグするときにも役立ちます。
覚えておきたいのは、さまざまなプラットフォーム上で動作確認された既存の カーネルドライバがもっとも重要な情報源だということです。 Linuxが優れているのは、ソースコードがオープンにされ、誰でもアクセスできる ことで、意欲的なドライバ開発者に強力な学習ツールを与えているところです。