【问题标题】:Introduction to driver programming [closed]驱动程序编程简介[关闭]
【发布时间】:2013-11-18 14:10:37
【问题描述】:

驱动程序编程是我想至少有一段时间了解的事情之一,但每当我有空闲时间坐下来研究时,我几乎只发现了一些非常特殊的问题问题或非常广泛的介绍。
现在我确实明白这不是一个微不足道的话题,但我个人最好从坐下来做事中学习。因此,我希望你能给我一些指示,从哪里开始。因此,为了便于实践,请考虑以下场景:我手头有一个 Raspberry Pi,并希望将 GPIO 引脚用作串行端口。 (如果您认为这对于初学者的项目来说过于复杂,我很想听听其他建议。实际上更多的是为了这样做,结果是次要的)。所以 Pi 运行 Debian wheezy,这就是我开始的地方。
鉴于此,我需要什么(软件方面)才能开始?具体来说,我要求以下内容:

  • 我使用哪个编译器?
  • 除了编译器和文本编辑器,我还需要更多工具吗?
  • 我可以复制某种方案来开始使用吗?
  • 您是否知道我没有幸遇到的一个很棒的介绍?我发现录制的讲座非常有帮助,如果这能让我开始学习,我绝对愿意参加完整的课程。
  • 您是否知道一个项目足够简单,初学者可以通过阅读源代码来从中学习,例如github?

最后,我完全走错了吗?我很可能是;我已经编程了很长一段时间,但通常是在具有运行时的语言提供的高抽象级别上。我确实有一些关于 C++ 编程的经验,指针对我来说并不是黑魔法,但我在这里不是很熟悉。
另外,如果这篇文章明显缺乏对司机的理解,请指出来。

【问题讨论】:

  • 听起来您是在询问编写物理设备驱动程序,而不是逻辑驱动程序(当我想到“驱动程序”时,这通常是我想到的)。你试过用arduino吗? arduino.cc/en/Tutorial/HomePage

标签: c debian driver raspberry-pi


【解决方案1】:

我从未为特定硬件编写过完整的驱动程序,但我已经了解了驱动程序编程的一些基础知识。

如果您对 linux 感兴趣,那么在进入驱动程序编程之前,您需要知道什么是驱动程序..?类型的驱动程序..?驱动程序如何作为模块插入内核..? Here 是链接。有一个基本的抽象如何插入驱动程序或如何从内核中删除驱动程序等等。

youtube上有video的教程。

当你在这里得到足够的东西后,按照 Joe 的建议阅读 LDD Book(非常适合初学者的书)。

这里还有一些.. 字符驱动example.

在开始驱动程序编程之前,您可能还想了解kernel compilation,这是一个有趣且重要的话题,了解静态和动态(可加载)驱动程序。

【讨论】:

    【解决方案2】:

    您在 Linux 中,因此您已经安装(或可安装)的东西应该足以构建 - 现代 C 编译器和 make 系统,以及一个体面的编辑器。您甚至可以获得一个能够调试用户和内核空间代码的调试器 - gdb 和 kgdb。根据你正在修补的硬件,你可能需要一些东西来看看它在做什么。

    关于驱动程序的介绍,您在这里询问两个方面。 1) 适用于 Linux 的 O/S 特定驱动程序模型 - 从这里开始:Linux Device Drivers 如果这对您没有意义,您知道您需要退后一步,了解更多基础知识! 2) 硬件和术语的一般方面。我不确定这里有没有好的一般资源。

    最后一件事,C++ 不是 C,它也不是汇编程序,也不是机器代码。在将硬件投入生活的层面上,您开始不得不了解您通常使用的抽象之下的肮脏秘密。有很多关于这类东西的信息,但这就是问题所在,有很多需要知道。你可以试试 Ulrich Dreppers 关于内存的文章,What Every Programmer Should Know About Memory,或者你可以看看抢占式和多任务处理的情况。或者,您可以查看datasheets 以获得您想要控制的硬件。那里有很多。

    您提出了一个令人难以置信的一般性问题,我很惊讶它没有关闭,但是当您完成工作并且有一些具体问题要问时,请回到这里!

    【讨论】:

      猜你喜欢
      • 2010-09-18
      • 1970-01-01
      • 2011-05-14
      • 2010-10-08
      • 2010-12-22
      • 2020-01-24
      • 1970-01-01
      • 2011-06-24
      • 1970-01-01
      相关资源
      最近更新 更多