前提条件
- 主板i2c已在设备树配置status和引脚复用正常,即设备的i2c总线达到正常使用条件
- I2C device interface假设内核已配置进去
编译工具链NDK环境搭建
~/workspace/ndk$ ls
android-ndk-r22b android-ndk-r22b-linux-x86_64.zip
~/workspace/ndk$ unzip android-ndk-r22b-linux-x86_64.zip
记住当前的下载和解压路径,后面会用到。
使用NDK编译i2ctools
git clone git://git.kernel.org/pub/scm/utils/i2c-tools/i2c-tools.git
i2ctools wiki
https://i2c.wiki.kernel.org/index.php/I2C_Tools
export NDK=~/workspace/ndk/android-ndk-r22b
export PATH=${NDK}:${PATH}
export NDKROOT=${NDK}
export NDK_PROJECT_PATH=${NDK}
export TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/linux-x86_64
export TARGET=armv7a-linux-androideabi
export API=30
export AR=$TOOLCHAIN/bin/llvm-ar
export CC=$TOOLCHAIN/bin/$TARGET$API-clang
export AS=$CC
export CXX=$TOOLCHAIN/bin/$TARGET$API-clang++
export LD=$TOOLCHAIN/bin/ld
export RANLIB=$TOOLCHAIN/bin/llvm-ranlib
export STRIP=$TOOLCHAIN/bin/llvm-strip
export NDK_APPLICATION_MK=./conf/build_arch_conf.mk
make -j64
生成的工具在tools目录下。
导入系统测试
- 前提:将设备remount,将system分区mount成rw
- 将动态库和可执行程序推到板卡端
adb push ~/workspace/lib/i2ctools/i2c-tools/lib/libi2c.so.0 /system/lib/
adb push ~/workspace/lib/i2ctools/i2c-tools/tools/i2cdetect /data
执行效果
-
过程中遇到的问题 在旧版本的i2cdetect工具里,轮询发送i2c设备地址时,当设备有应答时,还会对该设备的0x20寄存器进行写操作!但是刚好这个设备是只有0~0x07的寄存器,所以就读不到了 在使用最新拉下来的i2ctools不会这样子。 可能是这个是板卡内置i2ctools的太旧了,后面查看系统原生的发现系统自带的是基于toybox链接出来的。。。emmm -
需要内置到系统的话,可通过mk或者bp将库和可执行程序内置到系统镜像中。 -
需要查看更多命令可参考:https://blog.csdn.net/mantis_1984/article/details/18254767?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522163757351316780357238797%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=163757351316780357238797&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2blogfirst_rank_v2~hot_rank-3-18254767.pc_v2_rank_blog_default&utm_term=I2C-Tools&spm=1018.2226.3001.4450
|