目录

1. VCP驱动和D2XX驱动的区别

2. 使用VCP驱动

3. 卸载VCP驱动

4. 安装D2XX驱动

5. 本地编译和运行D2XX例程

6.  交叉编译

7. 打包库


1. VCP驱动和D2XX驱动的区别

VCP是Virtual COM Port的简称,VCP驱动是通用的虚拟串口驱动,一般系统是内嵌此驱动。D2XX驱动是FTDI为其USB桥接芯片设计的驱动程序,可以提供更多的USB虚拟设备支持(即FTDI独有的MPSSE功能),例如USB转SPI,USB转I2C等。

2. 使用VCP驱动

2.1 打开终端,输入dmesg | grep FTDI(当前插入的FT4232H的平台,4路串口)

android dp驱动 dp驱动安装_linux

 2.2 minicom

在终端中输入 : sudo apt-get install minicom

执行minicom:sudo minicom

按键CTRL + A,再按键Z:进入帮助界面

按键O:进入配置minicom

选择“Serial port setup”: 进入串口设置,设置对应的串口参数

可以保存为默认设置:选择“Save setup as dfl”

快速打开对应串口的方法: sudo minicom -D /dev/ttyUSB0

2.3 LOOP测试

将FT4232H的第一个串口的TXD和RXD短接,然后在minicom界面打字就可以看到接收到的数据(因为是Loop测试,所以输入什么字符串就接收到什么字符串)

android dp驱动 dp驱动安装_linux_02

3. 卸载VCP驱动

在Linux系统中,VCP驱动和D2XX驱动是不兼容的,所以如果要使用D2XX驱动,需要先卸载VCP驱动。

sudo rmmod ftdi_sio
sudo rmmod usbserial

当FTDI的设备重新插入或者复位后,VCP驱动又会加载,所以需要再次卸载VCP。

4. 安装D2XX驱动

下载对应平台系统的D2XX驱动。

4.1 本地编译

拷贝库文件到/usr/local/lib

android dp驱动 dp驱动安装_linux_03

sudo cp -r lib* /usr/local/lib

android dp驱动 dp驱动安装_android dp驱动_04

 进入这个文件夹内,进入终端link库和修改权限(注意版本号和下载的D2XX版本号要一致)。

sudo ln –s libftd2xx.so.1.4.24 libftd2xx.so
sudo chmod 0755 libftd2xx.so.1.4.24

链接用于选择默认驱动程序文件。通过使用版本编号的库文件,可以将任何程序链接到库的特定版本。

4.2 交叉编译

和本地编译类似,将对应的库文件拷贝到交叉编辑器所在的库文件夹内即可,然后进入这个文件夹内,使用终端link库和修改权限,和本地编译一样。

5. 本地编译和运行D2XX例程

D2XX包括动态库(.so)和静态库(.a)。

之前下载的D2XX文件夹中有一个Examples的文件夹,进入这个文件夹,在终端中执行

make –B

编译OK后进入可以进入其中一个例程运行,例如Bitmode

sudo ./bitmode_static

注意,这里有一个VirutalBox的问题,当VB设置为1个CPU 的时候,运行例程会提示错误,可以把CPU改为2个既可以运行成功。

android dp驱动 dp驱动安装_android dp驱动_05

运行结果:

Device 0 Serial Number - FT2U6WIKA
Device 1 Serial Number - FT2U6WIKB
Device 2 Serial Number - FT2U6WIKC
Device 3 Serial Number - FT2U6WIKD
Opened device FT2U6WIKA
FT_Read read 16 bytes
Opened device FT2U6WIKB

还有记得每次要卸载VCP驱动。

6.  交叉编译

6.1 下载对应的交叉编译器

例如对应的交叉编译器为:

gcc-linaro-10.2.1-2021.02-x86_64_aarch64-linux-gnu

6.2 下载对应的d2xx

根据平台信息下载对应的d2xx库,例如ARMv8

android dp驱动 dp驱动安装_android dp驱动_06

 6.3 配置环境变量PATH

将编译器的路径添加到PATH,例如编辑器在work文件夹内

编辑器的路径:/work/gcc-linaro-4.9.4-2017.01-x86_64_aarch64-linux-gnu/bin

用管理员打开gedit(sudo gedit),然后再打开/etc/bash.bashrc,在最后添加

export PATH=$PATH:/work/gcc-linaro-4.9.4-2017.01-x86_64_aarch64-linux-gnu/bin

在终端运行对应的gcc确认是否设置OK

aarch64-linux-gnu-gcc -v

也可以运行

echo $PATH

查看PATH的路径是否正确。

6.4 库拷贝

将之前下载的d2xx库里面libftd2xx-arm-v8-1.4.24/release/build/文件夹下的所有文件拷贝到编译器的库路径内,然后在这个路径内终端中执行

sudo ln –s libftd2xx.so.1.4.24 libftd2xx.so
sudo chmod 0755 libftd2xx.so.1.4.24

6.5 修改Rules.make

d2xx库里面examples文件夹下有一个Rules.make文件,编辑这个文件。

6.5.1 增加CC变量

在文件前面添加

CC = aarch64-linux-gnu-gcc

 6.5.2 更改库路径

文件中LINKER_OPTIONS和CFLAGS中默认的路径是/usr/local/lib,改成编译器的库路径

ifeq ($(CC), gcc)
LINKER_OPTIONS := -Wl,-rpath /usr/local/lib
CFLAGS = -Wall -Wextra $(DEPENDENCIES) $(LINKER_OPTIONS) -L/usr/local/lib
DYNAMIC_LINK_OPTIONS := -Wl,-rpath /usr/local/lib
endif

ifeq ($(CC), aarch64-linux-gnu-gcc)
LINKER_OPTIONS := -Wl,-rpath /work/gcc-linaro-4.9.4-2017.01-x86_64_aarch64-linux-gnu/lib
CFLAGS = -Wall -Wextra $(DEPENDENCIES) $(LINKER_OPTIONS) -L/work/gcc-linaro-4.9.4-2017.01-x86_64_aarch64-linux-gnu/lib
DYNAMIC_LINK_OPTIONS := -Wl,-rpath -L/work/gcc-linaro-4.9.4-2017.01-x86_64_aarch64-linux-gnu/lib
endif

6.6 (可选)修改make文件

有些例子可能会出现编译错误,一些是没有包含Rules.make文件,例如BitMode中的make文件

#TOPDIR  := $(shell cd ..; pwd)
#include $(TOPDIR)/Rules.make

这2句被注释掉了,可以打开,然后把DYNAMIC_LINK_OPTIONS注释掉。

7. 打包库

某些情况下可能会需要通过库压缩包中o文件打包自己的库

在库文件夹/release/build/下新建一个makefile文件,使用文本编辑器添加

OBJS_USB = ./libusb/libusb/*.o
OBJS_OS = ./libusb/libusb/os/*.o
OBJS_D2XX = ./libftd2xx/*.o
OBJS_EEPROM = ./libftd2xx/EEPROM/*.o

CC = aarch64-linux-gnu-gcc
AR = aarch64-linux-gnu-ar

all: lib_dynamic lib_static

lib_dynamic:
	$(CC) -shared -fpic -o ./libftd2xx_new.so $(OBJS_USB) $(OBJS_OS) $(OBJS_D2XX) $(OBJS_EEPROM)

lib_static:
	$(AR) crv libftd2xx_new.a $(OBJS_USB) $(OBJS_OS) $(OBJS_D2XX) $(OBJS_EEPROM)