http://blog.csdn.net/zhenwenxian/article/details/5331079
1 Lm_sensors和相关技术介绍
Lm_sensors是一套提供主机硬件信息读取功能的软件,它依赖于主板芯片组型号,在带入相关的模块后,能够侦测其温度,电压等。Lm_sensors需要加载相关的主板驱动才能进行监测。主板上的sensor芯片能够检测温度,电压和风扇转速,然后通过sensor芯片的驱动把这些信息提供给操作系统。
Sensor芯片基于ISA总线或者SMBus,甚至二者都有。Lm_sensors与硬件通信有以下方式:
软件使用简单的I/O read/write和ISA总线通信
软件使用SMBus接口设备和SMBus芯片通信通信。
SMBus(System System Management Bus)是1995年由Intel提出的,应用于移动PC和桌面PC系统中的低速率通讯。它主要是希望通过一条廉价并且功能强大的总线(由两条线组成),来控制主板上的设备并收集相应的信息。 SMBus 为系统和电源管理这样的任务提供了一条控制总线,使用 SMBus 的系统,设备之间发送和接收消息都是通过 SMBus,而不是使用单独的控制线,这样可以节省设备的管脚数。使用 SMBus,设备还可以提供它的生产信息,告诉系统它的型号,部件号等,针对一些事件保存它的状态,报告不同类别的错误,接收控制参数,并返回它的状态等。
I2C是由Philips开发的一个协议,他是一个低速两现协议(10——400Khz),却能够适用于很多的设备。SMBus是I2C的一个子集,许多现在的主板都具有一个System Management Bus,许多设备都可以连接到SMBus。SMBus是一个两线低速串行通信总线(2-ware,low-speed serial,一个时钟信号,一个数据信号),用于基本的监测和硬件管理。事实上,i2c设备和SMBus将连接到相同的(I2C)总线。每一个支持SMBus的主机都有一个独立的内核模块,该模块实现与主机的通信。一些具备SMBus的主机运行在SMBus层上,这些主机不能处理纯i2c设备,而另外一些主机是真正的i2c主机,在这种情况下,lm_sensors实现了SMBus协议以及I2C,这些主机能够与纯I2C设备通信。
Lm_sernsor的driver通常是一到两秒种更新一次检测值,如果读取速度过快,读取到的值将是旧数据。某些芯片由于其设计的限制导致更新速度不能使用比现有的更快的更新速度。
lm_sensors包含以下命令:
fancontrol :是一个shell脚本,从一个文件中读取配置,董温度计算风扇的速度,设置相应的PWM数据,使用该命令不小心肯嫩构会少了cpu。
i2cdetect :检测i2c芯片是否存在
i2cdump :检测i2c寄存器
i2cget :从i2c芯片寄存器种读取数据
i2cset :设置i2c寄存器
isadump:监测isa寄存器
isaset
pwmconfig :tests the PWM outputs of sensors and configures fancontrol
sensors-detect:监测硬件监控芯片。
sensors.conf
2 Lm_sensors应用
2.1 Lm_sensors安装
Linux 2.5和2.6内核中已经包含了lm_sensors,如果没有可以去网站http://www.lm-sensors.org/下载并安装。具体安装详见http://www.lm-sensors.org/wiki/iwizard/ManualInstall
2.2 lm_sensors应用方式
应用lm_sensors来进行开发有很多种方式,这些方式从直接读写SMBus到利用lm_sensors提供命令获取信息,以下按照从最底层到最高层分别进行介绍。
2.2.1 利用/dev/i2c-x通过字符设备访问i2c总线
通过在一个/dev设备上使用ioctls访问i2c总线,这个设备可能是i2cx, i2c-x, 或i2c/x,其中x为一个整数。ioctls在doc/dev-interface或者Documentation/i2c/dev-interface的linux内核源码中定义。该方式虽然完全没有使用芯片设备的driver,但是它确实需要i2c-dev模块。具体应用例子在prog/detect/i2cdetect.c 和prog/detect/sensors-detect中。
2.2.2 利用 I2c总线访问函数获取信息
利用i2c总线访问函数获取信息,这些函数定义在kernel/include/i2c-dev.h, doc/dev-interface和linux源码的Documentation/i2c/dev-interface中,具体的使用见prog/detect/i2cdetect.c,prog/dump/i2cdump.c,和 prog/dump/i2cset.c。
2.2.3.1 sysfs访问芯片设备驱动
使用i2c-sensor模块的芯片驱动程序会在文件系统中创建一个子文件目录(通常在/sys下),该文件能够被应用程序直接访问。具体例子见:prog/eeprom/decode-dimms.pl, prog/matorb/displayit.pl, prog/maxilife/writelcd.sh,prog/rrd/sens_update_rrd, prog/pwm/fancontrol, 和 prog/pwm/pwmconfig。
2.2.3.2 通过/proc进行访问
使用i2c-proc模块的芯片驱动程序会创建文件/proc/sys/dev/sensors,该文件能够被应用程序直接访问到。/proc 访问提供了一个读写sensor值的方法。 读写sensor值的例子见 prog/eeprom/decode-dimms.pl, prog/matorb/displayit.pl, prog/maxilife/writelcd.sh,,prog/rrd/sens_update_rrd,prog/pwm/fancontrol, 和 prog/pwm/pwmconfig。
2.2.4 使用libsernsors 库访问
Libsensors库提供了对所有芯片驱动的标准的访问方式,同时它在/etc/sensors.conf文件中通过设置提供了一个翻译层(translation layer),因此应用程序可以通过设置配置文件来获得。prog/sensors下有一些应用的例子,libsensors 库在 lib/ directory下。
2.2.5 使用sensors程序访问
Lm_sensors提供的命令sensors可以获取各种检测信息。lm_sensors 提供一个主板芯片组侦测程序sensor-detect,该程序在检测到主板芯片组后,把相关的咨询写入配置文档,然后使用sensor就能够获取CPU,主板等信息。
参考:
http://www.lm-sensors.org/browse ... lopers/applications
lm_sensors官网:http://www.lm-sensors.org/