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


75

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

我想我想要的是一些提示,建议和指导,并且有人知道没有驱动程序的设备列表吗,或者我可以为已经支持的设备编写驱动程序吗?(希望使用前者,所以我实际上是提供价值)。什么是入门的好设备?我咬的东西比我咀嚼的还多吗?我不担心底层编程或汇编,也无需付出任何努力。我真的很想挑战!


1
既然您提到了OS XLinux,那么这些设备驱动程序将用于什么OS?
jschmier 2010年

无论哪种方式,我都想使用OS X,因为那是我使用的笔记本电脑。
比约恩

2
“没有驱动程序的设备...”任何此类设备将无法使用!设备制造商必须创建驱动程序,否则他们将无法销售其产品。话虽这么说,那里有一些非常非常简单的设备。
jpaugh

eudyptula-challenge.orggithub.com/agelastic/eudyptula(自述文件具有任务,请不要立即查看解决方案;))
sjas

@jpaugh“在许多情况下,设备是根据已发布的硬件标准设计的。这意味着该驱动程序可以由Microsoft编写,并且设备设计人员不必提供驱动程序。” 来自docs.miscrosoft.com
Elisha Habinsky

Answers:


38

对于Linux,您可以考虑阅读O'Reilly Linux设备驱动程序书或在线阅读PDF。我认为,这是有关该主题的更好的文章之一。

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

您可能还想专门阅读有关Linux内核的书。为此,我拿到了罗伯特·洛夫 Robert Love)的Linux Kernel Development(第2版)的副本(第3版)。


谢谢!编写设备驱动程序需要多少工作?它是比编写大型复杂的应用程序多多少少的工作吗?我问了回答这个问题的每个人,因为我真的很想回答。再次感谢!
比约恩

1
涉及的难度和工作量取决于设备的复杂性。甲TTY设备驱动器可以比一个复杂得多的USBPCI设备驱动程序。
jschmier 2010年

5
首先将内核模块编写为驱动程序。基本的hello world程序。并插入您的Ubuntu / mac。查看内核日志并了解发生了什么。然后尝试在总线(如PCI或USB)上注册虚拟驱动程序,然后逐步添加更多功能,如读写和IOCTL调用。最后可以转移到实现更复杂的电源管理挂钩,睡眠,关机调用。同样,如果在嵌入式系统上工作,平台驱动程序和DMA也会很有趣。
Anirudh 2015年

33

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

但是,作为一个附带项目,我在一周内从芯片数据表中编写了一个以太网驱动程序,并花了一周时间对其进行调试。此后无需触摸。

通常没有办法说出驾驶员将从事多少工作。GPU驱动程序可能耗资数亿美元,而单个LED的驱动程序最多要花费几个小时的时间。


11
您能否分享更多详细信息。很想了解补丁,以及为什么调试如此困难。驱动程序是哪种设备?
Anirudh 2015年

6

如果要进行Linux设备驱动程序开发,则必须阅读O'Reilly的免费书籍《Linux设备驱动程序,第三版》

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


谢谢!编写设备驱动程序需要多少工作?它是比编写大型复杂的应用程序多多少少的工作吗?
比约恩

2

对于Mac,您可能想看看Mac OS X Internals一书。它既沉思又沉重,但有趣。它主要是关于基于PowerPC的Mac,但是有关于基于Intel的Mac的附录。对于Linux,请查看Linux设备驱动程序第三版-它比较轻巧(在线免费PDF :),并且实际上是面向设备驱动程序的,也许是一个更好的开始。


谢谢!编写设备驱动程序需要多少工作?它是比编写大型复杂的应用程序多多少少的工作吗?
比约恩

2
嗯,在这两种情况下,您都需要知道自己在做什么,所以您需要了解周围的环境,而这是源于经验,您只有在尝试之后才能获得这些经验:)通过源代码LDDv3中的几个示例进行研究虽然在线,但是对于当前内核有些过时,您将了解其中涉及的内容以及接下来想学习的内容。
Nikolai Fetissov
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.