我想为一些实际的硬件设备编写Linux设备驱动程序。什么样的Raspberry Pi外设很合适?基本上,我需要以下内容:
对于初学者来说,它必须足够小(最多几个月,几个星期更好)。
数据表必须可用。起初,我在考虑USB以太网适配器,但看起来数据表非常有限。
有任何想法吗?可能就像使串行控制台通过GPIO工作一样?
我想为一些实际的硬件设备编写Linux设备驱动程序。什么样的Raspberry Pi外设很合适?基本上,我需要以下内容:
对于初学者来说,它必须足够小(最多几个月,几个星期更好)。
数据表必须可用。起初,我在考虑USB以太网适配器,但看起来数据表非常有限。
有任何想法吗?可能就像使串行控制台通过GPIO工作一样?
Answers:
与复杂的设备和/或复杂的总线接口时,很难学习编写驱动程序。因此,我建议您使用一些简单且众所周知的设备(忽略其驱动程序在内核中的现有实现),例如通常与微控制器一起使用的I²C/ SPI设备。例如,您可以找到Arduino社区“支持”的任何设备(这意味着它具有库/文档),然后尝试将其与RaspberryPi一起使用。
如果这还不够,或者您不想购买过多的硬件,则可以自己创建一个。只需获取一些微控制器(例如atmega之类的东西),创建一个使其成为某种设备的程序,然后尝试使用Linux驱动程序与其进行接口即可。这样,您可以轻松创建可模拟不同类别设备的程序。而且由于您将自己编写“固件”,因此它将帮助您调试问题。
为此,您需要一些微控制器编程技能,但是学习Arduino的编程并不难,而且我认为无论如何,这对于驱动程序程序员都是有用的知识。
BCM2835 ARM Peripherals
文档中找到。但是请记住,要使用它,您首先必须禁用内核中的现有驱动程序。
我个人将从一个非常简单的设备开始,例如一个或多个直接连接到GPIO引脚的LED。
您可以购买准备插入的设备,也可以自己连接设备。
我之所以建议这样做的原因是,调试驱动程序通常要比普通程序困难得多,因此,入门的简单挑战很有用,然后您可以将该代码用作调试更复杂设备的方法( GPIO引脚以连接到示波器),其中定时很重要。
您可以编写硬件驱动程序的最简单的“设备”(如果您需要硬件驱动程序开发)也可以像LED一样简单(我添加了引号,因为从技术上讲LED不是设备,但它仍然是硬件),如@PiBorg所建议。
其他选择将是一些易于接口的设备/组件,例如光敏电阻,无源红外传感器(简称:PIR),温度传感器,PC风扇(最好是4线风扇,它不仅使您可以监控而且可以控制风扇)。 RPM),LED点矩阵等。基本上,这种简单的设备将使您对硬件的了解最少(以便您可以看到和触摸实际完成的工作),同时,您可以了解许多用于更复杂的设备的主题,其中复杂性主要来自他们使用的协议。
还请注意,您无需花太多精力去研究内核模块。当然,如果您想这样做,没人会阻止您。:)
这是连接无源红外传感器的示例(我将在PIR交付时立即进行测试:3)。您可以开始研究并开始更深入地研究Linux内核,以了解如何创建与PIR配合使用的内核驱动程序。