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

时间:2010-02-08 15:49:02

标签: c assembly hardware drivers

我想学习如何编写设备驱动程序,因为我觉得这很有趣。我使用Mac OS X Macbook,但我也有一台Ubuntu机器(在Mac Min上运行)。我对C非常熟悉,目前正在阅读this book。我在网上找到了一些链接,例如Mac Dev Center。我这样做是因为它会很有趣。我认为,由于我写的软件,看到硬件运行会有真正的满足感。

我想我想要的是一些提示或建议和指导,并且有没有人知道没有驱动程序的设备列表,或者我可以为已经支持的东西编写驱动程序(更喜欢前者,所以我实际上是在提供价值。什么是开始使用的好设备?我咬的比我咬得多吗?我不怕低级编程或汇编或需要付出任何努力。我真的很喜欢挑战!

4 个答案:

答案 0 :(得分:31)

对于Linux,您可以选择在线阅读O'Reilly Linux Device Drivers书籍或阅读PDFs。在我看来,这是关于这个主题的更好的文本之一。

The Linux Kernel Module Programming Guide是另一个很好的资源。

您可能还想特别在Linux内核上学习一本书。为此目的,我为罗伯特·洛夫Linux Kernel Development (2nd Edition)提取了一份副本(3rd Edition)。

答案 1 :(得分:23)

编写设备驱动程序可能非常简单,或者几乎可以任意复杂化。例如,我参与了一个项目,我们花了将近六年的时间来解决设备驱动程序中的一个错误。当然,我们在寻找它时清除了许多其他错误......代码得到了极大的改进。该修复程序原来是一个八行补丁,保守地花费了大约一百万美元。

但是,作为一个侧面项目,我在一周内从芯片数据表中写了一个以太网驱动程序,并花了一个星期来调试它。从那以后就不需要触摸它了。

一般情况下,没有办法说出司机会做多少工作; GPU驱动程序可能耗资数亿美元,单个LED的驱动程序最多只需要几个小时的工作量。

答案 2 :(得分:4)

如果你想进行Linux设备驱动程序开发,必须阅读免费提供的O'Reilly书籍Linux Device Drivers, Third Edition

要查找可以编写驱动程序的不受支持的硬件,请询问Linux mailing lists。也许一些USB 3.0设备? ;)

答案 3 :(得分:2)

对于Mac,您可能需要查看Mac OS X Internals本书。它的思考和沉重,但阅读有趣。它主要是基于PowerPC的Mac,但有一个关于基于Intel的Mac的附录。对于Linux,请看一下Linux Device Drivers, 3rd Edition - 它更轻(免费的PDF在线:)并且真的是面向设备驱动程序,可能是一个更好的开始。