i2c_smbus_* 函数不会存在于 CentOS7 i2C-dev.h 上

i2c_smbus_* functios don't exsit on centos7 i2c-dev.h

本文关键字:CentOS7 i2C-dev 存在 smbus 函数 i2c      更新时间:2023-10-16

我需要从Linux C++程序管理SMBus设备。

我可以打开设备(/dev/i2c-0),但我发现所有i2c_smbus*函数(i2c_smbus_write_word_data、i2c_smbus _read_word_data.等)都没有在任何i2c头中声明。

i2c文档说,这些函数在linux/i2c-dev.h头文件中声明,但在我的centos7中不存在。

我在所有标题中都在寻找它们,但没有在任何文件中定义。

你知道为什么没有在那里定义,它们在哪里吗?

这是我的代码:

#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <linux/i2c-dev.h>
#include <linux/i2c.h>
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <memory.h>
#include <fcntl.h>
#include <errno.h>
#include <sys/io.h>
#include <sys/ioctl.h>
int main() {
    cout << "!!!Hello World!!!" << endl; // prints !!!Hello World!!!
    int Address = 0x39; //Slave addr 
     char i2c_dev_node_path[] = "/dev/i2c-0";
     int ret_val = 0;
     /* Open the device node for the I2C adapter of bus 0 */
     i2c_dev_node = open(i2c_dev_node_path, O_RDWR);
     if (i2c_dev_node < 0)
     {       
         cout << "EROR Unable to open device node." << endl;
         return -1;
     }

     int i2c_dev_address = 0x39;
     ret_val = ioctl(i2c_dev_node,I2C_SLAVE,i2c_dev_address);
     if (ret_val < 0)
     {
         perror("Could not set I2C_SLAVE.");
         cout << "EROR Could not set I2C_SLAVE." << endl;
         return -1;
     }
     cout << "ALL OK!!!!!" << endl;

   int retVal = i2c_smbus_read_word_data ( i2c_dev_node , 0xac );
}

复制/lib/modules/4.8.28-release/kernel/drivers/i2c/i2c-smbus.ko

yum install libi2c-dev