我应该如何开始编写设备驱动程序?

我想学习如何编写设备驱动程序,因为我认为这将是有趣的。 我使用Mac OS X Macbook,但是我也有一台Ubuntu机器(在Mac Min上运行)。 我对C很熟悉,现在正在阅读这本书 。 我在网上find了一些链接,例如Mac开发中心 。 我这样做是因为它会很有趣。 我认为,由于我写的软件,看到硬件运行会有真正的满足感。

我想我想要的是一些提示或build议和指导,有没有人知道没有驱动程序的设备列表,或者我可以写一个已经支持的东西的驱动程序(宁愿前者,所以我实际上提供价值)。 什么是一个好的开始使用的设备? 我咬的比我嚼的还多? 我并不害怕低级别的编程或汇编,也不需要花费大量的精力。 我真的很想挑战!

对于Linux,您可能会考虑拿起O'Reilly Linux设备驱动程序书籍或在线阅读PDF 。 在我看来,这是关于这个问题的更好的文本之一。

Linux内核模块编程指南是另一个很好的资源。

你也可能想在Linux内核上专门找一本书。 为此,我拿起了一本Robert Love的Linux Kernel Development(第二版) ( 第三版 )。

编写设备驱动程序可能非常简单,或者几乎可以任意复杂。 例如,我参与了一个项目,在这个项目中,我们花了将近三年的时间来解决设备驱动程序中的一个错误。 当然,我们在查找时清理了其他几十个错误…代码大大改进了。 修补程序原来是一个八线补丁,保守地花费了大约一百万美元。

但是,作为一个副项目,我在一周内从芯片数据表中写了一个以太网驱动程序,并花了一个星期的时间来进行debugging。 自那以后就不需要碰它了。

总的来说,没有办法说司机会做多less工作; 一个GPU驱动程序可能花费数亿美元,一个LED的驱动程序最多花费几个小时工作。

如果您想要进行Linux设备驱动程序开发,那么免费提供的O'Reilly书籍Linux设备驱动程序,第三版是必须阅读的。

为了find可以编写驱动程序的不受支持的硬件,请在Linux邮件列表中询问。 也许一些USB 3.0设备? ;)

对于Mac,你可能想看看Mac OS X内部的书。 这是思想沉重,但有趣的阅读。 它主要是关于基于PowerPC的Mac,但有一个关于基于Intel的附录。 对于Linux来看看Linux设备驱动程序,第三版 – 它更轻(免费在线PDFs),而且是真正面向设备驱动程序的,可能是更好的开始。