35

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

4

7 回答 7

51

取决于你现在的技能。如果您真的是 Linux 新手,也许您应该从Advanced Linux Programming的用户空间系统编程开始。通过这个免费资源,您将深入了解 Unix 系统调用和其他概念,例如信号、进程/线程等。如果您在内核方面进行开发,这是必须的(了解用户空间 API),因为内核的角色是以安全的方式为用户提供服务。

另外一本经常被引用的书是Linux Device Drivers, Third Edition (LDD3)。请记住,此版本是在 Linux 2.6.10 时编写的,从那时起有些事情发生了变化。本文展示了随着 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 的最新版本。

至于在线教程,我发现Pete's Blog 上的这篇文章是一个很好的例子。它不仅展示了如何创建字符设备(最简单的内核驱动程序类型,即您应该开始使用的驱动程序类型),它以一种易于理解的方式使用现代 Linux 内核特性,包括:

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

另外:它针对的是 Linux 3.0,这意味着与其他资源相比,它是最新的。

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

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

于 2012-06-27T07:14:30.017 回答
12

具有非常重要链接的站点: http: //elinux.org/Device_drivers

带有真实示例的精彩教程(以使用我们自己的文件系统格式化的 usbpen 结尾 - 搜索作者的更多文章):

  1. http://www.linuxforu.com/tag/linux-device-drivers-series/
  2. http://sysplay.in/index.php?pagefile=lfy_articles

移植到最新内核的著名 LDD3 书籍源代码: https ://github.com/martinezjavier/ldd3/

视频:

  1. https://www.youtube.com/playlist?list=PL16941B715F5507C5

也许其他课程:

  1. http://www.skilledup.com/courses?keyword=linux+kernel&price_filter=0..0

一些例子:

  1. http://www.staerk.de/thorsten/index.php/My_Tutorials/Writing_Linux_kernel_modules
  2. http://www.freesoftwaremagazine.com/articles/drivers_linux
  3. http://techblog.aasisvinayak.com/kernel-module-programming-tutorial/
  4. http://www.linuxforu.com/2009/05/a-voyage-to-the-kernel-day-11/

书籍(未在此线程 LDD3 中提及):

  1. http://www.coopj.com/带有更新的源代码http://www.coopj.com/LPD/

内核黑客: http ://kernelnewbies.org/KernelHacking

linux内核的可视化图:http: //www.makelinux.net/kernel_map/

适合初学者的 Linux 和内核书籍:

  1. http://www.kroah.com/lkn/
  2. http://swift.siphos.be/linux_sea/
于 2014-03-14T14:09:55.123 回答
2

您可能对新发布的Linux 驱动程序模板感兴趣。顾名思义,它提供了模板并演示了常用的 Linux 工具以快速入门。

于 2012-11-13T20:09:45.390 回答
2

我知道这是延迟响应!

你可以选择任何一本书,这些都是上面推荐的非常棒的书。

但是你需要真正地实际工作。尝试尽可能多地参与内核。

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

您可以在内核树下的文档文件夹中找到最有趣的文档。

于 2013-04-02T04:16:20.967 回答
1

学习设备驱动程序编程最好的书是
《LDD》

于 2012-06-29T09:48:47.990 回答
1

Professional Linux Kernel Architecture 也是一本不错的读物。

于 2014-02-22T12:37:28.767 回答
1

最好的来源是 linux 手册页,但对于初学者来说理解它们有些关键,直接编程设备驱动程序不是一件容易的事。我建议您通过以下书籍了解指针和结构

基础 C 书籍 1. 编程 C - Byron gottfried 2. C 编程语言 - Dennis Ritchie

中级书籍 1. 关于 C 的指针 Kenneth Reek 2. 专家 C 编程深奥的秘密 - Linden

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

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

Linux 编程接口 - Michael Kerrisk 开始 Linux 编程 Wrox Publishers 设备驱动程序(内核开发) 1. Linux 内核开发 - Robert Love 2. Linux 内核内部 - m beck

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

有关基本驱动程序知识,请关注此站点http://www.tldp.org/LDP/khg/HyperNews/get/devices/devices.html

我的经验是,在进行驱动程序编程之前,首先我们必须对 C 编程有充分的了解,主要是结构和指针,否则理解驱动程序编程会有点麻烦。

即将启动:-

  1. 用户空间编程 gcc 基础使用 gcc 命令生成前处理、汇编程序和目标文件 使用不同的目标工具分析目标文件,linux 中的基本编程,线程(锁,同步技术),信号,进程(fork,exec),计时器(Posix )。这将帮助您理解内核概念。

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

  3. 驱动程序编程首先学习不同的驱动类,char,block等,然后学习设备协议,传输和接收,产品手册是最好的参考资料。然后开始编写简单的字符驱动程序例如RTC(端口映射设备),IOAPIC(内存映射设备),然后转到USB,PCI,网络,I2C,SPI等,如果需要帮助可以找到框架内核源代码树中所有这些的代码。

于 2014-10-05T15:11:41.213 回答