2011-01-05 18:49:00 xinyu0720 阅读数 3728

项目需要在linux下(FC11)连接外部SMBus总线,进行功率控制,读取温度等。

下载lm_sensors-2.10.8.tar,参考README
make user
make user_install

过程:
make user编译不过,以为是缺少内核文件,于是安装了kernel-devel, kernel-headers(使用yum安装),结果还是编译不过。

(PS:事实证明,在我的开发环境里,不需要安装kernel-devel, kernel-headers等)

Google了半天找不到答案,最后上官网仔细一看,原来还要安装libsysfs-devel。参考http://www.lm-sensors.org/wiki/iwizard/ManualInstall
继续编译,按照错误提示接着安装了bison, flex(使用yum安装),make user编译通过。
make user_install后就可以使用i2cdetect, i2cdump, i2cset, i2cget等工具。使用方法参考http://www.lm-sensors.org/wiki/i2cToolsDocumentation

 

注:SMBus兼容了I2C的规范,关于他们的区别,有空再作说明。

2017-03-10 08:53:09 sunlei0625 阅读数 1400
发送数据
int i2c_master_send(const struct i2c_client *client, const char *buf, int count)
接收数据
int i2c_master_recv(const struct i2c_client *client, char *buf, int count)
 
当然还有:
i2c_smbus_xfer_emulated()
i2cdev_ioctl_rdwr()
 
内核模块很多地方直接调用i2c_transfer()函数。
 
对于smbus来说,其最底层函数是i2c_smbus_xfer(),对此封装的函数非常多:
i2c_probe_func_quick_read()
i2c_smbus_read_byte()
i2c_smbus_write_byte()
i2c_smbus_read_byte_data()
i2c_smbus_write_byte_data()
i2c_smbus_read_word_data()
i2c_smbus_write_word_data()
i2c_smbus_read_block_data()
i2c_smbus_write_block_data()
i2c_smbus_read_i2c_block_data()
i2c_smbus_write_i2c_block_data()
 
 
 
2010-02-27 03:12:00 zhenwenxian 阅读数 4774

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

没有更多推荐了,返回首页