如何编写驱动程序?

9
我希望在Linux操作系统中使用C语言编写驱动程序,尽管我认为这非常困难。你能给我一些提示如何开始或者推荐哪些书籍吗?驱动程序可以是从我的USB端口到图形卡!
我知道我可以在哪里搜索书籍,但我想知道我应该从哪些基础知识开始。我需要有硬件知识吗?对于像我这样的初学者,有哪些特定的好书推荐?

10
不要用"!!"结束每个句子。;-) - Evan Teran
8个回答

19

2
毫无疑问,这是唯一需要的参考。 - Jamie

7

《Linux设备驱动程序》(O'Reilley出版社)由Rubini和Corbet撰写,是Linux设备驱动程序的权威书籍。

太棒了!在Roddy的回答和kristina的评论中可以看到免费的PDF版本!


5
尝试使用亚马逊!那里有很多与驾驶员相关的书籍。有些书籍还提供样品!

5
为什么会有负评?我喜欢这个回答的风格与问题相符。 - aib
1
因为这被认为不是有益的,我认为。 - Roddy

5

3
驱动程序的复杂性因设备而异,USB驱动程序位于简单端;GPU驱动程序则极其复杂,即使那些驱动程序作者通常也不知道它们所做的一切。我建议你专注于个人关心的硬件驱动程序,而不是试图成为各种硬件的万能工具;这样长远来看会更容易。
其他人关于文档来源和各种阅读材料的回答都是正确的,你真的应该接受其中一个。
许多更复杂的驱动程序社区也有自己的特定领域信息。如果你想编写GPU驱动程序,DRI/DRM和Mesa社区有自己的维基和邮件列表,这将极大地帮助你,以及他们自己的文档。 http://dri.freedesktop.org/ 是一个不错的起点,http://wiki.x.org/ 也是如此。
希望对你有所帮助!

3
在你开始设计驱动程序之前,你应该先掌握出色的C编程技能和一些Linux内核知识。设计驱动程序并不是一件简单的事情,如果你不习惯在低级别上进行编程,可能会让你望而却步。
如果你对C语言不熟悉,我建议你阅读The C programming Language,因为在我的看法中,它是有编程背景的人学习C语言的入门教材。

4
扎实的C语言技能当然是一个好主意,但是内核和驱动程序开发并不可怕。如果犯错误,风险只是更高一些而已。 :-) - Steve Madsen

1

0

只需查看当前驱动程序的源代码。我通过仅阅读代码上方放置的注释编写了我的USB RNDIS驱动程序。

获取内核源代码并查看/drivers目录。 USB驱动程序位于usb目录中,但有关网络的USB驱动程序位于/net/usb中。

通过阅读注释,您可以学到很多知识。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接