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

The*_*ist 21 linux kernel linux-device-driver linux-kernel

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

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

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

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

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

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

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

谢谢.

Whi*_*ind 18

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

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

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

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

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

我也相信Linux设备驱动程序,第三版 可以帮助您开始进行驱动程序开发.

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

  • 一个真正的专家需要花费不止几页的时间来浏览内核......最重要的是,内核的许多部分变化很快,因此一旦写入就会失去数据。您最好的选择是阅读并理解您感兴趣的子系统。 (2认同)

fra*_*ter 7

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

  • ......现在已经做了一段时间了!它真的很有帮助! (2认同)