Linuxでのドライバーの作成に関する本を読んでいます。Linuxの経験はあまりありません。以前にかなりの数のディストリビューションをインストールしましたが、メインのオペレーティングシステムとして常にWindowsを使用しています。
私はC
を知っていますが、私は主にC#
プログラマーです。
私は(楽しみのために)ドライバープログラミングを学びたいと思っています。そしてそれがLinuxについていくつかのことを教えてくれ、「それに入る」ことを願っています。
私の最初のハードルは、標準の2.6.x
カーネルを備えたディストリビューションを見つけることです。見つけようとしましたが、すべて3.x
を過ぎています。この種のタスクに適したものを知っている人はいますか?
また、この本には、kernel.org
から標準カーネルを取得して、ソースツリーを構築する必要があると書かれています。それが何を意味するのかわかりません。
あなたはkernel.org
を知っています、そしてこれはあなたが古いか新しいかからバニラカーネルを得ることができるところです。最新のカーネルの場合は、gitを使用することもできます。
カーネルを入手したら、「ソースツリー」を作成するには、それを解凍するだけです。たとえば、.bz2
アーカイブをダウンロードした場合は、コマンドtar -jxvf <kernel version>.bz2
を使用して解凍できます。従来、このツリーは/usr/src
にあり、シンボリックリンク/usr/src/linux
は、使用している特定のカーネルディレクトリを指すように作成されています。
ソースツリーを解凍したら、それをビルドするには、最初にそれを構成する必要があります。 make menuconfig
(ncursesベース)またはmake xconfig
(Xベース)。 .configを別のカーネルバージョンから移行する場合は、他にもいくつかのconfigmakeターゲットがあります。最後に、カーネルとそのモジュールをビルドするには、make
を使用します。カーネルをインストールして起動するには、モジュールにmake modules_install
を使用し、ブートローダーがカーネルを期待する場所にArch/<your Arch>/boot/bzImage
をコピーして、そのカーネルを起動するように構成します。カーネルに対してビルドしたモジュールをロードする予定がある場合は、カーネルを起動する必要があります。
そうは言っても、モジュールの構築を実験したいだけの場合は、上記のプロセスを実行するのではなく、現在のディストリビューションカーネル(パッケージがあります)からソースを取得し、そのカーネルに対してモジュールを構築します。難しいことではありませんが、カーネルを初めて使用する場合は、少し圧倒されるかもしれません。
カーネルドライバーで遊んでからしばらく経ちましたが、設定したものは次のとおりです。
初期の開発とテストは、仮想マシン(VM)で実行され、動作中のドライバーのみがターゲット開発マシンにコピーされます。特にVMのカーネルに壊れている可能性のあるドライバーを挿入する前に、VMのスナップショットを定期的に作成します。そうすれば、開発システムの動作状態に簡単にロールバックできます。実際のハードウェアでドライバーをテストする必要がない場合は、2番目のパーティションはまったく必要ありません。
あなたの場合、私は buntu 10.04 のようなものをVM(および2番目のパーティション)にインストールします。2.6カーネルが付属しており、すべてがそこにあり、一緒に収まります( 2.6カーネルバージョンのその他のディストリビューション)。カーネルソースと開発ツールをダウンロードするだけです。
これにより、kernel.orgからチェックアウトされた新しいカーネルを最初から開始するよりも早く起動して実行できるようになると思います。少なくとも私のSuSE6日で戻ってきました。
私のコメントによると、以前にこれと同様の質問を見たので、私は 正規バージョン を書くことにしました。これは、カーネルの構成、構築、およびインストールを開始するためのものだと思います。しかし、ここで私はあなたのケースに特有のいくつかのポイントに対処したいと思いました:
私は(楽しみのために)ドライバープログラミングを学びたいと思っています。そしてそれがLinuxについてのいくつかのことを教えてくれ、私が「それに入る」のに役立つことを願っています。
これは正当な理由ではないと思います。 Cでの開発にプラットフォームを使用するユーザーを含め、長期のパワーユーザーでさえ99.9%以上がドライバープログラミングに関与することはありません。類推すると、これまでMS Windowsを使用したことがない人が、「まあ、今インストールされているので、Windowsについて学ぶ良い方法は、Windows用のデバイスドライバーを書き始めることだと思いました...」、あなたはどう思いますか?
最初に、userspaceでプラットフォーム固有のこと(ファイルシステムやネットワークなど)を実行するCをいじり始めます。
私の最初のハードルは、標準の2.6.xカーネルを備えたディストリビューションを見つけることです。私は1つを見つけようとしましたが、それらはすべて3.xを過ぎています。
あなたはそれをする必要はありません。ほとんどの場合、2.6カーネルは現在のディストリビューションでも正常に動作します。もちろん、試すのは簡単です。しかし、それを超えて、LDD3(O'Reillyの本)を使用していることが理由である場合、3.xカーネルはそのほとんどまたはすべてと互換性があります。 3.xカーネルのドライバーコードの多く(おそらくほとんど)は2.6から変更されていない状態で存在し、カーネル開発者はこの下位互換性を維持することを優先すると確信しています。バニラソースは1600万LOCのようなものです。すべてを常に書き直すことはできません。
だから先に進んで、あなたが望むどんなバージョンでも試してみてください。