Linux内核设备驱动程序编程

Raj*_*lli 35 linux-device-driver

我想学习linux内核设备驱动程序编程.所以任何人都可以在这里发布好的教程页面或链接.我是linux内核环境的新手.我已经搜索了它,但我不知道如何开始以及阅读哪一个以便于理解基础知识.提前致谢.

eep*_*epp 49

取决于你目前的技能.如果您真的是Linux的新手,也许您应该从使用高级Linux编程的用户空间系统编程开始.通过这个免费资源,您将熟悉Unix系统调用和其他概念,如信号,进程/线程等.如果您正在内核上进行开发,那么这是必须的(了解用户空间API),因为内核的角色是以安全的方式向用户提供服务.

否则,经常被引用的书是Linux设备驱动程序,第三版(LDD3).请记住,此版本是在Linux 2.6.10时编写的,从那时起一些事情发生了变化.本文展示了差异为2.6的演变(直到2.6.31,即不太有用).我应该提到martinezjavier/ldd3,其中包含为更新近的内核更新的LDD3的示例驱动程序(感谢42n4指出了这一点).

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

最后,关于内核本身(不是专门针对驱动程序)的一本好书是了解Linux内核,第3版.这包括深入的内核工具和内部机制.它是2.6.11的最新版本.

至于在线教程,我发现Pete博客上的这篇文章是一个非常好的例子.它不仅展示了如何创建一个角色设备(最简单的内核驱动程序类型,即你应该开始使用的那个),它还以易于理解的方式使用现代Linux内核功能,包括:

  • 使用udev
  • 使用内核数据结构(FIFO)
  • 使用内核同步(互斥)
  • 使用具有自定义属性的Sysfs
  • 模块选项 insmod

另外:它的目标是Linux 3.0,这意味着它与其他资源相比更新.

您可能也喜欢这篇关于如何手动创建Sysfs条目的帖子,尽管如果您不需要其他节点或属性,Linux设备模型将负责将您的设备注册为Sysfs条目.

编辑:我应该补充一点,学习真正的Linux设备驱动程序编程的最佳方法是查看实际的驱动程序.有成千上万的司机drivers.开始阅读和理解简单的概念,drivers/leds你会看到这是多么有益.