2

私は次のことを基本的に理解しています。

  • ハードウェアデバイスのデータシートの読み方
  • ハードウェアデバイスが理論的にどのように機能するか
  • デバイスドライバは何をしますか
  • Cプログラミングの一般的な概念
  • Linux OS

特定のデバイスドライバーのすべてのコードを理解でき、上記の助けを借りて(ソースコードを見ずに)最終的に同じコードを最初から作成できれば、非常に優れたものを得ることができると常に信じていました。 C言語と、デバイスドライバーがどのように機能してOSと対話するかを理解している。私にとって、これは私のキャリアにおける主要なマイルストーンのようなものです。

そのため、ここ数年、私は常にデバイスドライバーの書き方を学ぶことを考えてきました(主にLinux OS用)。私はいつも(少なくとも6〜7回は)熱意を持って始め、いくつかの優れたオンラインリソースを選び、それらを読みます。次に、Linuxカーネルから既存のドライバーコード(たとえば、イーサネットドライバーコード)を取得し、データシートを取得してドライバーコードの読み取りを開始しますが、数行を読んだ後、混乱し、最終的にはフォローできなかったために諦めます。残りのコード。

私の質問:そのようなチュートリアルはあまりにも良いので真実ではありませんが、それでも質問したいです-Linuxデバイスドライバーがデータシートへの詳細な参照からどのように書かれたか、そして既存の行がどのように書かれたかを説明する良いリソースを誰かが知っていますか?それに関連するコードと、それが存在する理由とそれが正確に何をするのかについて、コードの各関数/ブロックを説明します。

4

2 に答える 2

2

Linux デバイス ドライバーの開発に関する優れた書籍が少なくとも 2 冊あります。

私は個人的に LDD3 を読んで参考にしていますが、他の開発者によると 2 つ目も非常に優れています。

LDD3 を読むと、すべてが詳細に説明され、ステップ 1 から最後までの開発プロセスに続くコード スニペットが含まれます。ただし、この本には完全なコード自体は含まれていません (これは良いことです。そうしないと、肥大化してしまいます)。実際にダウンロードしてサンプルを確認することをお勧めします。

それは間違いなくあなたを始めるだけでなく、あらゆるデバイスを書くことができるでしょう. それは、イーサネット ネットワーク ドライバー、特殊なユーザー アプリケーション用の洗練されたカーネル拡張、またはユーザー空間にマップされた DMA バッファーを備えた本格的なカーネル バイパス戦略などです。

ただし、実際のデバイス ドライバーの完全な手順を順を追って説明することはおそらくできません。これは、いくつかの理由によるものです。そのような本を書くのは、ドライバー自体を書くよりもはるかに困難です。非常にデバイス固有であるため、うまく売れない可能性があります。したがって、一部のデバイスの DMA エンジンやイーサネット LSO とうまく連携するなどの詳細については、これに関する経験があるか、既存のデバイスとそのドライバーを学習するか、少なくとも特定の質問 (ここまたは他の場所) を行う必要があります。 .

その点に到達したときの最も簡単な方法は、まさにそれを行うチームに参加し、人々と緊密に協力し、より多くの経験を積み続けることだと思います. いつの日か、座って 10G NIC を棚から取り出し、座って工業用グレードのドライバーを作成できるようになるまで (まあ、または興味が変わるまで)。

また、いくつかのオープン ソース プロジェクトを試すこともできます。たとえば、PF_RING DNAや類似のプロジェクトを見てみましょう。既存のドライバを使用して、PF_RING インフラストラクチャで動作させるためにいくつかの調整を行う必要があるため、非常に興味深いものです。ただし、私の個人的な意見では、オープンソース プロジェクトは、実際の経験を教えたり、有用な実世界での経験を得るのに役立つという点で、通常は少し効果的ではありません。

だから... やってみよう!

于 2013-03-05T19:23:48.727 に答える
0

私は以前と同じ経験をしていますが、今はカーネルの専門家であるとは言えません。しかし、私はあなたと何かを共有することができます。

(1)1つのLinuxデバイスドライバーの研究/開発を開始する前に、特定のLinuxデバイスドライバーに関連するLinuxカーネルの一般的なAPIに精通している必要があります。ご存知のように、さまざまな種類のデバイスドライバーは、実装がまったく異なり、さまざまなAPIを使用しています。

(2)カーネルの実装とデバイスドライバーの開発に精通するための良い本があります。例:Understanding.the.Linux.Kernel.3rd.Edition; Linux.Kernel.Development.3rd.Edition; Linux.Device.Driver.Development.3rd.Edition;

(3)最後の提案は、あなたの研究があなたにいくらかのプレッシャーを与え、あなたを毎日前進させるプロジェクトに関連している方が良いということです。

于 2013-03-05T05:50:40.527 に答える