2010-02-08 136 views
50

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

我想我想要的是一些提示或建议和指导,并且有人知道没有驱动程序的设备列表,或者我可以为已支持的某些东西写驱动程序(更喜欢前者我实际上提供了价值)。什么是开始使用的好设备?我咬得比我咀嚼的还多吗?我不害怕低级别的编程或组装,也不需要花费任何精力。我真的很想挑战!

+1

由于您提到了* OS X *和* Linux *,这些设备驱动程序将用于哪些操作系统? – jschmier 2010-02-08 15:52:38

+0

任何一个,我想我更喜欢OS X,因为那是我使用的笔记本电脑。 – 2010-02-08 16:03:30

+0

“没有驱动程序的设备...”任何此类设备都不可用!设备制造商**有**创建驱动程序,否则他们不能销售他们的产品。话虽如此,那里有一些非常非常简单的设备。 – jpaugh 2018-01-19 22:50:58

回答

26

对于Linux,您可能会考虑拿起O'Reilly Linux Device Drivers书或在线阅读PDFs。在我看来,这是关于这个主题的更好的文本之一。

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

您可能还想在Linux Kernel上专门找一本书。我拿起了Robert Love的Linux Kernel Development (2nd Edition)为此目的(3rd Edition途中)的副本。

+0

谢谢!编写设备驱动程序需要多少工作?它是否比编写大型复杂应用程序更多或更少?我询问所有回答这个问题的人,因为我真的想要一个答案。再次感谢! – 2010-02-08 16:34:50

+1

涉及的工作难度和数量取决于设备的复杂程度。 a * tty *设备驱动程序可能比* usb *或* pci *设备驱动程序复杂得多。 – jschmier 2010-02-08 16:54:17

+4

首先写一个内核模块作为驱动程序。基本的Hello World程序。并插入你的Ubuntu/Mac。查看内核日志并了解发生了什么。 然后尝试在总线上(如PCI或USB)注册虚拟驱动程序,然后添加更多功能,如读取写入和IOCTL调用。 最后可以移动到执行更复杂的电源管理挂钩,睡眠,关机。 此外,如果在嵌入式平台上工作,平台驱动程序和DMA也可以是一个有趣的阅读。 – Anirudh 2015-09-07 06:56:32

2

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

+0

谢谢!编写设备驱动程序需要多少工作?它是否比编写大型复杂应用程序更多或更少? – 2010-02-08 16:33:59

+2

嗯,在这两种情况下,你都需要知道你在做什么,所以你需要了解周围的环境,这是来自经验,你直到你尝试才得到:) :)通过来自LDDv3的源代码代码在线但对于当前的内核已经过时了,您会感受到下一步涉及的内容以及您想要了解的内容。 – 2010-02-08 16:47:03

4

如果您想要进行Linux设备驱动程序开发,可免费获得的O'Reilly书Linux Device Drivers, Third Edition是必须阅读的。

为了找到您可以编写驱动程序的不支持的硬件,请咨询Linux mailing lists。也许有些USB 3.0设备? ;)

+0

谢谢!编写设备驱动程序需要多少工作?它是否比编写大型复杂应用程序更多或更少? – 2010-02-08 16:33:31

17

写一个设备驱动程序可能非常简单,或者它几乎可以任意复杂。例如,我参与了一个项目,在这个项目中,我们花了将近三年的时间来解决设备驱动程序中的一个错误。当然,我们在寻找它时清除了其他几十个错误...代码大大改进了。该修补程序原来是一个八行补丁,保守地花费了大约一百万美元。但是,作为一个副项目,我在一周内从芯片数据表中编写了一个以太网驱动程序,并花了一个星期的时间对其进行调试。自那以后就不需要碰它了。

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

+5

你能分享一些更多的细节。很想了解这个补丁以及为什么它很难调试。哪一类设备是驱动程序? – Anirudh 2015-09-07 06:52:14