Linux内核/驱动程序开发新手

时间:2010-04-21 14:16:17

标签: linux linux-kernel kernel linux-device-driver

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

到目前为止,我只有阅读关于linux内部 由于没有先前的驾驶员开发经验,我发现我的第一步很难落地。

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

有人可以描述结构(即链接间)
  内核源代码中的各种目录。

     

换句话说,给定源代码文件,
  它会引用相关代码的其他文件

     

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

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

谢谢。

2 个答案:

答案 0 :(得分:18)

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

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

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

完成此过程后,组成驱动程序的文件会更有意义。要考虑每个文件中的内容,但在某种程度上,在文件中划分驱动程序更像是一门艺术,而不是一门科学。较小的驱动程序通常只适合一个或两个文件。

一些设计也可能是好的。考虑一下您的设备做了什么,以及您的驱动程序需要做什么。基于此,您应该能够确定设备驱动程序需要具备的功能。

我也相信Linux Device Drivers, Third Edition可以帮助您开始驾驶开发。

Linux文件本身包括基于它们的作用,它们所在的层以及它们访问调用堆栈的层的文件。 Big Picture真实地告知每个文件与下一个文件的关系。

答案 1 :(得分:7)

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