2013-07-17 31 views
0

为了向外部设备发送命令,我使用FTDI的TTL-232R-3V3线。我想在那里设定具体的路径,以高或低。奇偶或停止位不是必需的。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

某些示例或其某个依赖项正在使用pthread,但未配置Makefile。

编辑Makefile并将-pthread添加到CFLAGSLDFLAGS。您可以通过添加行来达到这一目的。

CFLAGS += -pthread 
LDFLAGS += -pthread 

但是,您可能根本不需要D2XX库。 FTDI内核驱动程序应该创建一个可以像“真实”串行端口一样使用的设备。

+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);'好的,那个教程有很多重要的部分,你只需要声明fd为'int fd;'''''' 'termios.h'文件已经在你的Linux系统上,它是系统头文件之一。如果没有,您可能需要使用软件包管理器来安装系统头文件。 –

+0

好的。我现在已经管理(我希望如此)打开,自定义和关闭端口。 [在这里查看代码](http://ubuntuone.com/2OI7ffdDMjpZWOuZ5xFbrG)。但我不知道我必须使用什么命令来设定一条路径为高/低。我有一个LED连接到地,另一条线连接到“串行端口”连接到我的电脑时打开。我该如何关闭又重新打开它? – IndexOutOfBoundsException