# virt_hwmon **Repository Path**: rudyzh4ng/virt_hwmon ## Basic Information - **Project Name**: virt_hwmon - **Description**: linux 虚拟hwmon 驱动实现,用于无开发板学习linux hwmon 子系统的驱动开发,涉及hwmon、i2c、platform等驱动知识点 - **Primary Language**: C - **License**: GPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 8 - **Created**: 2021-02-20 - **Last Updated**: 2021-02-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # virt_hwmon #### 介绍 linux 虚拟hwmon 驱动实现,用于无开发板学习linux hwmon 子系统的驱动开发,涉及hwmon、i2c、platform等驱动知识点 #### 软件架构 软件架构说明 主要是借助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 表示状态寄存器,用于表示温度转换是否完成,其中0x0001表示处于温度转换中;0x0000表示温度转换完成。 该温度传感器的i2c地址为0x30(7bit) 读取温度流程: 1. 向转换配置寄存器配置温度采集通道; 2. 设置要读取的寄存器地址(谢日寄存器值0x00) 3. 进行温度的读取操作 因为是模拟温度传感器,此处即模拟了温度采集,而没有模拟max_temp、min_temp、max_alarm_temp、min_alarm_temp、alarm_temp。 主要的数据结构如下: typedef struct vir0511h_data_s { struct i2c_client *client; struct mutex update_lock; char valid; unsigned long last_updated; uint16_t temp_code[MAX_TEMP_NUM]; }vir0511h_data_t; #### 安装教程 1. 在顶层目录执行make;make install命令,即可在./images中查看生成的驱动及应用程序 #### 使用说明 在ubuntu16.04测试通过 1. install virtual_i2c_controller.ko 2. install vir0511h.ko 执行以上两步,即可在/sys/class/hwmon/下查找到对应的设备,名称为vir0511h #### 参与贡献 #### 码云特技 1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md 2. 码云官方博客 [blog.gitee.com](https://blog.gitee.com) 3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解码云上的优秀开源项目 4. [GVP](https://gitee.com/gvp) 全称是码云最有价值开源项目,是码云综合评定出的优秀开源项目 5. 码云官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) 6. 码云封面人物是一档用来展示码云会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)