当前位置:   article > 正文

Linux hwmon子系统分析之一 系统框架说明

hwmon

       从本章开始,我们进行hwmon子系统的分析,hwmon即hardware monitoring framework,硬件监视框架,包括温度传感器、风扇、电源等器件驱动的框架。hwmon子系统主要借助sysfs提供的api接口,实现对硬件监控器件的通信,也就是借助sysfs的文件创建的机制实现应用程序与hwmon器件的通信操作。

本系统主要规划如下几篇文章:

一、框架说明

二、hwmon 子系统详细说明

三、一个hwmon 设备驱动的实现(通过实现一个虚拟的hwmon设备驱动)

 

 

 

本章的主要内容如下:

一、说明sysfs中文件操作接口的简要说明,以及sysfs下文件的创建等;

二、linux hwmon子系统架构及不同内核版本下的架构优化。

 

 

 

一、sysfs相关简要说明

在之前的文章中,我们已经介绍了sysfs相关的框架,此处主要说明sysfs文件系统下文件访问的框架,如下图所示:

  1. 应用程序通过系统调用接口调用vfs接口,而vfs则调用sysfs文件系统注册的文件操作接口,如下图所示,主要为sysfs_open_file、sysfs_read_file、sysfs_write_file、sysfs_poll、generic_file_llseek、sysfs_release接口。
  2. 针对调用device_register接口注册的struct device类型的变量,其struct kobj_type类型变量为device_ktype,其操作接口指针为dev_sysfs_ops,主要用于读取和写入操作(dev_attr_show对应为读取、dev_attr_store为写操作),而在dev_attr_show、dev_attr_store中,则会通过文件的属性变量,获取到具体的store和show接口。而关于sysfs相关的数据结构间的关联,可参考我之前写的sysfs专栏和设备驱动模型专栏相关的文档。
  3. 另外sysfs是支持poll接口的,即sysfs_poll接口。若属性文件需要支持poll接口,则调用函数sysfs_notify即可。

 

 

     而hwmon子系统则主要借助sysfs、设备驱动模块中设备创建和注册以及属性创建,完成属性的创建,从而完成在sysfs中创建文件,供应用程序对硬件监视器芯片的访问(如在sysfs中完成对温度传感器当前温度的读取等)

 

 

二、linux hwmon子系统架构及不同内核版本下的架构优化

      在hwmon子系统中,主要即借助设备驱动模型中设备的注册以及设备属性的创建,即可针对一个硬件监视器芯片创建多个属性文件,从而应用程序即可在/sys目录下实现对文件的访问。

 

如下图所示,通过访问/sys/class/hwmon/hwmon0目录下的属性文件,即可对相关属性进行访问,此处主要查看当前温度内容。

 

Linux3.10的内核hwmon子系统实现

     在linux3.10及之前的版本中,hwmon子系统实现的内容不是太多,也就是实现了一个hwmon  class,然后提供了一个hwmon的注册接口hwmon_device_register(也就是对device_register的包裹),而各hwmon驱动,在调用hwmon_device_register注册之前调用sysfs_create_group完成属性参数的注册,并提供属性的store、show接口。此时的hwmon子系统略显单薄;

 

Linux4.x及之后版本的hwmon子系统实现

       在之后的版本中,hwmon子系统的内容渐渐丰富起来,而不再只做对device_register的包裹,其提供了通用硬件监控参数的抽象,主要提供了接口hwmon_attr_show、hwmon_attr_store,同时抽象了针对温度芯片、风扇芯片、电源芯片等硬件监控芯片相关参数的支持,即温度芯片、风扇芯片、电源芯片等硬件监控芯片相关参数的访问接口,均会在接口hwmon_attr_show、hwmon_attr_store中被统一调用,而温度芯片、风扇芯片、电源芯片等硬件监控芯片只需要实现hwmon_ops类型函数指针即可。调用关系如下所示,其中,HWMON子系统层则为hwmon子层抽象的部分,而最下层则由具体的hwmon 设备驱动实现即可。

 

 

    以上即为本章的内容,hwmon子系统的功能还是比较明确的。通过上面两幅图可以大致理解hwmon的实现流程。当然了,我们实现其他的设备驱动也可以借助设备驱动模型、sysfs提供的接口,在sysfs下创建属性文件及其操作接口,实现在sysfs目录下访问具体设备。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/415495
推荐阅读
相关标签
  

闽ICP备14008679号