# virt_hwmon_v2.0 **Repository Path**: caobinxin/virt_hwmon_v2.0 ## Basic Information - **Project Name**: virt_hwmon_v2.0 - **Description**: linux 虚拟hwmon 驱动实现,用于无开发板学习linux hwmon 子系统的驱动开发,涉及hwmon、i2c、platform等驱动知识点。本次使用hwmon新版本的接口实现hwmon的参数 - **Primary Language**: C - **License**: GPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 9 - **Created**: 2022-11-27 - **Last Updated**: 2022-11-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # virt_hwmon_v2.0 #### 介绍 linux 虚拟hwmon 驱动实现,用于无开发板学习linux hwmon 子系统的驱动开发,涉及hwmon、i2c、platform等驱动知识点。本次使用hwmon新版本的接口实现hwmon的参数 #### 软件架构 软件架构说明 软件架构说明 主要是借助linux hwmon子系统提供的接口,完成虚拟温度传感器驱动的创建(该虚拟温度传感器是一个i2c设备),因此该驱动的实现 主要包括如下几方面的内容: 1. 实现一个虚拟的i2c总线控制器; 2. 实现一个虚拟的i2c设备,用于模拟温度传感器,主要用于提供转换寄存器、配置寄存器,主要提供四路温度。 3. 实现一个虚拟的i2c驱动,用于和模拟温度传感器通信,主要实现配置温度采集及转换的channel、读取温度; 4. 实现一个虚拟的hwmon driver,该driver实现了四路温度的采集,实现temp_input,并实现show接口,而在show接口中, 通过与模拟温度传感器通信,完成温度的采集等功能。 5.通过实现platform device、platform driver,实现i2c adapter的注册操作。 温度传感器通信方式及寄存器定义 既然我们要模拟一个温度传感器,还是需要对温度传感器做简要说明的。 我们的虚拟传感器是一个i2c设备,该温度传感器支持4路温度采集 该温度传感器的寄存器定义如下: 0x00 表示转换寄存器,用于进行温度转换,该寄存器值为16bit; 0x01 表示配置寄存器,用于配置当前进行哪一路温度采集及转换, 其中0x0001表示第一路温度采集及转换; 0x0002表示第二路温度采集及转换; 0x0004表示第三路温度采集及转换; 0x0008表示第四路温度采集及转换; 0x02-0x05 表示4路最大温度的值。 0x6-0x9 表示4路最小温度的值 0xa-0xd 表示4路最大告警温度的值 0xe-0x11 表示四路最小告警温度的值 0x12-0x15 表示4路告警温度的值 该温度传感器的i2c地址为0x30(7bit) 读取温度流程: 1. 向转换配置寄存器配置温度采集通道; 2. 设置要读取的寄存器地址(谢日寄存器值0x00) 3. 进行温度的读取操作 因为是模拟温度传感器,此处模拟了温度采集temp_in、max_temp、min_temp、max_alarm_temp、min_alarm_temp、alarm_temp。 主要的数据结构如下: typedef struct vir0516h_data_s { struct i2c_client *client; struct mutex update_lock; char valid; unsigned long last_updated; uint16_t temp_code[MAX_TEMP_NUM]; }vir0516h_data_t; #### 安装教程 在顶层目录执行make;make install命令,即可在./images中查看生成的驱动及应用程序 #### 使用说明 在ubuntu18.04测试通过 install virtual_i2c_controller.ko install vir0516h.ko 执行以上两步,即可在/sys/class/hwmon/下查找到对应的设备,名称为vir0516h