将 i2c-tools 代码下载到 Android 源码的 external 目录下,在 i2c-tools 目录下新建 Android.mk 文件,内容如下:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := eng
LOCAL_C_INCLUDES += $(LOCAL_PATH) $(LOCAL_PATH)/$(KERNEL_DIR)/include
LOCAL_SRC_FILES := tools/i2cbusses.c tools/util.c
LOCAL_MODULE := i2c-tools
include $(BUILD_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := eng
LOCAL_SRC_FILES:=tools/i2cdetect.c
LOCAL_MODULE:=i2cdetect
LOCAL_CPPFLAGS += -DANDROID
LOCAL_SHARED_LIBRARIES:=libc
LOCAL_STATIC_LIBRARIES := i2c-tools
LOCAL_C_INCLUDES += $(LOCAL_PATH) $(LOCAL_PATH)/$(KERNEL_DIR)/include
include $(BUILD_EXECUTABLE)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := eng
LOCAL_SRC_FILES:=tools/i2cget.c
LOCAL_MODULE:=i2cget
LOCAL_CPPFLAGS += -DANDROID
LOCAL_SHARED_LIBRARIES:=libc
LOCAL_STATIC_LIBRARIES := i2c-tools
LOCAL_C_INCLUDES += $(LOCAL_PATH) $(LOCAL_PATH)/$(KERNEL_DIR)/include
include $(BUILD_EXECUTABLE)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := eng
LOCAL_SRC_FILES:=tools/i2cset.c
LOCAL_MODULE:=i2cset
LOCAL_CPPFLAGS += -DANDROID
LOCAL_SHARED_LIBRARIES:=libc
LOCAL_STATIC_LIBRARIES := i2c-tools
LOCAL_C_INCLUDES += $(LOCAL_PATH) $(LOCAL_PATH)/$(KERNEL_DIR)/include
include $(BUILD_EXECUTABLE)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := eng
LOCAL_SRC_FILES:=tools/i2cdump.c
LOCAL_MODULE:=i2cdump
LOCAL_CPPFLAGS += -DANDROID
LOCAL_SHARED_LIBRARIES:=libc
LOCAL_STATIC_LIBRARIES := i2c-tools
LOCAL_C_INCLUDES += $(LOCAL_PATH) $(LOCAL_PATH)/$(KERNEL_DIR)/include
include $(BUILD_EXECUTABLE)
然后 Android根目录:
source build/envsetup.sh
cd external/i2c-tools
mm
编译后在 out/target/product/xxx/system/bin目录下生成4个可执行程序:
i2cdetect
i2cdump
i2cget
i2cset
通过 adb push 之间将编译生成的4个文件复制到 Android 平台的 /system/bin 目录下。 在 abd pusll 之前,要先将 system 分区 remount 成可写入模式。
adb shell
cd system/bin
用i2cdetect检测有几组i2c总线在系统上:
i2cdetect -l
用i2cdetect检测挂载在i2c_n总线上器件:
i2cdetect-r -y 0
i2cdetect-r -y 1
...
用i2cget获取挂在在i2c总线上的设备中某个寄存器中的值
如: 获取 i2c2下设备地址为 0x24 ,寄存器地址为0x0a中的数值
i2cget -y -f 2 0x24 0x0a
0x7f
读取 0x34地址设备的 0x28寄存器值
/system/bin # i2cget -f -y 0 0x34 0x28
向地址为0x34的设备 的0x24地址 寄存器 写入 0xfb
/system/bin # i2cset -f -y 0 0x34 0x28 0xfb