NanoPC-T2(S5P4418)无法通过Android usb host API识别两个以上USB设备

NanoPC-T2(S5P4418)无法通过Android usb host API识别两个以上USB设备

当我连接一个打印机和一个USB转串口设备到NanoPC-T2上时,发现不能识别两个以上的USB设备。只有第一个识别的设备能够会一个成功的配置(configration),而后的设备无法得到一个正常的配置(configration),这样就无法正确识别到该设备。这个问题困扰了我很久,我甚至怀疑我程序中没有打印设备没有关闭的问题,供电的问题,甚至包括NanoPC-T2硬件问题。最开始我的判断是一半对一半,一半是软件问题;一半是硬件问题。我做了如下测试得出一些结论:

  1. 查看Linux内核LOG信息dmesg判断是否是内核无法识别
    结论:Linux内核识别USB正常,没有出现disconnected。

  2. 交换两个USB设备所在端口
    结论:开发板是的物理端口之间没有区别,同样的问题。

  3. 插入设备重新开机,开机后打开测试软件「USB Device Info」也同样是这样
    这里写图片描述
    注:不用在意两个图的Product ID不同,这个只是这个软件的设计方式。可以看到能识别的情况下可以读取Configration#Interfaces等等信息,识别不出来的情况下就读不出来了。

  4. 更换其它Android设备测试结果是可以读取多个USB设备的,排除Android API的问题;

  5. 使用外接USB HUB测试是同样的现象,排除USB HUB问题。

到目前为止,由于Android USB HOST Api也是CPU厂商各自实现的,所以这里初步判断此问题是三星为Android底层实现的usb host **.so(S5P4418库文件)有BUG,默认用户只插入一个USB设备了。

有新的进度再进一步更新。

20161127更:
查看libusbhost.so(源码位置:system/core/libusbhost)库文件所包含的其它库文件,由下面内容可以看到,libusb只包含了常规的libc libcutils lim libstdc++库。

$ readelf -d libusbhost.so

Dynamic section at offset 0x1e88 contains 23 entries:
  Tag        Type                         Name/Value
 0x00000003 (PLTGOT)                     0x2f70
 0x00000002 (PLTRELSZ)                   264 (bytes)
 0x00000017 (JMPREL)                     0xce8
 0x00000014 (PLTREL)                     REL
 0x00000011 (REL)                        0xcc8
 0x00000012 (RELSZ)                      32 (bytes)
 0x00000013 (RELENT)                     8 (bytes)
 0x6ffffffa (RELCOUNT)                   2
 0x00000006 (SYMTAB)                     0x148
 0x0000000b (SYMENT)                     16 (bytes)
 0x00000005 (STRTAB)                     0x5c8
 0x0000000a (STRSZ)                      1228 (bytes)
 0x00000004 (HASH)                       0xa94
 0x00000001 (NEEDED)                     Shared library: [libc.so]
 0x00000001 (NEEDED)                     Shared library: [libcutils.so]
 0x00000001 (NEEDED)                     Shared library: [libm.so]
 0x00000001 (NEEDED)                     Shared library: [libstdc++.so]
 0x0000000e (SONAME)                     Library soname: [libusbhost.so]
 0x0000001a (FINI_ARRAY)                 0x2e84
 0x0000001c (FINI_ARRAYSZ)               4 (bytes)
 0x0000001e (FLAGS)                      BIND_NOW
 0x6ffffffb (FLAGS_1)                    Flags: NOW
 0x00000000 (NULL)                       0x0

再向上查可以查到

frameworks/base/services/usb/java/com/android/server/usb

libandroid_servers.so
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 10
    评论
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

袁保康

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值