[RK3399]移植工具i2c-tools
Platform: ROCKCHIP
Chip: RK3399
OS: Android7.1.2
Kernel: 4.4.126
简介
i2c-tools 是一款免费开源的工具,是linux系统下一款i2c调试利器,方便对i2c总线和i2c设备调试,i2ctools工具支持的功能包括:
- 检测cpu i2c总线:一般用于cpu i2c总线驱动调试,但是一般情况下,cpu原厂已经提供i2c总线驱动,除非是原厂驱动开发,否则大多数驱动编写场景都是基于i2c总线驱动开发i2c设备驱动。
- 检测i2c总线挂载的设备
- i2c设备读写访问
检测硬件是否有误,驱动不正常时首先检测电路连接是否正常;实时检测状态寄存器;实时更改i2c设备配置,最终确定好配置信息后,再修改驱动程序;验证驱动的读写功能是否正确。
源码下载地址
https://mirrors.edge.kernel.org/pub/software/utils/i2c-tools/
选择要安装的版本
根据自己linux系统已有的解压工具选择对应的压缩文件,这里我下载的是 “.gz”格式,方便解压。执行“tar -xvzf i2c-tools-4.1.tar.gz ”解压。
i2ctools移植到rk3399
1.将上一步下载下来的源码解压后,可看到该路径下的文件
2.在 android 平台使用 i2c-tools,就需要进行交叉编译或者直接编译成可执行程序
方案一、修改 Makefile 进行交叉编译
修改Makefile,选择rk3399的交叉编译器,然后执行make编译
CC ?= arm-linux-gcc
AR ?= arm-linux-ar
编译完成, 在“tools”目录生成可执行文件i2cdetect、i2cdump、i2cget、i2cset、i2ctransfer;在“lib”目录生成“libi2c.so.0.1.1”动态库文件。将执行文件拷贝到rk3399板子任意目录,将库文件“libi2c.so.0.1.1”拷贝到rk3399板子“/lib”目录下。然后创建软链接:根据提示错误信息,i2ctools执行文件依赖“libi2c.so.0”文件,在板子上直接执行会提示加载库文件失败。通过编译后“lib”目录发现“libi2c.so.0”实际上为一个软链接文件,链接到“libi2c.so.0.1.1”
ln -s libi2c.so.0.1.1 libi2c.so.0
Makefile方式 生成的文件类型不是arm的,在设备上不可执行故选用第二种方案
方案二、编译成可执行程序
(1) 将 i2c-tools 文件夹拷贝到安卓工程external目录下
(2) 在 i2c-tools 目录添加 Android.mk 编译文件
Android.mk如下
LOCAL_PATH:= $(call my-dir)
################### i2c-tools #########################
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := eng
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 := eng
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 := eng
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 := eng
LOCAL_MODULE:=i2cset
LOCAL_SRC_FILES:= \
tools/i2cset.c
LOCAL_C_INCLUDES += \
$(LOCAL_PATH) \
$(LOCAL_PATH)/include
LOCAL_SHARED_LIBRARIES:= \
libc
LOCAL_STATIC_LIBRARIES := \
i2c-tools
LOCAL_CPPFLAGS += -DANDROID
include $(BUILD_EXECUTABLE)
##################### i2cdump #########################
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := eng
LOCAL_MODULE:=i2cdump
LOCAL_SRC_FILES:= \
tools/i2cdump.c
LOCAL_C_INCLUDES += \
$(LOCAL_PATH) \
$(LOCAL_PATH)/include
LOCAL_SHARED_LIBRARIES:= \
libc
LOCAL_STATIC_LIBRARIES := \
i2c-tools
LOCAL_CPPFLAGS += -DANDROID
include $(BUILD_EXECUTABLE)
################### i2ctransfer #######################
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := eng
LOCAL_MODULE:=i2ctransfer
LOCAL_SRC_FILES:= \
tools/i2ctransfer.c
LOCAL_C_INCLUDES += \
$(LOCAL_PATH) \
$(LOCAL_PATH)/include
LOCAL_SHARED_LIBRARIES:= \
libc
LOCAL_STATIC_LIBRARIES := \
i2c-tools
LOCAL_CPPFLAGS += -DANDROID
include $(BUILD_EXECUTABLE)
(3) 在工程目录下使用 mmm 指令进行模块化编译,步骤如下
1.source build/envsetup.sh
2.lunch rk3399_all-userdebug
3.mmm external/i2c-tools-4.2/
编译完成后会在out\target\product\rk3399_all\system\bin下生成可执行文件
查看下文件类型
(4) 通过 adb push 到 设备上即可
这里举例i2cdetect:
-将i2cdetect push到设备的/data/local/tmp下
- 设备端进入/data/local/tmp目录下,此时i2cdetect没有执行权限,只需chmod+x i2cdetect给其执行权限即可
命令使用语法
i2cdetect
-
查看板子i2c总线: ./i2cdetect -l
-
查看i2c总线挂载的设备
./i2cdetect -r -y i2c-no
./i2cdetect -r -y 0 /* 查看i2c0挂载的设备 */
i2c0上挂载了4个设备,地址分别是0x1b和0x40,0x41与0x51;
如果i2c设备驱动已经被系统加载,地址显示“UU”。
读取i2c设备所有寄存器值
./i2cdump -f -y i2c-no i2c-addr
./i2cdump -f -y 0 0x51 /* 读取i2c0上的0x51所有寄存器值 */
读取i2c设备指定寄存器
./i2cget -f -y i2c-no i2c-addr reg
读取i2c0上的i2c-addr的芯片reg寄存器
写i2c设备指定寄存器
./i2ctransfer -f -y i2c-no w-num@i2c-addr data-0 data-1 data-2
读取i2c设备多个字节数据
./i2ctransfer -f -y i2c-no w-num@i2c-addr data-0 data-1 data-n r-num
写i2c设备多个字节数据
./i2ctransfer -f -y i2c-no w-num@i2c-addr data-0 data-1 data-2
本文地址:https://blog.csdn.net/m0_38022615/article/details/110229742
推荐阅读
-
C9移植rk3399 视频显示核心代码
-
[RK3399]移植工具i2c-tools
-
微软针对Access提供了免费的SQL Server移植工具SSMA
-
微软推新工具助力Android应用移植WP7
-
微软针对Access提供了免费的SQL Server移植工具SSMA
-
移植wpa_supplicant工具到arm linux平台
-
移植NTP时间同步工具到arm linux平台创建定时任务
-
【开发工具】【i2c-tools】I2C总线调试工具(i2c-tools)的安装与使用
-
android多语言项目中字符串的移植(bash工具)
-
Penguins DbTools数据库管理移植差分工具(EXCEL相关) ver 20160711