21

最近,我开始开发运行 linux 的嵌入式设备的驱动程序。

到目前为止,我只阅读了有关 linux 内部结构的信息。
由于没有驱动程序开发方面的经验,我发现迈出第一步有点困难。

  • 我已经下载了内核源代码(v2.6.32)。
  • 我已阅读(略读)Linux 设备驱动程序 (3e)
  • 我在 StackOverflow 上阅读了一些相关的帖子。
  • 我知道 linux 有一个“单片”的方法。
  • 我已经构建了内核(在 menuconfig 等中包含现有驱动程序)
  • 我知道 kconfig 和 makefile 文件的基础知识,所以这应该不是问题。


有人可以描述内核源代码中各个目录的结构(即相互链接)吗?

换句话说,给定一个源代码文件,
它会引用哪些其他文件来获取相关代码

(“#include”-s 提供了部分想法)

有人可以帮助我获得更好的主意吗?
任何帮助将不胜感激

谢谢你。

4

2 回答 2

18

给定一个 C 文件,您必须查看它调用的函数和它使用的数据结构,而不是担心特定的文件。

开发自己的设备驱动程序有两种基本途径:

  • 找一个和你相似的司机;去掉不适用于您设备的代码,并为您的设备填写新代码。
  • 从设备驱动程序的最基本部分开始,一次添加一点,直到您的设备开始运行。

当您完成此过程时,构成您的驱动程序的文件将更有意义。请考虑每个文件中的内容,但在某种程度上,在文件之间划分驱动程序与其说是科学,不如说是一门艺术。较小的驱动程序通常只适合一两个文件。

一点设计也可能是好的。考虑您的设备做什么,以及您的驱动程序需要做什么。基于此,您应该能够规划出设备驱动程序需要具备的功能。

我也相信Linux Device Drivers, Third Edition 可以帮助您走上驱动程序开发的道路。

Linux 文件本身包括基于它们所做的文件、它们所在的层以及它们访问调用堆栈的层的文件。大图真正告知每个文件与下一个文件的关系。

于 2010-04-21T14:30:37.393 回答
7

我不得不修复一次内核驱动程序。我最大的提示(如果您使用 vim)是使用 ctags 设置它,这样您每次看到不理解的函数时都可以使用 ctrl-] 跳转内核源代码。

于 2010-04-21T15:22:41.190 回答