为什么 i2c_smbus 函数不可用? (I2C——嵌入式Linux)

2024-04-30

有很多参考使用i2c_smbus_开发嵌入式 Linux 软件时在 I2C 总线上进行通信的函数。什么时候i2c_smbus函数如i2c_smbus_read_word_data在软件项目中引用了 ARM8 处理器错误,例如‘i2c_smbus_read_word_data’未在此范围内声明是在编译时生成的。

对以下头文件的调查表明大多数不存在i2c_smbus函数定义。

  • /usr/arm-linux-gnueabi/include/linux/i2c.h
  • /usr/arm-linux-gnueabi/include/linux/i2c-dev.h

也在下面的参考文献中i2c.h http://www.cs.fsu.edu/~baker/devices/lxr/http/source/linux/include/linux/i2c.h#L80文件定义了所有 i2c_smbus。

如何解决这个问题?

研究参考文献

  1. 在 Linux 中从用户空间使用 I2C https://xgoat.com/wp/2007/11/11/using-i2c-from-userspace-in-linux/
  2. Linux 用户空间的 I2C 通信 – 第 II 部分 http://www.ctrlinux.com/blog/?p=38
  3. I2C 开发接口 https://www.kernel.org/doc/Documentation/i2c/dev-interface

因为您的应用程序使用了错误的头文件。

如果您看到extern在函数上i2c_smbus_read_word_data()在你的头文件中,它是你的头文件kernel,但不适合你的应用。 Linux 内核有i2c_smbus_read_word_data()和其他 i2c smbus 函数供其内部使用。但它们 a) 不是系统调用,或者 b) 无法从您的应用程序访问。

相反,得到来自 Linux 内核 Wiki 的 i2c-tools https://i2c.wiki.kernel.org/index.php/I2C_Tools并安装它。如果您使用 Debian,只需

sudo apt-get install libi2c-dev

and use i2c_smbus_read_word_data()或他们提供的任何其他接口。

版本说明

i2c-dev,直到版本 3.x,曾经是一个只有头文件的包,这意味着没有可链接的库。所有函数都是使用定义的内联函数ioctl().

e.g.)

static inline __s32 i2c_smbus_access(int file, char read_write, __u8 command,
                                     int size, union i2c_smbus_data *data)
{
        struct i2c_smbus_ioctl_data args;

        args.read_write = read_write;
        args.command = command;
        args.size = size;
        args.data = data;
        return ioctl(file,I2C_SMBUS,&args);
}
   :
static inline __s32 i2c_smbus_read_word_data(int file, __u8 command)
{
        union i2c_smbus_data data;
        if (i2c_smbus_access(file,I2C_SMBUS_READ,command,
                             I2C_SMBUS_WORD_DATA,&data))
                return -1;
        else
                return 0x0FFFF & data.word;
}

但从 v4.0 开始,它开始成为一个标准共享库libi2c.so.0 and i2c/smbus.h。您必须在源代码中包含头文件

#include <i2c/smbus.h>

并链接libi2c.so.0 with -li2c

gcc -o a.out main.o -li2c
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 i2c_smbus 函数不可用? (I2C——嵌入式Linux) 的相关文章

随机推荐

  • 使用 UDF 添加文件读取添加到 Hive 资源的文件

    我想知道如何读取使用添加的 Hive 资源ADD FILE来自乌德夫 例如 Hive gt add file users temp key jks Java中的UDF可以读取这个文件吗 在 Udf 中获取此文件的路径是什么 谢谢 大卫 一旦
  • JPEG 颜色在不同浏览器中呈现不一致

    我正在使用的徽标在不同浏览器中的呈现方式有所不同 具体图片可查here https pbs twimg com profile images 741262755236356096 BqpBjB8R jpg and on 这个推特页面 htt
  • RecyclerView 中的单选

    我知道没有默认的选择方法RecyclerView类 但我尝试过以下方式 public void onBindViewHolder ViewHolder holder final int position holder mTextView s
  • 为 SharePoint 2010 Web 部件创建图表

    我已创建从 Web 部件到 Oracle 数据库的连接 其中包含日期和数字 我想在图表中显示这些数据 我在互联网上查找过任何示例 但我很困惑 任何人都可以向我指出一些简单的说明 详细说明如何在 C Sharp 中创建可在 Web 部件上使用
  • 在 ASP.NET MVC 中返回不同的视图同一控制器

    我想根据以下值将用户发送到两个不同页面之一isCustomerEligible 当该变量的值设置为 false 时 它 会调用 Index 但随后返回视图Customer而不是视图Index public ViewResult Index
  • textarea根据内容js或jquery设置高度

    这是我的代码 保持简单
  • 具有单变量优化的 NLopt

    任何人都知道 NLopt 是否适用于单变量优化 尝试运行以下代码 using NLopt function myfunc x grad x 2 end opt Opt LD MMA 1 min objective opt myfunc mi
  • 如何在 pytest 中测试类层次结构?

    我已经使用 pytest 一段时间了 并学会了喜欢参数化和固定装置 我第一次想测试一些具有分支继承结构的类 当然 我想为子类重用测试用例 假设我有以下包结构 mock pkg child py grandchild py parent py
  • EC2 增加大小后无法调整卷大小

    我已按照调整 EC2 卷大小的步骤进行操作 停止实例 拍摄当前卷的快照 在同一区域中从上一个快照创建了一个更大大小的新卷 从实例中分离旧卷 将新卷附加到同一安装点的实例 旧卷是 5GB 我创建的卷是 100GB 现在 当我重新启动实例并运行
  • C 中未声明的标识符

    我正在尝试在 Visual Studio 2012 Express 中用 C 语言编译一个小型银行程序 它向我显示了几乎所有变量的 未声明标识符 错误 以及 语法错误 缺少 在 类型 之前 请告诉我正确的语法 谢谢 include
  • 如何让文字显示5秒然后消失并显示按钮?

    我正在努力做到这一点 以便当您在我的问答游戏中得到正确答案时 它会摆脱您看到的大问题并说 干得好 5秒钟 然后返回到主菜单 其中随机有4个选定的问题 问题从 quizfile csv 加载并包含 What colour is elon mu
  • C#,Process.Start 隐藏?

    public static void Main string args SearchGoogle Test Console ReadKey true static void SearchGoogle string t Process Sta
  • ~/.R/Makevars 文件是什么/在哪里?

    我正在尝试安装包 glmnet 我收到此错误 ld warning directory not found for option L usr local gfortran lib gcc x86 64 apple darwin15 6 1
  • ORA-01722-无效号码

    我在包中有一个查询抛出错误 ORA 01722 无效号码 我尝试了很多方法但没有运气 select h column from table1 h table2 c where c created date 17 MAY 17 and nvl
  • 禁用进度输出 aws s3sync 而不禁用所有输出

    有什么办法可以禁用 Completed 1 of 12 part s with 11 file s remaining 进度输出aws s3 sync命令 来自 aws cli 工具 我知道有一个 quiet选项 但我不想使用它 因为我仍然
  • R包:写入内部数据,但不是一次全部写入

    我正在使用 R 包usethis devtools 该包中有一些我想保留在内部的对象 只是为了避免混乱 我使用的结构是根据源在不同文件中创建对象 所有这些都在我的data raw文件夹 例如 文件make laus codes R准备两个来
  • 使用 Spring MVC 4.0 Multipart 上传图像

    我正在尝试使用下面的代码在线上传图像 但是 由于某种原因 图像似乎没有在图像文件夹中创建 不确定 我在这里做错了什么 RequestMapping value add method RequestMethod POST public Str
  • 使用R中usmap包中的plot_usmap在同一张地图上绘制州和县边界

    我想创建一张显示州和县边界 即不同颜色的州边界 的美国地图 我通常使用导入或使用的形状文件来执行此操作ggplot2 s map data功能 然而 我面临三个障碍 1 我无法安装gdal and geos在我的计算环境中 以便排除使用任何
  • Xcode 项目文件未出现在项目导航器中

    这里有一个奇怪的问题 我的项目的 Swift 文件 Main Storyboard 附加图像 委托等文件在 Xcodes Project Navigator 中都丢失了 真正奇怪的是 项目构建得很好 我也可以从主编辑器窗口的顶部选择它们 即
  • 为什么 i2c_smbus 函数不可用? (I2C——嵌入式Linux)

    有很多参考使用i2c smbus 开发嵌入式 Linux 软件时在 I2C 总线上进行通信的函数 什么时候i2c smbus函数如i2c smbus read word data在软件项目中引用了 ARM8 处理器错误 例如 i2c smb