有很多关于使用i2c_smbus_在开发嵌入式Linux软件以在I2C总线上进行通信时的功能。何时i2c_smbus函数,如i2c_smbus_阅读_单词_数据在软件项目中引用ARM8处理器错误,如‘i2c_smbus_阅读_单词_“data”未在此范围内声明在编译时生成。
对以下头文件的调查表明,大多数i2c_smbus函数定义。
同样在下面的引用中i2c.h文件包含所有i2c_定义了smbus。
如何解决这个问题?
研究参考文献
发布于 2016-03-29 22:37:48
我今天碰到了这个。i2c_smbus_*函数在以下位置定义:
/usr/include/linux/i2c-dev.h...but当我试图在旧版本的Ubuntu上交叉编译ARM时,我遇到了这样的错误:
i2c_smbus_read_block_data was not declared in this scope原来这些函数是注释在等效的ARM特定位置中定义:
/usr/arm-linux-gnueabi/include/linux/i2c-dev.h在交叉编译时,使用的是第二个更老的头文件。我不得不在本地重新声明一些内联i2c_smbus_。函数来解决这个问题。
发布于 2021-02-26 12:43:24
基于https://unix.stackexchange.com/questions/621854/usr-include-linux-i2c-dev-h-does-not-contain-i2c-smbus-read-word-data-functio,我发现这修复了函数未定义的错误:
#include我目前正在使用引用各种i2c的遗留代码_smbus函数。它有:
#include它无法编译。当然,这包括过去的工作,但似乎库的头文件在某一时刻发生了变化。我最近确实刷新/重新安装了libi2c-dev。
请注意,我添加了上面的include。我不能删除原始的包含。它仍然是需要的。
仅供参考:我还没有尝试交叉编译。
发布于 2016-08-01 04:43:14
请注意,有两个名为"i2c-dev.h“的文件,一个是随Linux内核一起分发的,应包含在内核驱动程序代码中;另一个是随i2c-tools一起分发的,应包含在用户空间程序中。显然你想要这里的第二个。
因此,您需要包含i2c-dev.h来自i2c-tools而不是来自Linux内核。
https://stackoverflow.com/questions/25159064
复制相似问题