在RK3399项目中编译i2c-tools

项目场景:

在RK3399项目中编译i2c-tools
首先先下载代码:git clone git://git.kernel.org/pub/scm/utils/i2c-tools/i2c-tools.git
修改makefile:

添加自己的交叉编译工具链路径,比如我们是
COMPILE_PREFIX = /rk3399_git/prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-
CC	= $(COMPILE_PREFIX)gcc
AR	= $(COMPILE_PREFIX)ar
STRIP	= $(COMPILE_PREFIX)strip

使用make命令编译,会生成可以执行文件i2ctransfer、i2cset、i2cget、i2cdump、i2cdetect等可执行文件,然后把文件push到安卓下的、system/bin文件下。


问题描述:

1、进入adb使用使用上面编译出来的命令:./i2cdetect打印出如下错误

/system/bin/sh: /system/bin/i2cdetect: No such file or directory

2、我们使用file 命令测试:file /system/bin/i2cdetect

/system/bin/i2cdetect: ELF executable, 64-bit LSB arm64, dynamic (/lib/ld-linux-aarch64.so.1), BuildID=c448d89f1e0d50f45ede8dc7e64b76db49acfb65, not stripped

3、可以看到这个可执行文件依赖/lib/ld-linux-aarch64.so.1,这个动态库,然后我们去到我们的板子下ls查看并没有这个动态库,所以问题就出现在这里缺少某些动态库。

解决方案:

1、去到我们交叉编译工具链的地址:/rk3399_git/prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/
find -name “ld-linux-aarch64.so.1” 查找我们缺失的动态库的存放的地方。
然后将这个动态库“ld-linux-aarch64.so.1” 和动态库 “libc.so.6” 使用adb push 到 lib文件夹

2、然后会到i2c-tools的目录下,也要将一些动态库push到我们的开发板中。将i2c-tools的目录下lib中的libi2c.so.0.1.1 push到开发板的lib文件夹。然后建立链接文件,类似windows下的快捷方式:
建立链接命令:

ln -s libi2c.so.0.1.1 libi2c.so.0

3、如果运行还出现“没有权限”这个错误,还需要把上面的库修改权限 +777。

命令使用方法

i2cset和i2cget使用方法:

./i2cset -f -y 1 0x20 0x77 0x3f (设置i2c-1上0x20器件的0x77寄存器值为0x3f)
./i2cget -f -y 1 0x20 0x77 (读取i2c-1上0x20器件的0x77寄存器值)

i2cdetect使用方法:

i2cdetect检测挂载在i2c总线上器件,输入 ./i2cdetect-r -y 1(检测i2c-1上的挂载情况)
备注:如果 i2cdetect使用这个命令检测比较慢证明这个总线的dts没有使能,正常情况下检测是非常快的。

i2cdump使用方法:

i2cdump来看i2c-1上0x49地址的i2c设备中所有register的值 :./i2cdump -f -y 1 0x49

猜你喜欢

转载自blog.csdn.net/qq_27809619/article/details/115620302
今日推荐