linux设备驱动程序 – Linux内核设备驱动程序编程

我想学习linux内核设备驱动程序的编程。所以任何人都可以发布好的教程页面或链接在这里。我是linux内核环境的新手。我已经搜索它,但我不知道如何开始和哪一个阅读,以方便理解基础。提前致谢。
最佳答案
取决于你目前的技能。如果你真的是新的Linux,也许你应该从用户空间系统编程Advanced Linux Programming开始。你会得到良好的知识的Unix系统调用和其他概念,如信号,进程/线程等等与这个免费资源。这是必须的(了解用户空间API)如果你是在内核方面开发,因为内核的作用是以安全的方式为用户提供服务。

否则一本经常引用的书是Linux Device Drivers, Third Edition(LDD3)。请记住,这个版本是在Linux 2.6.10时写的,有些事情从那时起改变了。 This article显示了2.6演化的差异(直到2.6.31,因此不是很有用)。我应该提到martinezjavier/ldd3,其中包含LDD3的更新的更多最近的内核的示例驱动程序(感谢42n4指出)。

另一个有趣的书,不经常被引用是Essential Linux Device Drivers.你不会找到这个免费版本,但它仍然有一个有趣的方法。我喜欢这一个是它涵盖了很多不同的设备类型,是最新的2.6.24,这是一个比LDD好一点。

最后,有关内核本身(不是专门用于驱动程序)的一本伟大的书是Understanding the Linux Kernel, 3rd Edition.这涵盖了深入的内核设施和内部机制。它是最新的截至2.6.11。

至于在线教程,我发现this post on Pete’s Blog是一个很好的例子。它不仅展示了如何创建一个字符设备(最简单的内核驱动程序类型,即你应该开始),它以一种容易理解的方式使用现代Linux内核功能,包括:

>使用udev
>使用内核数据结构(FIFO)
>使用内核同步(mutex)
>使用带有自定义属性的Sysfs
> insmod的模块选项

Plus:它的目标是Linux 3.0,这意味着它比其他资源更新。

您可能还喜欢this post关于如何手动创建Sysfs条目,虽然如果您不需要其他节点或属性,Linux设备模型将负责将您的设备注册为Sysfs条目。

编辑:我应该补充说,学习真正的Linux设备驱动程序编程的最好方法是看看实际的驱动程序。在drivers有成千上万的驱动程序。开始阅读和理解简单的驱动程序/ LED的概念,你会看到这是多么有价值。

转载注明原文:linux设备驱动程序 – Linux内核设备驱动程序编程 - 代码日志