我想学习linux内核设备驱动程序编程。所以任何人都可以在这里发布好的教程页面或链接。我是 linux 内核环境的新手。我已经搜索过它,但我不知道如何开始以及阅读哪一个以便于理解基础知识。提前致谢。
7 回答
取决于你现在的技能。如果您真的是 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
你会看到这是多么有益。
具有非常重要链接的站点: http: //elinux.org/Device_drivers
带有真实示例的精彩教程(以使用我们自己的文件系统格式化的 usbpen 结尾 - 搜索作者的更多文章):
- http://www.linuxforu.com/tag/linux-device-drivers-series/
- http://sysplay.in/index.php?pagefile=lfy_articles
移植到最新内核的著名 LDD3 书籍源代码: https ://github.com/martinezjavier/ldd3/
视频:
也许其他课程:
一些例子:
- http://www.staerk.de/thorsten/index.php/My_Tutorials/Writing_Linux_kernel_modules
- http://www.freesoftwaremagazine.com/articles/drivers_linux
- http://techblog.aasisvinayak.com/kernel-module-programming-tutorial/
- http://www.linuxforu.com/2009/05/a-voyage-to-the-kernel-day-11/
书籍(未在此线程 LDD3 中提及):
内核黑客: http ://kernelnewbies.org/KernelHacking
linux内核的可视化图:http: //www.makelinux.net/kernel_map/
适合初学者的 Linux 和内核书籍:
您可能对新发布的Linux 驱动程序模板感兴趣。顾名思义,它提供了模板并演示了常用的 Linux 工具以快速入门。
我知道这是延迟响应!
你可以选择任何一本书,这些都是上面推荐的非常棒的书。
但是你需要真正地实际工作。尝试尽可能多地参与内核。
大多数情况下,您需要查看内核源代码本身。
您可以在内核树下的文档文件夹中找到最有趣的文档。
学习设备驱动程序编程最好的书是
《LDD》
Professional Linux Kernel Architecture 也是一本不错的读物。
最好的来源是 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 编程有充分的了解,主要是结构和指针,否则理解驱动程序编程会有点麻烦。
即将启动:-
用户空间编程 gcc 基础使用 gcc 命令生成前处理、汇编程序和目标文件 使用不同的目标工具分析目标文件,linux 中的基本编程,线程(锁,同步技术),信号,进程(fork,exec),计时器(Posix )。这将帮助您理解内核概念。
内核编程 了解内核源代码树、不同分支及其重要性,使用 ctags 和 cscope 浏览内核源代码,这将有助于您进行内核源代码浏览。
驱动程序编程首先学习不同的驱动类,char,block等,然后学习设备协议,传输和接收,产品手册是最好的参考资料。然后开始编写简单的字符驱动程序例如RTC(端口映射设备),IOAPIC(内存映射设备),然后转到USB,PCI,网络,I2C,SPI等,如果需要帮助可以找到框架内核源代码树中所有这些的代码。