2013-07-17 4 views
0

, чтобы отправлять команды на внешнее устройство, я использую провод TTL-232R-3V3 от FTDI. Я хочу установить там определенные пути к высоким или низким. Биты четности или остановки не нужны.FTDI TTL с Linux

Моя операционная система - Ubuntu Linux 13.04.

Я хочу разработать приложение Java или C, которое может отправлять эти команды. Но есть ошибка, когда я пытаюсь установить драйвер для провода:

Я следую инструкции this, и я решил установить драйвер D2XX. Я думаю, что я успешно установил общий объект и статическую библиотеку, как описано в шаге 2.1, так или иначе, я не получил сообщений об ошибках.

Но когда я пытаюсь скомпилировать пример кода, как описано в шаге 3, я получил следующий вывод, выполняющий команду make -B.

for n in BitMode EEPROM/erase EEPROM/read EEPROM/write EEPROM/user/read EEPROM/user/size EEPROM/user/write Events LargeRead MultiThread SetVIDPID Simple Timeouts ; do make -C $n || exit 1; done 
make[1]: Betrete Verzeichnis '/home/robin/Dokumente/Java/Stepper/lib/release/examples/BitMode' 
gcc main.c -o bitmode -Wall -Wextra -L. -lftd2xx -Wl,-rpath /usr/local/lib 
make[1]: Verlasse Verzeichnis '/home/robin/Dokumente/Java/Stepper/lib/release/examples/BitMode' 
make[1]: Betrete Verzeichnis '/home/robin/Dokumente/Java/Stepper/lib/release/examples/EEPROM/erase' 
gcc main.c -o erase -Wall -Wextra -L. -lftd2xx -Wl,-rpath /usr/local/lib 
make[1]: Verlasse Verzeichnis '/home/robin/Dokumente/Java/Stepper/lib/release/examples/EEPROM/erase' 
make[1]: Betrete Verzeichnis '/home/robin/Dokumente/Java/Stepper/lib/release/examples/EEPROM/read' 
gcc main.c -o read -Wall -Wextra -L. -lftd2xx -Wl,-rpath /usr/local/lib 
make[1]: Verlasse Verzeichnis '/home/robin/Dokumente/Java/Stepper/lib/release/examples/EEPROM/read' 
make[1]: Betrete Verzeichnis '/home/robin/Dokumente/Java/Stepper/lib/release/examples/EEPROM/write' 
gcc main.c -o write -Wall -Wextra -L. -lftd2xx -Wl,-rpath /usr/local/lib 
make[1]: Verlasse Verzeichnis '/home/robin/Dokumente/Java/Stepper/lib/release/examples/EEPROM/write' 
make[1]: Betrete Verzeichnis '/home/robin/Dokumente/Java/Stepper/lib/release/examples/EEPROM/user/read' 
gcc main.c -o readua -Wall -Wextra -L. -lftd2xx -Wl,-rpath /usr/local/lib 
make[1]: Verlasse Verzeichnis '/home/robin/Dokumente/Java/Stepper/lib/release/examples/EEPROM/user/read' 
make[1]: Betrete Verzeichnis '/home/robin/Dokumente/Java/Stepper/lib/release/examples/EEPROM/user/size' 
gcc main.c -o sizeua -Wall -Wextra -L. -lftd2xx -Wl,-rpath /usr/local/lib 
make[1]: Verlasse Verzeichnis '/home/robin/Dokumente/Java/Stepper/lib/release/examples/EEPROM/user/size' 
make[1]: Betrete Verzeichnis '/home/robin/Dokumente/Java/Stepper/lib/release/examples/EEPROM/user/write' 
gcc main.c -o writeua -Wall -Wextra -L. -lftd2xx -Wl,-rpath /usr/local/lib 
make[1]: Verlasse Verzeichnis '/home/robin/Dokumente/Java/Stepper/lib/release/examples/EEPROM/user/write' 
make[1]: Betrete Verzeichnis '/home/robin/Dokumente/Java/Stepper/lib/release/examples/Events' 
gcc main.c -o events -Wall -Wextra -L. -lftd2xx -Wl,-rpath /usr/local/lib 
make[1]: Verlasse Verzeichnis '/home/robin/Dokumente/Java/Stepper/lib/release/examples/Events' 
make[1]: Betrete Verzeichnis '/home/robin/Dokumente/Java/Stepper/lib/release/examples/LargeRead' 
gcc main.c -o largeread -Wall -Wextra -L. -lftd2xx -Wl,-rpath /usr/local/lib 
make[1]: Verlasse Verzeichnis '/home/robin/Dokumente/Java/Stepper/lib/release/examples/LargeRead' 
make[1]: Betrete Verzeichnis '/home/robin/Dokumente/Java/Stepper/lib/release/examples/MultiThread' 
gcc main.c -o multi -Wall -Wextra -L. -lftd2xx -Wl,-rpath /usr/local/lib 
make[1]: Verlasse Verzeichnis '/home/robin/Dokumente/Java/Stepper/lib/release/examples/MultiThread' 
gcc main.c -o multi -Wall -Wextra -L. -lftd2xx -Wl,-rpath /usr/local/lib 
/usr/bin/ld: /tmp/ccoAsrRg.o: undefined reference to symbol  '[email protected]@GLIBC_2.2.5' 
/usr/bin/ld: note: '[email protected]@GLIBC_2.2.5' is defined in DSO /lib/x86_64-linux- gnu/libpthread.so.0 so try adding it to the linker command line 
/lib/x86_64-linux-gnu/libpthread.so.0: could not read symbols: Ungültiger Vorgang 
collect2: Fehler: ld gab 1 als Ende-Status zurück 
make[1]: *** [multi] Fehler 1 
make[1]: Verlasse Verzeichnis '/home/robin/Dokumente/Java/Stepper/lib/release/examples /MultiThread' 
make: *** [subdirs] Fehler 1 

Как исправить эту ошибку? Кто-нибудь сталкивается с этим проводом и Linux? Спасибо заранее!

ответ

0

Некоторые образцы, или одна из его зависимостей, используют pthreads, но Makefile не настроен для этого.

Редактировать Makefile и добавить -pthread в CFLAGS и LDFLAGS. Вы, вероятно, можете это сделать, добавив строки

CFLAGS += -pthread 
LDFLAGS += -pthread 

Однако вам может не понадобиться библиотека D2XX. Драйвер ядра FTDI должен создать устройство n, которое можно использовать как «настоящий» последовательный порт.

+0

спасибо! Извините за столь поздний ответ. Да, вы правы, есть устройство под названием 'ttyUSB0'. Я попытался открыть последовательный порт, как описано в [this] (https://en.wikibooks.org/wiki/Serial_Programming:Unix/termios#open.282.29). Я загрузил файл заголовка termios, но я не могу его выполнить. Что такое fd? Это переменная? Eclipse просто замечает: 'Symbol 'fd' не может быть разрешен'. Вы (или кто-то еще) знаете хороший учебник? – IndexOutOfBoundsException

+0

fd - это обычное имя переменной для дескриптора файла. Как и в 'int fd = open ("/dev/ttyUSB0 ", O_RDWR | O_EXCL);' Ok да, этот учебник содержит большинство важных частей, вам просто нужно объявить fd как 'int fd;' Обычно вы должны иметь 'termios.h' уже в вашей системе Linux, это один из заголовков системы. Если нет, вам может понадобиться использовать диспетчер пакетов для установки заголовков системы. –

+0

Хорошо. Теперь я сумел (надеюсь) открыть, настроить и закрыть порт. [Посмотреть код здесь] (http://ubuntuone.com/2OI7ffdDMjpZWOuZ5xFbrG). Но я не знаю, какую команду мне нужно использовать, чтобы установить один путь на высокий/низкий. У меня есть один светодиод, подключенный к земле и к одному другому проводу, который включен, когда я подключаю «последовательный порт» к компьютеру. Как отключить и снова включить его? – IndexOutOfBoundsException

Смежные вопросы