一般而言,我在设计硬件和嵌入式系统方面具有相当丰富的经验,但是我从未编写过用于操作系统的驱动程序。
我想知道是否有任何好的指南,最好是在线指南,尽管我会感兴趣,但有很多好书,这将为我设计和实现操作系统驱动程序所需的知识提供一个良好的开端。
这可能会让人们朝我开枪,尽管无论基于什么操作系统,我都希望看到一个好的指南,但我还是希望看到一个基于Windows的指南,这主要是因为大多数人我会卖一个有窗户的产品。
请让我知道是否有任何我可以添加的其他信息,以使其更加清楚。
一般而言,我在设计硬件和嵌入式系统方面具有相当丰富的经验,但是我从未编写过用于操作系统的驱动程序。
我想知道是否有任何好的指南,最好是在线指南,尽管我会感兴趣,但有很多好书,这将为我设计和实现操作系统驱动程序所需的知识提供一个良好的开端。
这可能会让人们朝我开枪,尽管无论基于什么操作系统,我都希望看到一个好的指南,但我还是希望看到一个基于Windows的指南,这主要是因为大多数人我会卖一个有窗户的产品。
请让我知道是否有任何我可以添加的其他信息,以使其更加清楚。
Answers:
我最近在编写实际的操作系统驱动程序方面的大部分经验是在Linux上进行的,最好的参考IMO是Jonathan Corbet,Alessandro Rubini和Greg Kroah-Hartman(2005)撰写的第三版Linux设备驱动程序。它可以在Amazon,Safari联机丛书上获得,也可以免费下载。
关于同一主题的另外两本书是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指向许多讨论驱动程序开发的博客等。
好的驱动程序封装了硬件的功能,并以自然的方式将其提供给OS /应用程序。
如何做到最好,很大程度上取决于您要针对的操作系统以及驱动程序所针对的硬件类型。
我的经验是使用Linux和小型自定义实时OSen。
对于Linux,我建议阅读Linux设备驱动程序。它很好地介绍了Linux驱动程序的不同风格以及操作系统为它们提供的抽象。
像串行端口这样的设备会顺序读取数据,这些设备通常由字符设备驱动程序处理,用户空间中有一个设备节点供应用程序读取。cat
可以从中读取。
闪存设备和硬盘等随机存取设备由块设备处理。dd
可以访问这些。举一个很好的例子,看看Linux MTD系统。
几乎肯定需要在硬件上摆弄一些低级的驱动程序。您可以选择制作一个运行时可加载的内核模块,或者将您的代码静态地放置在linux内核中。
建立在现有通用驱动程序之上的驱动程序(例如USB)可以在用户空间中编写。使用例如libusb。
我在这个问题上没有任何经验,但是我要花两分钱。
您可以从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/博客/%3Fp%3D825&twu = 1
我希望我有所帮助