【问题标题】:Learning to write low level drivers (Linux). [closed]学习编写低级驱动程序(Linux)。 [关闭]
【发布时间】:2013-11-04 02:27:36
【问题描述】:

所以我在摆弄 Raspberry Pi,我突然想到“所有这些驱动程序来自哪里”。就像专门针对我在它们身上使用的 SNES 控制器一样......到底有人是怎么想出如何写的。

我对 C 非常了解,而且 C++...好吧。但这一直是我有点想的事情。这很酷,因为它足够低级,可以理解硬件方面可能发生的事情......但也很适合了解操作系统。

我从哪里开始这样的事情?我猜对 Windows 执行此操作会有所不同。

谢谢

【问题讨论】:

标签: c++ c linux driver


【解决方案1】:

在我看来,这里确实有两个问题彼此之间并没有太大关系。

第一个是“Linux 对设备驱动程序有什么要求?”这几乎总是会通过阅读文档来回答。尽管设备驱动程序文档可能(可以说)不如编写普通程序的文档那么彻底、完整、易于阅读等,但它仍然相当不错。可能与普通代码的最大区别在于调试,这通常通过简单地使用printk 打印出来来完成。

另一个问题类似于:“您如何确定特定硬件(如 SNES 控制器)使用什么协议(或“协议”)。当您为普通硬盘驱动器或键盘之类的东西进行开发时,您几乎可以按照文档进行操作。您可能(至少在我的经验中经常这样做)发现您需要补偿硬件中的一些错误,但除此之外,它(再次)是相当正常的编程。相当大的挑战其中一些情况只是决定如何将相关的特定设备呈现给系统的其余部分。对于像硬盘驱动器这样的东西通常很容易,但对于像人机界面设备这样的东西,它可能有点更具挑战性(例如,您想将其呈现为自身,还是想模拟某些现有类型的设备,例如键盘或鼠标?)

对于没有真正记录的硬件,事情可能会变得更加困难。查看逻辑信号的真正通用工具是逻辑分析仪。如果您有使用知名硬件接口的东西(例如 PS/2 键盘/鼠标、USB、SATA),您可以找到更专业的工具(和/或逻辑分析仪的附加组件),让生活变得更美好更轻松。像 NES 或 SNES 控制器之类的东西几乎肯定会使用专有接口,因此对于这些,您最终可能会使用逻辑分析仪。幸运的是,它们也可能是一个非常狭窄、缓慢的接口,因此逻辑分析仪不需要非常快或支持大量通道。

使用逻辑分析仪,您可以查看所有单独的信号,但对于专有接口,您几乎可以确定哪些信号在做什么。在典型情况下,您至少会拥有一些相当明显的信息:电源、接地,很可能是时钟,等等。在相当多的情况下,您很快就会发现,即使它没有公开记录,它也可能遵循一些众所周知的协议,如 I2C、SPI 等。

【讨论】:

  • 使用逻辑分析仪难吗?有没有众所周知的好资源?
  • @Mercfh:我不觉得逻辑分析仪特别难使用,但很大程度上取决于您决定使用触发器等的复杂程度。您可能想查看EE site 以了解有关它们的更多信息。
  • 所以理想情况下,当我按下每个按钮时,我们会使用逻辑分析仪查看来自控制器的信息(就像使用 SNES 控制器示例一样),然后将其放入设备中您编写的驱动程序。
  • @Mercfh:是的,就是这个想法。
【解决方案2】:

Linux Device Drivers 是你想要的书。

当您等待本书到来时,我可以告诉您,了解硬件如何工作以及 Linux 内核如何工作只是成功的一半。您还需要了解特定设备的硬件级接口。希望您能找到这方面的文档,但这可能很困难。

请参阅此相关问题,了解某人如何通过查看 Windows 驱动程序发出的命令来提出 Linux 驱动程序的示例: How are low level device drivers written for Linux?

对于 Windows,该过程实际上并没有太大的不同。所有概念仍然相同,因为它是相同的硬件。当然,区别在于细节。

【讨论】:

    猜你喜欢
    • 2010-10-08
    • 2010-12-07
    • 1970-01-01
    • 2020-01-24
    • 2013-01-24
    • 1970-01-01
    • 2010-09-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多