Como instalar o driver USB-to-Serial no Ubuntu 17?

1

Eu fui encarregado de escrever algum código para uma cabeça PTZ usando o protocolo Pelco-D, que usa RS485 (2 fios). O código destina-se a ser executado em um Raspi, então eu primeiro descobri como conseguir isso. Uma vez que fiquei satisfeito por poder trocar dados entre o Pi e o PTZ, sentei-me no meu laptop para escrever algum código real e liguei o PTZ a ele através do Ex-1333V usb para o adaptador serial que nós adquirimos para esta finalidade. Ele pode fazer RS232, 422 e 485. Apareceu para funcionar bem o suficiente com apenas os drivers padrão do Ubuntu, pelo menos ambas as portas foram devidamente reconhecidas.

Mas não consegui enviar dados para a cabeça. O indicador de transferência no adaptador se acendeu, mas a cabeça não se moveu. Para o diagnóstico, conectei meu laptop ao Pi. Mais uma vez o indicador acendeu, mas o pi não recebeu nada. Então eu tentei o contrário, enviando do Pi e recebendo no laptop. Isso funcionou sem problemas. Comecei a mexer com a configuração e, finalmente, percebi que o pi estava recebendo um sinal quando o adaptador foi definido para RS232. Os dados estavam confusos, é claro, mas pelo menos alguma coisa estava passando.

Então comecei a pensar sobre o CD do driver fornecido com o adaptador. Pode ser que o driver converta os dados antes de enviá-los através do USB, em vez de convertê-los no adaptador? Isso obviamente não seria tratado pelos drivers padrão. Essa é a suposição de que estou trabalhando atualmente, de qualquer forma.

Então eu peguei os drivers linux no cd, o que acabou sendo um tar contendo um arquivo c, um arquivo de cabeçalho e um makefile. Eu não estou muito familiarizado com o material linux de baixo nível, então fiquei um pouco confuso. Claro, eu poderia construí-lo, mas então o que? Voltando-me para a má desculpa dos adaptadores para um manual, a única coisa que consegui encontrar foi a boa sugestão para "por favor, siga as instruções para instalar os drivers da porta USB na sua distribuição linux em particular". Então eu fui procurar por isso, e encontrei ... nada.

O que me traz aqui. Admito francamente que esta é a primeira vez que estou trabalhando com o serial, então pode haver outras coisas que não estou entendendo aqui, e você deveria se libertar para indicá-las. Mas no momento eu acho que esses pilotos são minha melhor aposta, então alguém poderia me explicar como instalá-los?

ADENDO:

Eu escrevi acima que eu achava que poderia construir o projeto C com facilidade, mas na verdade não tentei. Não vi nenhum ponto nisso sem saber o que fazer depois. Eu assumi errado, como a construção produz um erro. Aqui está a saída do make:

gcc -Wall -D__KERNEL__ -DMODULE -I/lib/modules/4.13.0-37-generic/build/include -D__SMP__ -DSMP -I/usr/src/linux-4.13.0-37-generic/drivers/usb/serial/ -O   -c -o ftdi_sio.o ftdi_sio.c
In file included from /lib/modules/4.13.0-37-generic/build/include/linux/kernel.h:6:0,
                 from ftdi_sio.c:251:
/lib/modules/4.13.0-37-generic/build/include/linux/linkage.h:7:10: fatal error: asm/linkage.h: No such file or directory
 #include <asm/linkage.h>

Eu pesquisei o erro, mas não consegui definir o que fazer. Aparentemente, deve haver um link simbólico para alguns cabeçalhos de sistema neste local, mas não é, mas não consigo descobrir para qual cabeçalho o link deve apontar exatamente. Se eu interpretar o makefile correto (realmente não estou familiarizado com o makefile, nunca fui além de "make this-project-i-downloaded", que geralmente funcionou), ele está apenas tentando construir um arquivo objeto (.o):

# This Makefile has been simplified as much as possible, by putting all
# generic material, independent of this specific directory, into
# ../Rules.make. Read that file for details

# The usb serial headers
INCLUDEUSBSER := $(shell echo "/usr/src/linux-'uname -r'/drivers/usb/serial/")

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

CFLAGS += -I$(INCLUDEUSBSER) -O

OBJS = ftdi.o

all: $(OBJS)

ftdi.o: ftdi_sio.o
    $(LD) -r $^ -o $@

install:
    install -d $(INSTALLDIR)
    install -c $(OBJS) $(INSTALLDIR)

clean:
    rm -f *.o *~ core

Há também um arquivo de regras bastante longo, mas duvido que ajude muito se eu postar a coisa toda. Parece ser tirado e modificado de um livro, como por seu cabeçalho:

# This file is part of the sample code for the book "Linux Device Drivers",
# second edition. It is meant to be generic and is designed to be recycled
# by other drivers. The comments should be clear enough.
# It partly comes from Linux Makefile, and needs GNU make. 

Então talvez alguém já saiba como parece.

    
por UncleBob 16.03.2018 / 15:40

0 respostas