ドライバーを書くことを学ぶためのリソースはありますか?


26

私は一般にハードウェアと組み込みシステムの設計にかなりの経験がありますが、オペレーティングシステム用のドライバーを作成したことはありません。

優れた書籍は私にとって興味深いものですが、オペレーティングシステム用のドライバーを設計および実装するために知っておくべき良いガイドを提供しますが、良いガイド、できればオンラインがあるかどうかを知りたいです。

これにはおそらく人々が私を撃つでしょう、そしてそれがどのOSに基づいていても良いガイドを見たいと思いますが、私はほとんどの人が事実であるため、ウィンドウベースのガイドを見たいです私は窓がある製品を売るでしょう。

これを明確にするために追加できる追加情報があるかどうかをお知らせください。


1
素晴らしい質問です。私もこれに興味があります。
ヘッジホッグ氏

最も広い答えを受け入れました。各OSの情報を取得するために、答えが気に入りました。Jobyの答えは、Linuxに特化した優れたものでした。決めるのに苦労しました。
コルトゥク

回答:


10

実際のOSドライバーを書いた私の最近の経験のほとんどはLinuxであり、最良のリファレンスIMOは、すでに述べたJonathan Corbet、Alessandro Rubini、およびGreg Kroah-Hartman(2005)によるLinux Device Drivers、第3版です。これは、上で利用可能であるアマゾンSafariの帳簿上のラインとしても、そして無料でダウンロード

同じテーマに関する書籍がさらに2つあります。SreekrishnanVenkateswaranによるEssential Linux Device Drivers(2008)(Safari Books Onlineでも入手可能)およびLinux Device Driversの作成:ジェリークーパースタイン博士(2009年)による演習ガイド(第3巻)です。

Windowsデバイスドライバーの場合、この件に関する最新の書籍(2週間前に発行)は、Ronald D. Reeves博士によるWindows 7デバイスドライバーのようです。(2010)。Safari Books Onlineでも入手できます。

Windows XPをカバーする古い本は、次のとおりです。MicrosoftWindowsドライバーモデルのプログラミング、第2版、Walter Oney(2002)。Safari Books Onlineでも入手できます。

絶版のように見えますが、Safari Books Onlineで入手できる別の本は、Penny OrwickとGuy Smith(2007)によるWindows Driver Foundationによるドライバーの開発です。Windows Vistaをカバーすると思います。

最後に、Microsoftはドライバー開発について議論している多くのブログなどへのポインターを持っています。


おかげで、投稿に「Linuxデバイスドライバー」へのリンクも含めることをお勧めします。そうでなければ、非常に徹底的です。
Kortuk

11

優れたドライバーは、ハードウェアの機能をカプセル化し、OS /アプリケーションがこれらを自然な方法で利用できるようにします。

これをどのように行うのが最善かは、ターゲットとするオペレーティングシステムと、ドライバーのハードウェアの種類に大きく依存します。

私の経験はすべてLinuxと小さなカスタムリアルタイムOSenです。

Linuxの場合、Linuxデバイスドライバーを読むことをお勧めします。Linuxドライバーのさまざまなフレーバーと、オペレーティングシステムが提供する抽象化の概要を説明しています。

データが連続して読み取られるシリアルポートなどのデバイスは、通常、読み取り用のアプリケーションのユーザー空間にデバイスノードを持つキャラクターデバイスドライバーによって処理されます。catこれらから読むことができます。

フラッシュストレージやハードディスクなどのランダムアクセスデバイスは、ブロックデバイスによって処理されます。ddこれらにアクセスできます。良い例として、Linux MTDシステムをご覧ください

ハードウェアを低レベルで操作するドライバーは、ほぼ確実にカーネルスペースに実装する必要があります。ランタイムのロード可能なカーネルモジュールを作成するか、Linuxカーネルに静的にコードを配置することを選択できます。

USBのような既存の汎用ドライバーの上に構築されるドライバーは、ユーザースペースに書き込まれる場合があります。たとえば、libusbを使用します。


4
Linux Device Driversは良い本です。残念ながら、これらはOS固有のものです。Linuxはおそらくソースツリーに非常に多くのドライバーが参照用に既に存在するため、書くのが最も簡単でしょう。マイクロプロセッサの周辺機器を駆動するための埋め込みコードを記述している場合は、おそらくデバイスドライバーの基礎を十分に理解しているはずです。
10

ええ、コメントを削除しています。私の悪い。
-Kortuk

1
言及されているように、実際のハードウェアを制御するドライバーの根性は、OSの有無にかかわらず同じです。ドライバーを記述する際の主な違いは、1)インターフェイスがOSの標準モデル(たとえば、オープン、クローズ、読み取り、書き込み、ioctl)に収まる必要があること、および2)ドライバーをインストールしてアクティブにする方法です。
tcrosley

1
@tcrosley、それらの詳細について多くの情報を持っているなら、私はそれについての答えを見たいです。
Kortuk

3

この問題に関する経験はありませんが、2セントを差し上げます。

ここから開始できますhttp://www.osr.com/index.htmlまたはここhttps://www.osronline.com/index.cfm

ここブラジルでは、この問題に関する良いブログがあります。ポルトガル語と英語で書かれています。残念ながらほとんどの記事はポルトガル語です。

このブログの本に関するポルトガル語の投稿があります:http : //translate.google.com.br/translate?hl=pt-BR&ie=UTF-8&sl=pt&tl=en&u=http : //driverentry.com.br/ blog /%3Fp%3D825&twu = 1

少し助けてくれたらいいな


これは、「ドライバーを書くことを学ぶのに間に合うようにポルトガル語をどこでオンラインで学べますか?」手伝ってくれてありがとう。
コルトゥク

2
ポルトガル語を学ぶことを心配しないでください。私が合格したドライブ開発に関するリンクは英語です。DriveEntryも英語で書かれています。残念ながら、本に関する投稿はポルトガル語ですが、本は英語です。そして最も重要なのは本であり、投稿ではありません。
ダニエルグリロ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.