有用于学习编写驱动程序的资源吗?


26

一般而言,我在设计硬件和嵌入式系统方面具有相当丰富的经验,但是我从未编写过用于操作系统的驱动程序。

我想知道是否有任何好的指南,最好是在线指南,尽管我会感兴趣,但有很多好书,这将为我设计和实现操作系统驱动程序所需的知识提供一个良好的开端。

这可能会让人们朝我开枪,尽管无论基于什么操作系统,我都希望看到一个好的指南,但我还是希望看到一个基于Windows的指南,这主要是因为大多数人我会卖一个有窗户的产品。

请让我知道是否有任何我可以添加的其他信息,以使其更加清楚。


1
很好的问题,我也对此感兴趣。
刺猬先生

我接受了最广泛的答案。为了获得每个操作系统的信息,我喜欢这个答案。Joby对于Linux的回答非常出色。我很难下定决心。
Kortuk

Answers:


10

我最近在编写实际的操作系统驱动程序方面的大部分经验是在Linux上进行的,最好的参考IMO是Jonathan Corbet,Alessandro Rubini和Greg Kroah-Hartman(2005)撰写的第三版Linux设备驱动程序。它可以在AmazonSafari联机丛书上获得,也可以免费下载

关于同一主题的另外两本书是Sreekrishnan Venkateswaran撰写的Essential Linux Device Drivers(2008)(也可以在Safari Books Online上找到)和Jerry Cooperstein博士(2009年)撰写Linux设备驱动程序:练习指南(第3卷)。

对于Windows设备驱动程序,有关该主题的最新书籍(两周前出版)似乎是Ronald D. Reeves,Ph.D. 撰写的Windows 7 Device Driver。(2010)。Safari联机丛书中也提供了该功能。

一本涵盖Windows XP的旧书是:Walter Oney(2002)对Microsoft Windows Driver Model,第二版进行编程Safari联机丛书中也提供了该功能。

Penny Orwick和Guy Smith(2007)用Windows Driver Foundation开发驱动程序是另一本书,似乎已经绝版,但可以在Safari Books Online上找到。我认为它将涵盖Windows Vista。

最后,Microsoft指向许多讨论驱动程序开发的博客等


谢谢,我建议您使您的帖子中也包含指向“ Linux设备驱动程序”的链接。否则,非常彻底。
Kortuk

11

好的驱动程序封装了硬件的功能,并以自然的方式将其提供给OS /应用程序。

如何做到最好,很大程度上取决于您要针对的操作系统以及驱动程序所针对的硬件类型。

我的经验是使用Linux和小型自定义实时OSen。

对于Linux,我建议阅读Linux设备驱动程序。它很好地介绍了Linux驱动程序的不同风格以及操作系统为它们提供的抽象。

像串行端口这样的设备会顺序读取数据,这些设备通常由字符设备驱动程序处理,用户空间中有一个设备节点供应用程序读取。cat可以从中读取。

闪存设备和硬盘等随机存取设备由块设备处理。dd可以访问这些。举一个很好的例子,看看Linux MTD系统。

几乎肯定需要在硬件上摆弄一些低级的驱动程序。您可以选择制作一个运行时可加载的内核模块,或者将您的代码静态地放置在linux内核中。

建立在现有通用驱动程序之上的驱动程序(例如USB)可以在用户空间中编写。使用例如libusb


4
Linux设备驱动程序是一本好书。不幸的是,这些东西是高度特定于操作系统的。Linux可能是最容易编写的,因为源树中已经有太多驱动程序可供参考。如果您编写了嵌入式代码来驱动微处理器的外围设备,则您可能对设备驱动程序的基础知识有了很好的了解。
标记

是的,我要删除我的评论。我的错。
2010年

1
如前所述,无论您是否装有操作系统,控制实际硬件的驱动程序的勇气都是相同的。编写驱动程序时的主要区别是:1)接口需要适合操作系统的标准模型(例如,打开,关闭,读取,写入,ioctl),以及2)安装和激活驱动程序的方法。
tcrosley

1
@tcrosley,如果您有很多有关这些细节的信息,我希望看到关于它的答案。
Kortuk

3

我在这个问题上没有任何经验,但是我要花两分钱。

您可以从http://www.osr.com/index.htmlhttps://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/博客/%3Fp%3D825&twu = 1

我希望我有所帮助


如果我提出以下问题,这将大有帮助:“我应该在哪里及时在线学习葡萄牙语以学习编写驱动程序?” 感谢您的帮助。
Kortuk

2
不用担心学习葡萄牙语。我通过的有关驱动器开发的链接是英文的。甚至DriveEntry也是用英语编写的。不幸的是,有关书籍的帖子是葡萄牙语,但书籍是英语。最重要的是书籍,而不是职位。
丹尼尔·格里洛
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.