ftdi_usb_open()在Linux上返回-8,但相同的代码在Mac上运行

时间:2013-05-07 18:45:24

标签: linux ftdi

我在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 +我的usb设备,ft2232h)。

2 个答案:

答案 0 :(得分:2)

您使用的用户帐户是否有权访问原始USB总线?检查位于/dev/bus/usb以下某处的FTDI对应的设备文件的权限 - 大多数情况下您没有权限访问它。

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

答案 1 :(得分:1)

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