无法在Raspberry Pi 4上编译i2c_smbus_write_byte

问题描述 投票:0回答:2

有人尝试过在Raspberry Pi 4上使用i2c_smbus_write_byte或任何类似的功能吗?

我无法对其进行编译,但在找不到该链接时失败。我正在按此处所述使用它:http://synfare.com/599N105E/hwdocs/rpi/rpii2c.html

推荐的所有标头都存在,Makefile中也有-li2c

谁能说出问题所在吗?我目前没有任何线索

c compilation i2c raspberry-pi4 smbus
2个回答
0
投票

可能值得检查以查看系统上是否存在libi2c-dev。

sudo apt-get install libi2c-dev

可能就是您所需要的。


0
投票

您链接到的页面说:

[采用Buster版本,截至2019年6月,使用i2c_smbus_write_byte_data()和同级,需要以下内容包含语句:

#include <unistd.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <linux/i2c-dev.h>
#include <i2c/smbus.h>

使用fgrep可以确认该函数已在/usr/include/i2c/smbus.h中声明:

# cd /usr/include; fgrep -R i2c_smbus_write_byte *
i2c/smbus.h:extern __s32 i2c_smbus_write_byte(int file, __u8 value);
i2c/smbus.h:extern __s32 i2c_smbus_write_byte_data(int file, __u8 command, __u8 value);

所以这应该起作用:

#include <unistd.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <linux/i2c-dev.h>
#include <i2c/smbus.h>

int main(void) {
  int i2c = open("/dev/i2c-1", O_RDWR);
  i2c_smbus_write_byte(i2c, 1);
  close(i2c);
  return 0;
}

我测试了该示例是否可以在最新的Raspbian Buster Lite中成功编译:

gcc test.c -otest -li2c

如果您使用的是g ++而不是gcc,则应使用extern“ C”包装include指令:

extern "C" {
  #include <linux/i2c-dev.h>
  #include <i2c/smbus.h>
}
© www.soinside.com 2019 - 2024. All rights reserved.