2012-06-27 41 views
27

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

+0

这也有助于有点http://linuxseekernel.blogspot.ie/2015/08/linux-kernel-module-programming.html – Jeyaram

+0

最小的自动QEMU + Buildroot里面+ BusyBox的内核模块设置:https://开头github.com/cirosantilli/linux-kernel-module-cheat –

回答

40

取决于你目前的技能。如果你是真的新的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)
  • 使用内核的同步(互斥)
  • 使用SYSFS与自定义属性
  • insmod
模块选项的

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

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

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

1

您可能感兴趣的新发布的Linux Driver Templates。顾名思义,它提供了模板并演示了经常使用的Linux设备,以便快速入门。

+0

嘿,你能解释如何通过LDT? – const

1

我明白这是一个延迟的回应!

你可以选择任何一本书,这些都是上面建议的很棒的书。

但是你需要切实地工作。尝试尽可能多地参与到Kernel中。

大多数情况下,您需要查看内核源代码本身。

最有趣的文档可以在Kernel树下的Documentation文件夹中找到。

0

专业Linux内核架构是一个很好的阅读。

8
+0

+1,但要记住这类旧问题 - 根据现代堆栈溢出指南 - 脱离主题,因为它被认为太宽泛。 – halfer

0

最好的来源是linux手册页,但它们对于初学者来说有点重要,直接编程设备驱动程序并不是一件容易的事。我建议你通过以下书籍经过指针和结构

基本的C书籍1.编程C本 - 拜伦戈特弗里德2. C程序设计语言 - 丹尼斯里奇

中级书籍1.指针基于C肯尼斯臭佬2。专家C编程深层秘诀 - 林登

来到设备驱动程序我已经上传了pdf格式的内核源文档https://drive.google.com/folderview?id=0B7iRyndFhHldR3hjOHpOZTdKTjA&usp=sharing您可以从此链接下载。

设备驱动程序基础(用户模式编程)

的Linux编程接口 - 迈克尔·凯里斯克 开始Linux程序Wrox的出版商 设备驱动程序(内核Deleopment)1. Linux内核开发 - 罗伯特·爱2. Linux内核的内部 - 米贝克

设备驱动程序(驱动程序)1. Linux设备驱动程序 - 第三版(免费下载适用于2.6内核)2.基本Linux设备驱动程序 - Venkateswaran

对象基本驾驶者知识FOL低此网站http://www.tldp.org/LDP/khg/HyperNews/get/devices/devices.html

我的经验首先,我们必须在进行驱动程序编程之前获得关于C编程的完整知识,主要是结构和指针,否则理解驱动程序编程会有点麻烦。

正在添加到启动: - 使用gcc命令使用不同的对象的工具,在linux Basic编程,线程对象文件的分析(锁

  1. 用户空间编程的gcc生成的 基础proprocessed,汇编和对象文件,同步技术),信号,进程(fork,exec),定时器(Posix)。这将有助于您理解内核概念。

  2. 内核编程 了解内核源码树,不同的分支及其重要性,使用ctags和cscope浏览内核源代码,这将有助于您在内核源代码浏览。

  3. 驱动编程 首先了解不同驱动程序类,焦炭,块等, 接着学习设备协议,发送和接收,所述产品手册是用于通过这个去的最佳来源。 然后开始编写简单的字符驱动程序,例如RTC(端口映射设备),IOAPIC(内存映射设备),然后转到USB,PCI,网络,I2C,SPI等,如果您需要帮助,可以找到内核源码树中的所有这些框架代码。

相关问题