所以我正在摆弄Raspberry Pi,而且我觉得“所有这些司机都来自哪里”。就像我们在他们身上使用的SNES控制器一样....实际上有人想出如何写出来。
我体面地了解C,C ++ ......好吧。但这一直是我有点想过的事情。这很酷,因为它的水平足够低,无法理解硬件方面的可能性......但也非常了解操作系统。
我从哪里开始这样的事情?我猜这样做是为了让Windows与WAYYYY不同。
由于
答案 0 :(得分:4)
在我看来,这里真的有两个问题并没有真正相互关联。
第一个是“Linux对设备驱动程序的要求是什么?”这几乎总是通过阅读文档来回答。虽然设备驱动程序文档可能(可以说)比编写普通程序的文档更不彻底,完整,易于阅读等,但它仍然相当不错。可能与普通代码的最大区别在于调试,这通常是通过简单地使用printk
打印出来的。
另一个问题是:“你如何弄清楚SNES控制器等特定硬件所使用的协议(或”协议“)。当你开发普通硬盘或键盘之类的东西时,您几乎可以按照文档进行操作。您可能(通常至少根据我的经验)发现您需要补偿硬件中的一些错误,但除此之外(再次)相当正常的编程。这是相当大的挑战。其中一些案例只是决定如何将有问题的设备呈现给系统的其他部分。对于类似硬盘的东西,这通常很简单,但对于类似人机界面设备的东西,它可能会有点更具挑战性(例如,你想将它呈现为自己,还是想模拟一些现有类型的设备,如键盘或鼠标?)
对于没有真正记录的硬件,事情会变得更加困难。用于查看逻辑信号的真正通用工具是逻辑分析仪。如果你有一些使用着名的硬件接口(例如,PS / 2键盘/鼠标,USB,SATA),你可以找到更专业的工具(和/或逻辑分析仪的附件),使生活相当多更轻松。像NES或SNES控制器这样的东西几乎肯定会使用专有接口,所以对于这些,你最终可能会使用逻辑分析仪。幸运的是,它们也可能是一个相当窄的慢速接口,因此逻辑分析仪不需要非常快或支持大量的通道。
使用逻辑分析仪,您可以看到所有单独的信号,但对于专有接口,您需要弄清楚哪些信号可以做什么。在一个典型的情况下,你至少会有一些非常明显的:电源,接地,很可能是一个时钟,等等。在很多情况下,您很快就会发现,即使它没有公开记录,它也可能遵循一些众所周知的协议,如I 2 C,SPI等。
答案 1 :(得分:2)
Linux Device Drivers是你想要的书。
当你等到这本书到来时,我可以告诉你,了解硬件如何工作以及Linux内核是如何工作的只是成功的一半。您还需要知道特定设备的硬件级接口。希望你能找到相关的文档,但这可能很困难。
通过观察Windows驱动程序发出的命令,可以查看此相关问题,了解某人是如何想出Linux驱动程序的示例: How are low level device drivers written for Linux?
对于Windows,这个过程实际上并没有太大的不同。所有概念仍然相同,因为它是相同的硬件。当然,差异在于细节。