83

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

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

4

4 回答 4

43

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

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

您可能还想买一本专门介绍 Linux 内核的书。为此,我拿起了一份 Robert Love 的Linux Kernel Development(第 2 版) (第 3 版即将出版)。

于 2010-02-08T15:58:41.330 回答
37

编写设备驱动程序可以非常简单,也可以几乎任意复杂。例如,我参与了一个项目,我们六个人花了将近三年的时间来解决设备驱动程序中的一个错误。当然,我们在寻找它的同时清除了许多其他错误……代码得到了极大的改进。修复结果是一个 8 行补丁,保守地说,它的成本约为 100 万美元。

但是,作为一个附带项目,我在一周内从芯片数据表中编写了一个以太网驱动程序,然后又花了一周时间来调试它。从那以后就不需要碰它了。

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

于 2010-02-08T22:01:49.283 回答
8

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

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

于 2010-02-08T15:58:14.887 回答
3

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

于 2010-02-08T15:57:31.600 回答