1. i2c-tools简介与MTK平台适配价值
i2c-tools是Linux系统下一套非常实用的I2C总线调试工具集,它包含了i2cdetect、i2cget、i2cset、i2cdump和i2ctransfer等多个实用工具。在MTK平台上,这些工具对于底层驱动调试、硬件验证和寄存器操作来说简直是神器级别的存在。我当年第一次在MTK平台用i2c-tools排查一个传感器问题时,那种直接从用户空间读写寄存器的爽快感至今难忘。
在实际开发中,我们经常会遇到需要验证I2C设备是否正常通信、检查设备地址是否正确、或者直接读写寄存器的情况。如果没有i2c-tools,你可能需要反复修改驱动代码、重新编译内核、烧录系统,这个调试循环会非常耗时。而有了i2c-tools,你可以在终端直接操作,实时看到结果,大大提高了调试效率。
MTK平台由于其特殊的架构设计,在Android系统上使用i2c-tools需要一些额外的配置步骤。这主要是因为MTK的Android构建系统对模块编译有特定要求,而且内核配置也需要相应调整。接下来我会详细讲解如何在MTK平台上从零开始配置、编译和使用i2c-tools。
2. 源码获取与Android.mk配置
首先我们需要获取i2c-tools的源码。官方源码可以从Linux内核网站的软件工具页面下载,推荐使用4.2或4.3版本,这两个版本在MTK平台上兼容性较好。下载地址是:https://www.kernel.org/pub/software/utils/i2c-tools/ 。下载后解压,你会看到源码目录结构包含tools、lib等关键文件夹。
接下来是最关键的一步——编写Android.mk文件。这个文件告诉Android构建系统如何编译我们的代码。由于i2c-tools原本是为Linux桌面环境设计的,我们需要为Android环境做适当的适配。下面是我在实际项目中验证过的Android.mk配置:
LOCAL_PATH:= $(call my-dir)
################### i2c-tools #########################
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE := i2c-tools
LOCAL_SRC_FILES := \
tools/i2cbusses.c \
tools/util.c \
lib/smbus.c
LOCAL_C_INCLUDES += \
$(LOCAL_PATH) \
$(LOCAL_PATH)/include
#LOCAL_CFLAGS := -g -Wall -Werror -Wno-unused-parameter
include $(BUILD_STATIC_LIBRARY)
################### i2cdetect #########################
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE:=i2cdetect
LOCAL_SRC_FILES:= \
tools/i2cdetect.c
LOCAL_C_INCLUDES += \
$(LOCAL_PATH) \
$(LOCAL_PATH)/include
LOCAL_SHARED_LIBRARIES:= \
libc
LOCAL_STATIC_LIBRARIES := \
i2c-tools
LOCAL_CPPFLAGS += -DANDROID
include $(BUILD_EXECUTABLE)
#################### i2cget ###########################
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE:=i2cget
LOCAL_SRC_FILES:= \
tools/i2cget.c
LOCAL_C_INCLUDES += \
$(LOCAL_PATH) \
$(LOCAL_PATH)/include
LOCAL_SHARED_LIBRARIES:= \
libc
LOCAL_STATIC_LIBRARIES := \
i2c-tools
LOCAL_CPPFLAGS += -DANDROID
include $(BUILD_EXECUTABLE)
##################### i2cset ##########################
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE:=i2cset
LOCAL_SRC_FILES:= \
to



被折叠的 条评论
为什么被折叠?



