This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] Linux:AM5718:使用 libusb 库工作失败!

Guru**** 2562120 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/625599/linux-am5718-use-the-libusb-library-work-failed

工具/软件:Linux

您好!

我正在编写一个基于 libusb 的演示、并根据 SDK 版本的库构建演示、版本为3.1.0.6。

它在第一次运行、但我在第二次运行、它返回失败。

演示如下:

e2e.ti.com/.../7080.libusbdemo.zip

我在 AM57xx EVM 中运行演示,结果相同。

我希望您可以一边试一下、非常感谢!

此致

Qing

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    告诉我这是为什么?

    非常感谢!

    此致
    Qing
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    当您第二次运行时,它在哪里失败? 在开放时间?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Dwarakesh R:

    当我使用 libusb_bulk_transfer ()并且它返回-7时,错误消息为“资源暂时不可用”。 非常感谢!

    您可以在 am57xx EVM 板上重试。 AM335x 平台器件上没有此类问题。

    此致
    Qing

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Qing、

    您是否在内核 dmesg 日志中看到任何错误? 您能否在第一次成功运行和第二次失败运行之间检查 dmesg 日志?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Dwarakesh R:

    感谢您的快速响应!

    我非常确信在运行演示期间会生成"没有任何内核 dmesg 错误日志"。
    很奇怪!

    非常感谢!

    此致
    Qing
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Dwarakesh R:

    我最终启用调试日志、如下所示:
    [TIMESTAMP][threadID]医院级别[函数调用]
    --------------------------------------------------
    [0.000017][000003fA] libusb:调试[lib_init]创建了默认上下文
    [0.000197][000003fA] libusb:调试[libusb_init] libusb v1.0.21.11156
    [0.000316][000003fA] libusb:在/dev/bus/usb 上找到 usbfs 的调试[fs_usbfs_path]
    [0.000388][000003fA] libusb:支持调试[op_init]批量连续标志
    [0.000408][000003fA] libusb:支持调试[op_init]零长度数据包标志
    [0.000456][000003fA] libusb:调试[op_init] sysfs 可以关联器件
    [0.000473][000003fA] libusb:debug [op_init] sysfs 具有完整的描述符
    [0.004319][000003fb] libusb:调试[linux_udev_event_thread_main] udev 事件线程进入。
    [0.008041][000003fA] libusb:调试[Linux_get_device_address]获取器件地址:USB1分离:0
    [0.008067][000003fA] libusb:调试[Linux_get_device_address]扫描 USB1
    [0.008342][000003fA] libusb:调试[Linux_get_device_address] bus=1 dev=1
    [0.008363][000003fA] libusb:调试[Linux_enum_device] busnum 1 devaddr 1 session_id 257
    [0.008381][000003fA] libusb:调试[Linux_enumerate_device]为1/1分配新器件(会话257)
    [0.008961][000003fA] libusb:调试[Linux_get_device_address]获取器件地址:1-1分离:0
    [0.008983][000003fA] libusb:调试[Linux_get_device_address]扫描1-1
    [0.009217][000003fA] libusb:调试[Linux_get_device_address] bus=1 dev=2
    [0.009237][000003fA] libusb:调试[Linux_enum_device]总线 num 1 devaddr 2 session_id 258
    [0.009254][000003fA] libusb:调试[Linux_enumerate_device]为1/2分配新器件(会话258)
    [0.009473][000003fA] libusb:调试[Linux_get_parent_info] Dev 0x397d0 (1-1)具有父级0x39728 (USB1)端口1
    [0.009810][000003fA] libusb:调试[Linux_get_device_address]获取器件地址:USB2分离:0
    [0.009831][000003fA] libusb:调试[Linux_get_device_address]扫描 USB2
    [0.010056][000003fA] libusb:调试[linux_get_device_address] bus=2 dev=1
    [0.010076][000003fA] libusb:调试[Linux_enum_device] busnum 2 devaddr 1 session_id 513
    [0.010093][000003fA] libusb:调试[Linux_enum_device]为2/1分配新器件(会话513)
    [0.010583][000003fA] libusb:调试[Linux_get_device_address]获取器件地址:USB3分离:0
    [0.010604][000003fA] libusb:调试[Linux_get_device_address]扫描 USB3
    [0.010831][000003fA] libusb:调试[Linux_get_device_address] bus=3 dev=1
    [0.010851][000003fA] libusb:调试[Linux_enum_device] busnum 3 devaddr 1 session_id 769
    [0.010868][000003fA] libusb:调试[Linux_enum_device]为3/1分配新器件(会话769)
    [0.011378][000003fA] libusb:调试[Linux_get_device_address]获取器件地址:USB4分离:0
    [0.011399][000003fA] libusb:调试[Linux_get_device_address]扫描 USB4
    [0.011626][000003fA] libusb:调试[Linux_get_device_address] bus=4 dev=1
    [0.011645][000003fA] libusb:调试[Linux_enum_device] busnum 4 devaddr 1 session_id 1025
    [0.011662][000003fA] libusb:调试[Linux_enum_device]为4/1分配新器件(会话1025)
    [0.011893][000003fA] libusb:调试[usbi_add_pollfd]添加了 FD 6事件1.
    [0.011970][000003fA] libusb:使用 timerfd 进行超时调试[usbi_io_init]
    [0.011990][000003fA] libusb:调试[usbi_add_pollfd]添加了 FD 8事件1.
    [0.012012][000003fA] libusb:调试[libusb_get_device_list]
    [0.012067][000003fA] libusb:调试[lib_get_device_descriptor]
    [0.012084][000003fA] libusb:调试[lib_get_device_descriptor]
    [0.012098][000003fA] libusb:调试[lib_get_device_descriptor]
    [0.012112][000003fA] libusb:调试[libusb_get_device_descriptor]
    [0.012127][000003fA] libusb:调试[libusb_open]打开1.2
    [0.012200][000003fA] libusb:调试[usbi_add_pollfd]添加了 FD 9事件4.
    [0.012224][000003fA] libusb:调试[lib_clarbit_interface]接口0
    [0.012307][000003fA] libusb:调试[libusb_clear_halt]端点2.
    [0.012454][000003fA] libusb:调试[libusb_clear_halt]端点82
    ############ libusb_bulk_transfer
    [0.012650][000003fA] libusb:调试[libusb_bulk_transfer] QQqqqqqq

    [0.012680][000003fA] libusb:调试[lib_alloc_transfer]传输0x3af08
    [0.346513][000003fA] libusb:调试[libusb_submit_transfer]传输0x3af08
    [0.346539][000003fA] libusb:调试[submit_bulk_transfer]需要1个模板来进行长度为3的新传输
    [0.346611][000003fA] libusb:执行我们自己的事件处理的调试[lib_handle_events_timeout_completed]
    [0.346638][000003fA] libusb:修改调试[handle_events]轮询 FDS、重新分配
    [0.346664][000003fA] libusb:调试[handle_events] poll () 3个 FDS、在60000ms 内超时
    [0.346691][000003fA] libusb:调试[handle_events] poll ()返回1
    [0.346713][000003fA] libusb:调试[REGE_for_handle]模板 type=3 STATUS=0已传输=3
    [0.346731][000003fA] libusb:调试[handle_bulk_complete]处理批量话术1/1的完成状态0
    [0.346747][000003fA] libusb:调试[handle_bulk_complete]传输中的最后一个 URB ->完成!
    [0.346763][000003fA] libusb:调试[usbi_handle_transfer_complete]传输0x3af08具有回调 bb6f733b0
    [0.346778][000003fA] libusb:调试[SYNC_TRANSF_CB] actual_length=3
    [0.346810][000003fA] libusb:调试[lib_free_transfer]传输0x3af08
    [错误消息:]
    资源暂时不可用:资源暂时不可用
    BytesWritten=3.
    ############ libusb_bulk_transfer
    [0.346912][000003fA] libusb:调试[libusb_bulk_transfer] QQqqqqq

    [0.346933][000003fA] libusb:调试[lib_alloc_transfer]传输0x3af08
    [0.346949][000003fA] libusb:调试[lib_submit_transfer]传输0x3af08
    [0.3469665][000003fA] libusb:调试[submit_bulk_transfer]需要1个模板用于长度为64的新传输
    [0.346996][000003fA] libusb:执行我们自己的事件处理的调试[lib_handle_events_timeout_completed]
    [0.347014][000003fA] libusb:调试[handle_events] poll () 3个 FDS、在60000ms 内超时
    [0.356049][000003fA] libusb:调试[handle_events] poll ()返回1
    [0.356073][000003fA] libusb:调试[REGE_for_handle]模板 type=3 STATUS=0已传输=1
    [0.356090][000003fA] libusb:调试[handle_bulk_complete]处理批量话术1/1的完成状态0
    [0.356105][000003fA] libusb:调试[handle_bulk_complete]传输中的最后一个 URB ->完成!
    [0.356121][000003fA] libusb:调试[usbi_handle_transfer_complete]传输0x3af08具有回调 bb6f733b0
    [0.356136][000003fA] libusb:调试[SYNC_TRANSF_CB] actual_length=1
    [0.356154][000003fA] libusb:调试[libusb_five_transfer]传输0x3af08
    [错误消息:]
    资源暂时不可用:资源暂时不可用
    1:12 0
    [0.356204][000003fA] libusb:调试[libusb_release_interface]接口0
    [0.356251][000003fA] libusb:调试[libusb_close]
    [0.356279][000003fA] libusb:调试[usbi_remove_pollfd]删除了 FD 9

    它对您是否有帮助?

    此致
    Qing
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我已经解决了这个问题。

    打开 USB 器件后、我只需添加 API lib_reset_device (devh)。

    传输时没有任何错误。

    所有的填充物都是作为附件的。 e2e.ti.com/.../2061.LibUSBSimpleDemo.c

    此致

    Qing

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Qing、

    了解它、您就能使它正常工作。 我只是想知道、当您删除"libusb_clear_halt"并同时删除"libusb_reset_device"并第二次检查时会发生什么情况?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,
    在我删除"libusb_clear_halt"和"libusb_reset_device"后,该程序只能在第一次正常运行。 当我第二次运行它时,这个程序将在 libusb_bulk_transfer()处被阻止。

    此致
    Qing