【问题标题】:ftdi_usb_open() returns -8 on Linux, but the same code is working on Macftdi_usb_open() 在 Linux 上返回 -8,但相同的代码在 Mac 上运行
【发布时间】:2013-05-07 18:45:23
【问题描述】:

我在 SYNC FIFO FT245 模式下使用 FT2232H,我无法让它在 Linux 上运行,我的代码在 Mac OS X 上完美运行,但在 Linux 上却不行。

我已经安装了 libftdi1 和 libftdi-dev 软件包。

相关代码部分:

    #define PID 0x6010

    .
    .
    .

    if(vftdic == NULL)
    {
        this->ftdic = static_cast<struct ftdi_context*>(malloc(sizeof(struct ftdi_context)));
    }
    else
    {
        this->ftdic = vftdic;
    }
    int f;
    // Init 1. channel
    if (ftdi_init(ftdic) < 0)
    {
        throw DeviceException("ftdi_init failure\n", FTDI_ERROR);
    }
    ftdi_set_interface(ftdic, INTERFACE_A);
    f = ftdi_usb_open(ftdic, 0x0403, PID);
    if (f < 0 && (f != -5))
    {
        //here f is equal to -8 only on Linux
        throw DeviceException("Unable to open FTDI device, channel A\n", FTDI_ERROR);
    }

这是来自 lsusb 的列表:

Bus 001 Device 005: ID 0403:6010 Future Technology Devices International, Ltd FT2232C Dual USB-UART/FIFO IC

使用的所有硬件都相同(MacBook Pro 2010 + 我的带有 ft2232h 的 USB 设备)。

【问题讨论】:

  • 1) 你有设备节点的权限吗? Linux 系统通常使用 udev 规则让普通用户可以使用已识别的 USB 设备; OSX 似乎默认授予它。 2)它是否可能已经被 USB 串行驱动程序声明了,您需要将其分离? Linux 倾向于将这些作为分发的一部分,在 OSX 上必须专门安装它们,即不太可能意外干扰。
  • 好的,我知道了。我有来自内核的 rmmod-ed ftdi_sio(原因 2)并以 root 身份运行我的应用程序(也是原因 1),我怎样才能使这些操作自动进行并且可能不要求 root 权限,尤其是 ftdi_sio 的 rmmoding?我知道有一些 udev 黑名单,但我希望它更通用,我的设备的任何用户都不必将某些模块列入黑名单..
  • 第一流的方法是使用自定义的 VID/PID,典型的 linux 驱动程序不会将其识别为 USB 串行设备。但是无论如何,您都需要为 udev 规则提供说明或脚本以授予权限,因此您也可以考虑为 USB 串行上的忽略怪癖这样做。
  • libusb 之类的东西还可以尝试从股票驱动程序中回收所需的设备 - 不知道这是否适用于您的 ftdi 库。
  • 谢谢 :),我可能会更改 EEPROM 中的 PID,因为它是最简单的解决方案,但我仍然需要修复权限。

标签: linux ftdi


【解决方案1】:

您使用的用户帐户是否有权访问原始 USB 总线?检查位于/dev/bus/usb 下方某处的与您的 FTDI 对应的设备文件的权限——就像您无权访问它一样。

在这种情况下,添加一些 UDev 规则以将设备文件置于某个专用组的所有权中,并将您自己添加到该组的成员中。

【讨论】:

  • 哦权限,我错过了那个.. 认为 USB 设备没有那么受限。自从我上次每天使用 linux 以来已经很久了:)
  • 做了快速而肮脏的检查,如果它实际上是权限问题,并以 root 身份运行我的程序,但它都是一样的。错误代码 -8。
【解决方案2】:

除了确保您拥有设备节点的权限外,您还必须确认没有其他驱动程序(例如通常随 linux 发行版提供的 USB 串行驱动程序)已声明该接口。

【讨论】:

    猜你喜欢
    • 2021-07-27
    • 1970-01-01
    • 2021-08-26
    • 2016-02-25
    • 2022-11-10
    • 1970-01-01
    • 2018-04-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多