【工具分享】I2C扫描和读写工具

开发背景

在做其他平台时我们常用i2c-tools进行硬件设备的i2c通信调试,但在OpenUBMC平台暂时没有类似的工具,比较影响调试效率,因此我使用hwproxy组件提供的能力封装实现了i2c-tools中的i2cdetect和i2ctransfer,考虑到i2cdump、i2cget、i2cset的能力都可以由i2ctransfer替代实现,这里就没有做这三个工具了。

i2cdetect

注意事项

image

  • 这里相较于通用版本,删除了-y参数,默认使用非交互模式
  • 删除了-q和-r参数,因为hwproxy组件不提供SMBus quick write能力,默认使用SMBus read byte探测

使用说明

i2c bus扫描


使用i2cdetect -l即可

i2c slave address扫描

使用i2cdetect [bus_number]即可

i2ctransfer

注意事项

  • 这里相较于通用版本,删除了-y参数,默认使用非交互模式
  • 删除了-f参数,因为hwproxy不涉及设备地址被驱动占用的问题

使用说明

i2c读写数据

以读取电源厂商为例
image
该命令表示向i2c-3的地址0x5c写入一个字节的数据0x99,然后读取7个字节,读取的数据为HUAWEI对应的ASCII码,说明读写正确。

工具导入方法

当前支持两种方式,一种是在构建HPM包时自动导入,另外一种是在环境中手动导入

构建导入HPM包(推荐)

项目首页 - bus_tools:Command line tool for accessing BMC bus resources, e.g. i2c - GitCode

该工具已经在社区建立组件仓库bus_tools,后续还会加入对hisport总线的支持

在manifest.yml中加入:

json
debug_dependencies:
  - conan: bus_tools/1.0.2@openUBMC.release/stable

然后使用bmcgo build -b openUBMC -r XXX构建就会带上该工具,release出包则不会带上该工具

PS:已上传社区conan远端仓库openubmc_dev,也可以参考组件README编译构建后生成本地缓存,或者上传你自己的conan远端

手动拷贝导入

  • SCP等将i2cdetect和i2ctransfer手动拷贝到OpenUBMC环境的/tmp路径
  • 然后Telnet登录拷贝到/usr/sbin/等路径下,并加上执行权限
  • 执行image
  • 使用i2cdetect或i2ctransfer(需要Telnet登录即root用户)

下载链接

论坛无法上传二进制程序作为附件,适用网盘分享:
链接: 百度网盘 请输入提取码 提取码: UBMC

12 个赞

感谢分享,可以报个议题在hardware-sig例会分享,我们再把工具放到代码仓,这样大家都可以下载使用。

1 个赞

hpm的话,不太建议做成hpm,因为hpm的核心是能在现网维护的时候提供快速的运维工具。然而一般现网运维需要的功能都应该集成到CLI里面。

通过scp传到 /tmp,然后拷到/data分区运行

还有关于分享的事情,可以考虑
1、使用网盘,创建分享链接(可能会有安全风险)
2、在社区接纳前,在gitcode个人空间创建源码仓,并使用发布功能上传编译好的二进制(更加社区类的玩法, 类似IPMITOOL那种发布

1 个赞

这个不太对哦,如果要贡献的话,建议来TC来申请一个仓单独存放。

工具类的话,CICD SIG可能会比hardware SIG更适合一些。

1 个赞

TC评审已通过,代码仓已创建: 项目首页 - bus_tools:Command line tool for accessing BMC bus resources, e.g. i2c - GitCode

1 个赞

在manifest.yml中加入bus_tools之后hpm包编译不过去了怎么回事

从你截图的报错来看,似乎与bus_tools无关,建议:
1、去掉bus_tools后再构建看看有没有报错
2、提供完整的打印日志

去掉之后不会报错

task.log报错如下:

287 WARN: capability_proxy/1.70.7@openUBMC.release/rc: requirement libmc4lua/[>=1.70.66 <1.71.0, include_prerelease=True]@openUBMC.release/rc overridden by ibmc/25.07.00.01@hw.ibmc.re lease/rc to libmc4lua/1.70.66@openUBMC.release/rc
288 WARN: capability_proxy/1.70.7@openUBMC.release/rc: requirement json/B003_00002@openUBMC.release/stable overridden by ibmc/25.07.00.01@hw.ibmc.release/rc to json/B003_00002@openUBM C.release/rc
289 WARN: host_agent/1.60.19@openUBMC.release/rc: requirement libmc4lua/[>=1.70.66 <1.71.0, include_prerelease=True]@openUBMC.release/rc overridden by ibmc/25.07.00.01@hw.ibmc.release /rc to libmc4lua/1.70.66@openUBMC.release/rc
290 WARN: host_agent/1.60.19@openUBMC.release/rc: requirement libsoc_adapter/[>=1.70.43 <1.71.0, include_prerelease=True]@openUBMC.release/rc overridden by ibmc/25.07.00.01@hw.ibmc.re lease/rc to libsoc_adapter/1.70.43@openUBMC.release/rc
291 bus_tools/0.0.1@openUBMC.release/stable: Retrieving from server ‘openubmc_dev’
292 bus_tools/0.0.1@openUBMC.release/stable: Trying with ‘openubmc_dev’…
293 ERROR: Failed requirement ‘bus_tools/0.0.1@openUBMC.release/stable’ from ‘conanfile.py (ibmc/25.07.00.01@hw.ibmc.release/rc)’
294 ERROR: bus_tools/0.0.1@openUBMC.release/stable was not found in remote ‘openubmc_dev’
295 ^[[31m[2025-09-25 14:53:15,973 ERROR] 执行命令 /usr/local/bin/conan lock create conanfile.py --lockfile-out=ibmc.lock -pr=profile.luajit.ini -r openubmc_dev -s build_type=Debug - o firmware_mgmt:community_enable=True -o bmc_time:manufacture=True -o skynet:enable_luajit=True -o vpd:board_name=openUBMC -o fructrl:manufacture=True -o rackmount:oem=huawei -o c hassis:manufacture=True -o help:board_name=openUBMC -o *:module_symvers=c61ed460fefe0c2aeec85ee4e224a2ea8d555b1e45ac085d855123812dfcd6e4 --build=missing 错误, 日志: /home/workspac e/manifest/temp/log/task.log^[[0m

喔,问题是因为bus_tools还没有上传到openubmc_dev这个官方conan仓库,我没有权限上传,我得去找人处理一下

临时解决方案:
在你本地下载后使用bingo构建,生成本地conan缓存
bus_tools:Command line tool for accessing BMC bus resources, e.g. i2c - GitCode

好的,根据上面的方法可以编译了,感谢指导!

把bus_tools 编入hpm包更新后,扫不到任何总线设备

提示如下,请问这样正常吗,如何能扫描到一个i2c设备?

~ ~ $ /usr/sbin/i2cdetect -l
i2c-1     i2c             HIS i2c bit bus                         I2C adapter
i2c-11    i2c             HIS i2c bit bus                         I2C adapter
i2c-2     i2c             HIS i2c bit bus                         I2C adapter
i2c-3     i2c             HIS i2c bit bus                         I2C adapter
i2c-4     i2c             HIS i2c bit bus                         I2C adapter
i2c-5     i2c             HIS i2c bit bus                         I2C adapter
i2c-6     i2c             HIS i2c bit bus                         I2C adapter
i2c-7     i2c             HIS i2c bit bus                         I2C adapter
i2c-8     i2c             HIS i2c bit bus                         I2C adapter
~ ~ $ 
~ ~ $ /usr/sbin/i2cdetect 1
Error: Could not open I2C device
~ ~ $ /usr/sbin/i2cdetect 2
Error: Could not open I2C device
~ ~ $ /usr/sbin/i2cdetect 3
Error: Could not open I2C device
~ ~ $ /usr/sbin/i2cdetect 4
Error: Could not open I2C device
~ ~ $ /usr/sbin/i2cdetect 5
Error: Could not open I2C device
~ ~ $ /usr/sbin/i2cdetect 6
Error: Could not open I2C device
~ ~ $ /usr/sbin/i2cdetect 7
Error: Could not open I2C device
~ ~ $ /usr/sbin/i2cdetect 8
Error: Could not open I2C device
~ ~ $ /usr/sbin/i2cdetect 9
Error: Could not open I2C device
~ ~ $ /usr/sbin/i2cdetect 11
Error: Could not open I2C device

你应该是ssh登录使用,没有root权限操作不了/dev/i2c导致报错
需要使用telnet登录才有root权限

我升级到2509版本后,就不能telnet上去了

ssh可以登录,

telnet一直连接不上,请问升级后重新设置ip, telnet需要重新配置吗

image

应该是我没的把telnet相关工具打包成到hpm,需要重新打包busybox

请问现在bingo build时能顺利使用这个bus_tools代码仓么?使用的25.12版本,遇到以下2个问题没法使用这个工具。

问题1:bus_tools/1.0.4@openubmc/stable编译不过。

问题2:bingo build时“connan download”把“bus_tools/1.0.2@openUBMC.release/stable”中的大写字母“UBMC”转成小写字母“ubmc”,在conan仓中就找不到匹配的软件包,下载失败。

【补充】

【已解决构建问题】:使用“bus_tools/1.0.4@openubmc.dev/dev

【上板运行问题】执行“/usr/sbin/i2cdetect”无任何回显

问题1描述:

25.12版本的init.py中的conan_config()只放了‘openubmc_sdk’和‘openubmc_opensource’两个conan仓,通过“conan search bus_tools -r openubmc_opensource”只看到版本“bus_tools/1.0.4@openubmc/stable”

修改“build/product/BMC/openUBMC/manifest.yml”,增加:

debug_dependencies:

  • conan: bus_tools/1.0.4@openubmc/stable

最后是编译不过,查看所有/root/.conan2/p/b/bus_t*/b目录下都没有src子目录:

问题2描述:

step1:增加25.09中有的openbmc_dev仓,里面包含“bus_tools/1.0.2@openUBMC.release/stable”

step2:bingo build时无法下载包,因为包名称全被转成小写字母了

step3:手动下载“bus_tools/1.0.2@openUBMC.release/stable” 成功,但没作用:重新bingo build时还是去找“bus_tools/1.0.2@openubmc.release/stable”

已解决说明:

step1:独立clone、build成功

阅读《传感器适配指南》时尝试了里面的克隆、build,发现可以编译,同时build输出log里使用的是“bus_tools/1.0.4@openubmc.dev”,如下

step2:修改manifest/build/product/BMC/openUBMC/manifest.yml,使用bus_tools/1.0.4@openubmc.dev/dev,在bingo build就过了

image

【上板运行问题】

telnet登录到设备,执行i2cdetect -l无任何回显(之前在哪篇帖子里说需要telnet登录后执行的)

image

将/usr/sbin/i2cdetect 拷贝到SSH登录的目录下:/data/trust/home/Administrator/i2cdetect1

SSH登录后,执行i2cdetect1 -l是OK的

2 个赞

上板运行问题,也可以 telnet之后,执行一下source /etc/profile,再i2cdetect -l就有回显了

1 个赞

测试有效!!!

不过没看出/etc/profile有什么特殊的 :frowning: