属性系统
属性系统传感器驱动的主要组成部分。在传感器驱动中,通常使用属性系统来实现传感器的、关闭和参数设置读取。一个简单的例子如下:
HWMON驱动
hemon子系统,可以理解为 hardware monitor——包括温度传感器传感器,包括温度传感器等。通常典型的例子是LM75温度传感器。该传感器被广泛使用,其代码在linux核心的位置:$(LINUX SOURCE CODE)/driver/hwmon/lm75.c。这里我们有一个简单的HWMON例子:
我为hwmon还写了一个简单的测试代码,有点懒,不喜欢写。
ioctl
ioctl属于高级字符驱动程序操作,详细说明可参考《ldd3.第六章。在传感器驱动中,通常是通过HWMON或者MISC实现和调用设备驱动ioctl方法MISC驱动中实现IOCTL方法。
MISC驱动
Linux的MISC子系统通常用于实现不良分类的字符设备,如AD、看门狗和一些传感器。通常用于传感器驱动MISC用户层代码可以通过文件接口驱动提供文件接口ioctl传输命令和参数,以控制传感器的工作。
一个MISC驱动的简单代码如下:
注:在Linux的misc子系统中,misc_register和misc_deregister分别用于注册和删除MISC设备。misc_register将结构体miscdevice注册成MISC设备,并将file_operations通过与设备相关联,我们可以在/dev使用下生成的文件接口ioctl传输控制参数。
驱动测试文件代码如下:
注:MISC驱动文件接口和SYS路径在测试代码中宏定义,我们获得/dev/misc_example使用文件描述符后,使用文件描述符ioctl方法与MISC驱动交互。
说明
以上代码为64位ubuntu12.编译并测试通过04。