• Android平台i2c-tools及16位地址读写,以及not executable: 64-bit ELF file解决办法


    1. i2cget不能读取16位寄存器地址,只能选用i2ctransfter

    读写16位地址寄存器时,直接使用i2cget失败。后来发现需要使用i2ctransfter工具,

    而我拿到的i2c-tools工具,并没有i2ctransfer可执行程序。只能自己编译。

    2. i2c-tools涉及的I2C地址都是7位的

    3. i2cdetect

     用来检测I2C总线上连接的设备。

    示例:

    4. i2cdump

    遇到的错误: permission denied (需要root权限

    遇到的错误: Remote I/O error (设备无法进行I2C通信,可能是没有上电,如设备没有打开)

    用来dump出某个I2C总线上连接的某个设备(用I2C地址标识)的一系列寄存器的数据。

     示例:

    5. i2cget

    用来获取某个I2C总线上连接的某个设备(用I2C地址标识)的某个寄存器的数据。

    示例:

     6. i2cset

    用来设置某个I2C总线上连接的某个设备(用I2C地址标识)的某个寄存器的数据。

    示例:

    7. i2ctransfter使用介绍

    i2ctransfter程序的使用方式如下:

    i2ctransfer -f -y 1 w2@0x36 0x50 0x81 r3
    1: i2c-1
    w2: @后面共有2+1个数字 (或者说 后面要读写的寄存器有2个值)
    0x36: i2c device address
    0x50+0x81: register address (16bit)
    r3: 读出从0x5081开始的3个连续值

    下图是读取7位设备从地址为0x36(对应的8位地址位0x6c)寄存器0x0100, 0x3409, 

    0x340c, 0x3425的示例:

    8. not executable: 64-bit ELF file错误

    由于代码编译主机只配置了交叉编译环境,没有Linux下的gcc,直接编译,生成的程序似乎不是可用的执行程序,在设备上执行时,提示“not executable: 64-bit ELF file”。有网友提示要编译成static的方式,我尝试后,发现还是会报告上面的错误。

    我觉得可能还是需要在编译主机上,指定合适的GCC编译环境,生成linux环境或者交叉编译环境对应的可执行程序。

    9. 在Android交叉编译环境下,编译生成对应的执行程序。

    需要:

    (1)下载i2c-tools源代码

    (2)放到android项目工程中,添加对应的Android.mk

    (3)source + lunch, 配置好编译环境

    (4)mmm的方式编译i2c-tools目录

      (5)  push可执行程序到设备

       将编译生成的out/target/x/目录/system/bin/下的i2cget, i2ctransfer等可执行程序push

    到设备端的/system/bin/目录。

    9.1 下载i2c-tools源代码

    文件下载路径:

    Index of /pub/software/utils/i2c-tools/ (kernel.org)

    https://mirrors.edge.kernel.org/pub/software/utils/i2c-tools/

    直接下载压缩包,或者通过git clone的方式下载(更推荐):

    git clone git://git.kernel.org/pub/scm/utils/i2c-tools/i2c-tools.git

     9.2 添加对应的Android.mk

    可以将代码放在Android项目源代码的external目录下进行编译。 记得先删除Makefile文件

    (建议 先将i2c-tools目录下的Makefile剪切,备份保存,然后再创建Android.mk文件)

    1. LOCAL_PATH:= $(call my-dir)
    2. ################### i2c-tools #########################
    3. include $(CLEAR_VARS)
    4. LOCAL_MODULE := i2c-tools
    5. LOCAL_SRC_FILES := \
    6. tools/i2cbusses.c \
    7. tools/util.c \
    8. lib/smbus.c
    9. LOCAL_C_INCLUDES += \
    10. $(LOCAL_PATH) \
    11. $(LOCAL_PATH)/include
    12. #LOCAL_CFLAGS := -g -Wall -Werror -Wno-unused-parameter
    13. include $(BUILD_STATIC_LIBRARY)
    14. ################### i2cdetect #########################
    15. include $(CLEAR_VARS)
    16. LOCAL_MODULE:=i2cdetect
    17. LOCAL_SRC_FILES:= \
    18. tools/i2cdetect.c
    19. LOCAL_C_INCLUDES += \
    20. $(LOCAL_PATH) \
    21. $(LOCAL_PATH)/include
    22. LOCAL_SHARED_LIBRARIES:= \
    23. libc
    24. LOCAL_STATIC_LIBRARIES := \
    25. i2c-tools
    26. LOCAL_CPPFLAGS += -DANDROID
    27. include $(BUILD_EXECUTABLE)
    28. #################### i2cget ###########################
    29. include $(CLEAR_VARS)
    30. LOCAL_MODULE:=i2cget
    31. LOCAL_SRC_FILES:= \
    32. tools/i2cget.c
    33. LOCAL_C_INCLUDES += \
    34. $(LOCAL_PATH) \
    35. $(LOCAL_PATH)/include
    36. LOCAL_SHARED_LIBRARIES:= \
    37. libc
    38. LOCAL_STATIC_LIBRARIES := \
    39. i2c-tools
    40. LOCAL_CPPFLAGS += -DANDROID
    41. include $(BUILD_EXECUTABLE)
    42. ##################### i2cset ##########################
    43. include $(CLEAR_VARS)
    44. LOCAL_MODULE:=i2cset
    45. LOCAL_SRC_FILES:= \
    46. tools/i2cset.c
    47. LOCAL_C_INCLUDES += \
    48. $(LOCAL_PATH) \
    49. $(LOCAL_PATH)/include
    50. LOCAL_SHARED_LIBRARIES:= \
    51. libc
    52. LOCAL_STATIC_LIBRARIES := \
    53. i2c-tools
    54. LOCAL_CPPFLAGS += -DANDROID
    55. include $(BUILD_EXECUTABLE)
    56. ##################### i2cdump #########################
    57. include $(CLEAR_VARS)
    58. LOCAL_MODULE:=i2cdump
    59. LOCAL_SRC_FILES:= \
    60. tools/i2cdump.c
    61. LOCAL_C_INCLUDES += \
    62. $(LOCAL_PATH) \
    63. $(LOCAL_PATH)/include
    64. LOCAL_SHARED_LIBRARIES:= \
    65. libc
    66. LOCAL_STATIC_LIBRARIES := \
    67. i2c-tools
    68. LOCAL_CPPFLAGS += -DANDROID
    69. include $(BUILD_EXECUTABLE)
    70. ################### i2ctransfer #######################
    71. include $(CLEAR_VARS)
    72. LOCAL_MODULE:=i2ctransfer
    73. LOCAL_SRC_FILES:= \
    74. tools/i2ctransfer.c
    75. LOCAL_C_INCLUDES += \
    76. $(LOCAL_PATH) \
    77. $(LOCAL_PATH)/include
    78. LOCAL_SHARED_LIBRARIES:= \
    79. libc
    80. LOCAL_STATIC_LIBRARIES := \
    81. i2c-tools
    82. LOCAL_CPPFLAGS += -DANDROID
    83. include $(BUILD_EXECUTABLE)

    附上几个有关的链接:


    (52条消息) Android 平台下使用 i2c-tools_简单并快乐着的博客-CSDN博客

    (52条消息) i2c-tools工具_Linux驱动专栏的博客-CSDN博客_i2ctool工具

    [Android] i2c-toos 在 Android 上使用 - LeeAaron - 博客园 (cnblogs.com)

    (51条消息) 手把手教你使用 i2c-tools_嵌入式Linux系统开发的博客-CSDN博客_i2c-tools

     关于i2ctransfer的使用示例

    sh: ./i2c_test: not executable: 64-bit ELF file No such file or directory 相关链接:

    https://blog.csdn.net/baiyifei2016/article/details/125055949

    https://blog.csdn.net/u012830148/article/details/88425984

    c - Android not executable: 64-bit ELF file - Stack Overflow

    https://blog.csdn.net/m0_46296142/article/details/125986281

  • 相关阅读:
    JavaScript 保留关键字
    JS本地存储技术
    解决 Zlibrary 卡死/找不到域名/达到限额问题,Zlibrary最新地址
    计算机二级备考:Word 部分_2 排版
    华为机试C语言-找到比自己强的人数
    347. 前 K 个高频元素——大顶堆、小顶堆
    基于 MATLAB 的电力系统动态分析研究【IEEE9、IEEE68系节点】
    react-routerV6版本和V5版本的详细对比
    PHP数据类型和运算符
    MySQL5.5版本安装详细讲解
  • 原文地址:https://blog.csdn.net/happy08god/article/details/126466366