zoukankan      html  css  js  c++  java
  • I.MX6 Android i2c-tools porting

    /**************************************************************************
     *                   I.MX6 Android i2c-tools porting
     * 说明:
     *     判断I2C总线设备是否存在,每次都去查dmesg,实在是烦了,于是还是移植
     * 一个i2c-tools比较好,不用翻那长长内核信息。
     *  
     *                                        2016-3-31 深圳 南山平山村 曾剑锋
     *************************************************************************/
    
    
    一、参考资料:
        1. Android 平台下使用 i2c-tools
            http://my.oschina.net/luoly/blog/368881
        2. 树莓派学习笔记——I2C Tools 学习笔记
            http://blog.csdn.net/xukai871105/article/details/15029843
        3. Linux I2C工具查看配置I2C设备 
            http://blog.chinaunix.net/uid-26895763-id-3478882.html
    
    二、download:
        groeck/i2c-tools:
            https://github.com/groeck/i2c-tools
    
    三、Decompress:
        zengjf@zengjf:~$ unzip i2c-tools-master.zip
        zengjf@zengjf:~$ mv i2c-tools-master ~/myandroid/external/i2c-tools/
        
    四、cat external/i2c-tools/Android.mk
        # 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/util.c tools/i2cbusses.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)
    
    五、compile error:
        1. 现象:
            ......
            PRODUCT_COPY_FILES frameworks/base/data/sounds/ringtones/ogg/Solarium.ogg:system/media/audio/ringtones/Solarium.ogg ignored.
            No private recovery resources for TARGET_DEVICE sabresd_6dq
            make: Entering directory `/home/zengjf/myandroid'
            target thumb C: i2c-tools <= /home/zengjf/myandroid/external/i2c-tools//lib/smbus.c
            target StaticLib: i2c-tools (out/target/product/sabresd_6dq/obj/STATIC_LIBRARIES/i2c-tools_intermediates/i2c-tools.a)
            target thumb C: i2cdetect <= /home/zengjf/myandroid/external/i2c-tools/lib/smbus.c
            target thumb C: i2cdetect <= /home/zengjf/myandroid/external/i2c-tools/tools/i2cdetect.c
            /home/zengjf/myandroid/external/i2c-tools/tools/i2cdetect.c:157:13: error: 'I2C_FUNC_SMBUS_PEC' undeclared here (not in a function)
            make: *** [out/target/product/sabresd_6dq/obj/EXECUTABLES/i2cdetect_intermediates/tools/i2cdetect.o] Error 1
            make: Leaving directory `/home/zengjf/myandroid'
        2. 解决办法:
            cat external/i2c-tools/include/i2c/smbus.h
                .....
                /* Compatibility defines  添加宏声明*/
                #ifndef I2C_SMBUS_I2C_BLOCK_BROKEN
                #define I2C_SMBUS_I2C_BLOCK_BROKEN I2C_SMBUS_I2C_BLOCK_DATA
                #endif
                #ifndef I2C_FUNC_SMBUS_PEC
                #define I2C_FUNC_SMBUS_PEC I2C_FUNC_SMBUS_HWPEC_CALC
                #endif
                
                extern __s32 i2c_smbus_access(int file, char read_write, __u8 command,
                                  int size, union i2c_smbus_data *data);
                
                extern __s32 i2c_smbus_write_quick(int file, __u8 value);
                ......
        3. 正常现象:
            No private recovery resources for TARGET_DEVICE sabresd_6dq
            make: Entering directory `/home/zengjf/myandroid'
            target thumb C: i2cdetect <= /home/zengjf/myandroid/external/i2c-tools/tools/i2cdetect.c
            target Executable: i2cdetect (out/target/product/sabresd_6dq/obj/EXECUTABLES/i2cdetect_intermediates/LINKED/i2cdetect)
            target Symbolic: i2cdetect (out/target/product/sabresd_6dq/symbols/system/bin/i2cdetect)
            Export includes file: /home/zengjf/myandroid/external/i2c-tools/Android.mk -- out/target/product/sabresd_6dq/obj/EXECUTABLES/i2cdetect_intermediates/export_includes
            target Strip: i2cdetect (out/target/product/sabresd_6dq/obj/EXECUTABLES/i2cdetect_intermediates/i2cdetect)
            Install: out/target/product/sabresd_6dq/system/bin/i2cdetect
            Import includes file: out/target/product/sabresd_6dq/obj/EXECUTABLES/i2cget_intermediates/import_includes
            target thumb C: i2cget <= /home/zengjf/myandroid/external/i2c-tools/tools/i2cget.c
            target Executable: i2cget (out/target/product/sabresd_6dq/obj/EXECUTABLES/i2cget_intermediates/LINKED/i2cget)
            target Symbolic: i2cget (out/target/product/sabresd_6dq/symbols/system/bin/i2cget)
            Export includes file: /home/zengjf/myandroid/external/i2c-tools/Android.mk -- out/target/product/sabresd_6dq/obj/EXECUTABLES/i2cget_intermediates/export_includes
            target Strip: i2cget (out/target/product/sabresd_6dq/obj/EXECUTABLES/i2cget_intermediates/i2cget)
            Install: out/target/product/sabresd_6dq/system/bin/i2cget
            Import includes file: out/target/product/sabresd_6dq/obj/EXECUTABLES/i2cset_intermediates/import_includes
            target thumb C: i2cset <= /home/zengjf/myandroid/external/i2c-tools/tools/i2cset.c
            target Executable: i2cset (out/target/product/sabresd_6dq/obj/EXECUTABLES/i2cset_intermediates/LINKED/i2cset)
            target Symbolic: i2cset (out/target/product/sabresd_6dq/symbols/system/bin/i2cset)
            Export includes file: /home/zengjf/myandroid/external/i2c-tools/Android.mk -- out/target/product/sabresd_6dq/obj/EXECUTABLES/i2cset_intermediates/export_includes
            target Strip: i2cset (out/target/product/sabresd_6dq/obj/EXECUTABLES/i2cset_intermediates/i2cset)
            Install: out/target/product/sabresd_6dq/system/bin/i2cset
            Import includes file: out/target/product/sabresd_6dq/obj/EXECUTABLES/i2cdump_intermediates/import_includes
            target thumb C: i2cdump <= /home/zengjf/myandroid/external/i2c-tools/tools/i2cdump.c
            target Executable: i2cdump (out/target/product/sabresd_6dq/obj/EXECUTABLES/i2cdump_intermediates/LINKED/i2cdump)
            target Symbolic: i2cdump (out/target/product/sabresd_6dq/symbols/system/bin/i2cdump)
            Export includes file: /home/zengjf/myandroid/external/i2c-tools/Android.mk -- out/target/product/sabresd_6dq/obj/EXECUTABLES/i2cdump_intermediates/export_includes
            target Strip: i2cdump (out/target/product/sabresd_6dq/obj/EXECUTABLES/i2cdump_intermediates/i2cdump)
            Install: out/target/product/sabresd_6dq/system/bin/i2cdump
            make: Leaving directory `/home/zengjf/myandroid'
            zengjf@zengjf:~/myandroid$ 
        4. adb push <编译出来的可执行程序> /data/local
    
    六、i2cdetect test:
        1. test1:
            1|root@android:/data/local # ./i2cdetect -l                                    
            i2c-3   i2c             i2c-gpio3        I2C adapter
            i2c-0   i2c             imx-i2c          I2C adapter
            i2c-1   i2c             imx-i2c          I2C adapter
            i2c-2   i2c             imx-i2c          I2C adapter
            root@android:/data/local # 
        2. test2:
            root@android:/data/local # ./i2cdetect -y -r 2                                 
     1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
            00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
            10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
            20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
            30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
            40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
            50: UU -- -- -- -- UU -- -- -- -- -- -- -- -- -- -- 
            60: -- -- -- -- -- -- -- -- UU -- -- -- -- -- -- -- 
            70: -- -- -- -- -- -- -- --
    
    七、i2cget test:
        1|root@android:/data/local # ./i2cget -y 1 0x08 0x03                           
        Error: Could not set address to 0x08: Device or resource busy
        1|root@android:/data/local # ./i2cget -f -y 1 0x08 0x03                        
        0x21
        1|root@android:/data/local # 
  • 相关阅读:
    基于emWin的WAV,MP3软解软件播放器,带类似千千静听频谱,含uCOS-III和FreeRTOS两个版本
    [Linux-CentOS7]yum清华源CentOS7
    [Python]random生成随机6位验证码
    [Python]公司接口返回值规范
    [MacOS]Chrome 强制刷新
    Mybatis的XML中数字不为空的判断
    康师傅JVM:执行引擎(十二)
    Qt 随机颜色的生成
    Qt QVector常见使用方法
    Qt 判断文件是否存在
  • 原文地址:https://www.cnblogs.com/zengjfgit/p/5340758.html
Copyright © 2011-2022 走看看