硬件上通过it87芯片进行风扇转速的读取。硬件上存在it87芯片,但是Linux系统加载it87.ko(modprobe it87)模块时,提示“modprobe: ERROR: could not insert ‘it87’: No such device”。未找到it87相关的设备,it87模块无法加载,导致风扇转速读取失败。
硬件上确实存在it87芯片,但是无法进行加载,通过分析dmesg内核调试信息(Unsupported chip (DEVID=0x8785或者0x8784)\n)以及sensors-detect获取硬件传感器信息(一路Y),会出现如下:
Probing for Super-I/O at 0x2e/0x2f Trying family National Semiconductor/ITE'... No Trying familySMSC’… No Trying family VIA/Winbond/Nuvoton/Fintek'... No Trying familyITE’… Yes Found unknown chip with ID 0x8785(有的平台上出现0x8784)
通过查询it87.ko对应的源代码it87.c,兼容的型号列表中,确实未有0x8785或者0x8784,所以提示could not insert ‘it87’: No such device正常。
* Supports: IT8603E Super I/O chip w/LPC interface * IT8620E Super I/O chip w/LPC interface * IT8622E Super I/O chip w/LPC interface * IT8623E Super I/O chip w/LPC interface * IT8628E Super I/O chip w/LPC interface * IT8705F Super I/O chip w/LPC interface * IT8712F Super I/O chip w/LPC interface * IT8716F Super I/O chip w/LPC interface * IT8718F Super I/O chip w/LPC interface * IT8720F Super I/O chip w/LPC interface * IT8721F Super I/O chip w/LPC interface * IT8726F Super I/O chip w/LPC interface * IT8728F Super I/O chip w/LPC interface * IT8732F Super I/O chip w/LPC interface * IT8758E Super I/O chip w/LPC interface * IT8771E Super I/O chip w/LPC interface * IT8772E Super I/O chip w/LPC interface * IT8781F Super I/O chip w/LPC interface * IT8782F Super I/O chip w/LPC interface * IT8783E/F Super I/O chip w/LPC interface * IT8786E Super I/O chip w/LPC interface * IT8790E Super I/O chip w/LPC interface * IT8792E Super I/O chip w/LPC interface * Sis950 A clone of the IT8705F通过目前的it87芯片资料,发现参数特性与IT8786E一致,所以修改it87.c源代码,兼容0x8784、0x8785:
#define IT8783E_DEVID 0x8783 #define IT8784E_DEVID 0x8784 #define IT8785E_DEVID 0x8785 #define IT8786E_DEVID 0x8786 case IT8783E_DEVID: sio_data->type = it8783; break; case IT8784E_DEVID: case IT8785E_DEVID: case IT8786E_DEVID: sio_data->type = it8786; break;重新拷贝it87.ko文件,重新加载,发现未提示错误,以及查看dmesg中,显示打印信息:pr_info(“Found ITx%s chip at 0x%x, revision %d\n”, chip_type,it87_devices[sio_data->type].suffix,*address, sio_data->revision),说明修改it87模块成功,查看风扇转速读取正常;
这次修改的it模块相对简单,使用现有的配置就可以实现。但是对于其他驱动芯片id,需要根据芯片datasheet进行相关的调整。
以下是新的个人博客的地址: http://106.53.224.102:8080/wordpress-zh/feng_8071/Linux内核模块it87出错/