SYNC FIFO FT245 모드에서 FT2232H를 사용하고 있으며 리눅스에서 작동하지 않습니다. 내 코드는 Mac OS X에서 완벽하게 작동합니다. 하지만 리눅스에서는 그렇지 않습니다.ftdi_usb_open()은 Linux에서 -8을 반환하지만 Mac에서 동일한 코드가 작동합니다
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
사용되는 모든 하드웨어가 동일 (ft2232h와 맥북 프로 2010 + 내 USB 장치)입니다.
1) 장치 노드에 대한 권한이 있습니까? Linux 시스템은 일반적으로 인식 된 USB 장치를 일반 사용자가 사용할 수 있도록 udev 규칙을 사용합니다. OSX는 기본적으로 그것을 부여하는 것 같다. 2) 분리해야 할 USB 직렬 드라이버에 의해 이미 주장 된 것입니까? 리눅스는 배포판의 일부로 이러한 경향이 있으며, OSX에서는 특별히 설치해야합니다. 즉 우발적으로 간섭 할 가능성이 적습니다. –
좋아, 알았다. 커널에서 rmmod-ed ftdi_sio (이유 2) 및 루트로 내 응용 프로그램을 runned (또한 이유 1) 어떻게 이러한 작업을 자동으로 만들 수 있습니까? 아마도 루트 권한, 특히 ftdi_sio의 rmmoding을 요구하지 않을 수 있습니까? 몇 가지 udev 블랙리스트가 있다는 것을 알고 있습니다. 그러나 제 장치의 모든 사용자가 일부 모듈을 블랙리스트 할 필요가 없다는 것을 더 일반적인 것으로하고 싶습니다. –
일류 접근법은 사용자 정의 VID/PID를 사용하여 일반적인 리눅스 드라이버는 USB 시리얼 장치로 인식하지 못합니다. 하지만 udev 규칙에 대한 지침이나 스크립트를 제공하여 권한을 부여해야하므로 USB 직렬에서도 무시 무시한 방식으로이를 고려할 수 있습니다. –